]> code.delx.au - gnu-emacs/blobdiff - lisp/rfn-eshadow.el
(Info-restore-desktop-buffer): Move from desktop.el. Add Parameters.
[gnu-emacs] / lisp / rfn-eshadow.el
index 38af012ee6bb32dc8fdb10af82cb59cb075d3bbb..5fb31561c411375213f18fc2683e4ea844bec11a 100644 (file)
@@ -1,9 +1,9 @@
 ;;; rfn-eshadow.el --- Highlight `shadowed' part of read-file-name input text
 ;;
 ;;; rfn-eshadow.el --- Highlight `shadowed' part of read-file-name input text
 ;;
-;; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
 ;;
 ;; Author: Miles Bader <miles@gnu.org>
-;; Keywords: convenience
+;; Keywords: convenience minibuffer
 
 ;; This file is part of GNU Emacs.
 
 
 ;; This file is part of GNU Emacs.
 
 
 ;;; Commentary:
 ;;
 
 ;;; Commentary:
 ;;
-;; Defines the mode `read-file-name-electric-shadow-mode'.
+;; Defines the mode `file-name-shadow-mode'.
 ;;
 ;; The `read-file-name' function passes its result through
 ;; `substitute-in-file-name', so any part of the string preceding
 ;; multiple slashes (or a drive indicator on MS-DOS/MS-Windows) is
 ;; ignored.
 ;;
 ;;
 ;; The `read-file-name' function passes its result through
 ;; `substitute-in-file-name', so any part of the string preceding
 ;; multiple slashes (or a drive indicator on MS-DOS/MS-Windows) is
 ;; ignored.
 ;;
-;; If `read-file-name-electric-shadow-mode' is active, any part of the
+;; If `file-name-shadow-mode' is active, any part of the
 ;; minibuffer text that would be ignored because of this is given the
 ;; minibuffer text that would be ignored because of this is given the
-;; properties in `read-file-name-electric-shadow-properties', which may
+;; properties in `file-name-shadow-properties', which may
 ;; be used to make the ignored text invisible, dim, etc.
 ;;
 
 ;; be used to make the ignored text invisible, dim, etc.
 ;;
 
@@ -42,7 +42,7 @@
 \f
 ;;; Customization
 
 \f
 ;;; Customization
 
-(defconst read-file-name-electric-shadow-properties-custom-type
+(defconst file-name-shadow-properties-custom-type
   '(list
     (checklist :inline t
               (const :tag "Invisible"
   '(list
     (checklist :inline t
               (const :tag "Invisible"
@@ -55,7 +55,7 @@
                     :tag "Face"
                     :doc "Display shadowed part of filename using a different face"
                     (const :format "" face)
                     :tag "Face"
                     :doc "Display shadowed part of filename using a different face"
                     (const :format "" face)
-                    (face :value read-file-name-electric-shadow))
+                    (face :value file-name-shadow))
               (list :inline t
                     :format "%t: %v%h"
                     :tag "Brackets"
               (list :inline t
                     :format "%t: %v%h"
                     :tag "Brackets"
                  (sexp :tag "Value")))))
 
 ;;;###autoload
                  (sexp :tag "Value")))))
 
 ;;;###autoload
-(defcustom read-file-name-electric-shadow-properties
-  '(face read-file-name-electric-shadow field shadow)
+(defcustom file-name-shadow-properties
+  '(face file-name-shadow field shadow)
   "Properties given to the `shadowed' part of a filename in the minibuffer.
   "Properties given to the `shadowed' part of a filename in the minibuffer.
-Only used when `read-file-name-electric-shadow-mode' is active.
+Only used when `file-name-shadow-mode' is active.
 If emacs is not running under a window system,
 If emacs is not running under a window system,
-`read-file-name-electric-shadow-tty-properties' is used instead."
-  :type read-file-name-electric-shadow-properties-custom-type
+`file-name-shadow-tty-properties' is used instead."
+  :type file-name-shadow-properties-custom-type
   :group 'minibuffer)
 
 ;;;###autoload
   :group 'minibuffer)
 
 ;;;###autoload
-(defcustom read-file-name-electric-shadow-tty-properties
+(defcustom file-name-shadow-tty-properties
   '(before-string "{" after-string "} " field shadow)
   "Properties given to the `shadowed' part of a filename in the minibuffer.
   '(before-string "{" after-string "} " field shadow)
   "Properties given to the `shadowed' part of a filename in the minibuffer.
-Only used when `read-file-name-electric-shadow-mode' is active and emacs
+Only used when `file-name-shadow-mode' is active and emacs
 is not running under a window-system; if emacs is running under a window
 is not running under a window-system; if emacs is running under a window
-system, `read-file-name-electric-shadow-properties' is used instead."
-  :type read-file-name-electric-shadow-properties-custom-type
+system, `file-name-shadow-properties' is used instead."
+  :type file-name-shadow-properties-custom-type
   :group 'minibuffer)
 
   :group 'minibuffer)
 
-;;;###autoload
-(defface read-file-name-electric-shadow
+(defface file-name-shadow
   '((((background dark))
      :foreground "grey50")
     (t
      :foreground "grey70"))
   '((((background dark))
      :foreground "grey50")
     (t
      :foreground "grey70"))
-  "Face used by `read-file-name-electric-shadow-mode' for the shadow."
+  "Face used by `file-name-shadow-mode' for the shadow."
   :group 'minibuffer)
 
 \f
   :group 'minibuffer)
 
 \f
@@ -130,10 +129,10 @@ system, `read-file-name-electric-shadow-properties' is used instead."
         ;; This horrible regexp considers the following patterns as
         ;; starting an absolute pathname, when following a `/' or an `\':
         ;;   L:  /  //  ~  $  \\  \\\\
         ;; This horrible regexp considers the following patterns as
         ;; starting an absolute pathname, when following a `/' or an `\':
         ;;   L:  /  //  ~  $  \\  \\\\
-        "\\(.*[^/]+/+?\\|/*?\\|\\)\\([$~]\\|[][\\^a-z]:\\|//?\\([^][\\^a-z/$~]\\|[^/$~][^:]\\|[^/$~]?\\'\\)\\)")
+        "\\(.*[^/]+/+?\\|/*?\\|\\)\\(~\\|$[^$]\\|$\\'\\|[][\\^a-z]:\\|//?\\([^][\\^a-z/$~]\\|[^/$~][^:]\\|[^/$~]?\\'\\)\\)")
        (t
         ;; default is for unix-style filenames
        (t
         ;; default is for unix-style filenames
-        "\\(.*/\\)[/$~]"))
+        "\\(.*/\\)\\([/~]\\|$[^$]\\|$\\'\\)"))
   "Regular expression used to match shadowed filenames.
 There should be at least one regexp group; the end of the first one
 is used as the end of the shadowed portion of the filename.")
   "Regular expression used to match shadowed filenames.
 There should be at least one regexp group; the end of the first one
 is used as the end of the shadowed portion of the filename.")
@@ -151,7 +150,7 @@ is used as the end of the shadowed portion of the filename.")
 
 ;; This function goes on minibuffer-setup-hook
 (defun rfn-eshadow-setup-minibuffer ()
 
 ;; This function goes on minibuffer-setup-hook
 (defun rfn-eshadow-setup-minibuffer ()
-  "Set up a minibuffer for `read-file-name-electric-shadow-mode'.
+  "Set up a minibuffer for `file-name-shadow-mode'.
 The prompt and initial input should already have been inserted."
   (when minibuffer-completing-file-name
     (setq rfn-eshadow-overlay
 The prompt and initial input should already have been inserted."
   (when minibuffer-completing-file-name
     (setq rfn-eshadow-overlay
@@ -159,8 +158,8 @@ The prompt and initial input should already have been inserted."
     ;; Give rfn-eshadow-overlay the user's props.
     (let ((props
           (if window-system
     ;; Give rfn-eshadow-overlay the user's props.
     (let ((props
           (if window-system
-              read-file-name-electric-shadow-properties
-            read-file-name-electric-shadow-tty-properties)))
+              file-name-shadow-properties
+            file-name-shadow-tty-properties)))
       (while props
        (overlay-put rfn-eshadow-overlay (pop props) (pop props))))
     ;; Turn on overlay evaporation so that we don't have to worry about
       (while props
        (overlay-put rfn-eshadow-overlay (pop props) (pop props))))
     ;; Turn on overlay evaporation so that we don't have to worry about
@@ -175,20 +174,21 @@ The prompt and initial input should already have been inserted."
 (defun rfn-eshadow-update-overlay ()
   "Update `rfn-eshadow-overlay' to cover shadowed part of minibuffer input.
 This is intended to be used as a minibuffer post-command-hook for
 (defun rfn-eshadow-update-overlay ()
   "Update `rfn-eshadow-overlay' to cover shadowed part of minibuffer input.
 This is intended to be used as a minibuffer post-command-hook for
-`read-file-name-electric-shadow-mode'; the minibuffer should have already
+`file-name-shadow-mode'; the minibuffer should have already
 been set up by `rfn-eshadow-setup-minibuffer'."
   ;; This is not really a correct implementation; it won't always do the
   ;; right thing in the presence of environment variables that
   ;; substitute-in-file-name would expand; currently it just assumes any
   ;; environment variable contains an absolute filename.
   (save-excursion
 been set up by `rfn-eshadow-setup-minibuffer'."
   ;; This is not really a correct implementation; it won't always do the
   ;; right thing in the presence of environment variables that
   ;; substitute-in-file-name would expand; currently it just assumes any
   ;; environment variable contains an absolute filename.
   (save-excursion
-    (goto-char (minibuffer-prompt-end))
-    ;; Update the overlay (which will evaporate if it's empty).
-    (move-overlay rfn-eshadow-overlay
-                 (point)
-                 (if (looking-at rfn-eshadow-regexp)
-                     (match-end 1)
-                   (point)))))
+    (let ((inhibit-point-motion-hooks t))
+      (goto-char (minibuffer-prompt-end))
+      ;; Update the overlay (which will evaporate if it's empty).
+      (move-overlay rfn-eshadow-overlay
+                   (point)
+                   (if (looking-at rfn-eshadow-regexp)
+                       (match-end 1)
+                     (point))))))
 
 \f
 ;;; Note this definition must be at the end of the file, because
 
 \f
 ;;; Note this definition must be at the end of the file, because
@@ -196,19 +196,19 @@ been set up by `rfn-eshadow-setup-minibuffer'."
 ;;; associated variable is non-nil, which requires that all needed
 ;;; functions be already defined.  [This is arguably a bug in d-m-m]
 ;;;###autoload
 ;;; associated variable is non-nil, which requires that all needed
 ;;; functions be already defined.  [This is arguably a bug in d-m-m]
 ;;;###autoload
-(define-minor-mode read-file-name-electric-shadow-mode
-  "Toggle Read-File-Name Electric Shadow mode
-When active, any part of the a filename being read in the minibuffer
-that would be ignored because the result is passed through
-`substitute-in-file-name' is given the properties in
-`read-file-name-electric-shadow-properties', which can be used to make
-that portion dim, invisible, or otherwise less visually noticable.
+(define-minor-mode file-name-shadow-mode
+  "Toggle File-Name Shadow mode.
+When active, any part of a filename being read in the minibuffer
+that would be ignored (because the result is passed through
+`substitute-in-file-name') is given the properties in
+`file-name-shadow-properties', which can be used to make
+that portion dim, invisible, or otherwise less visually noticeable.
 
 With prefix argument ARG, turn on if positive, otherwise off.
 Returns non-nil if the new state is enabled."
   :global t
   :group 'minibuffer
 
 With prefix argument ARG, turn on if positive, otherwise off.
 Returns non-nil if the new state is enabled."
   :global t
   :group 'minibuffer
-  (if read-file-name-electric-shadow-mode
+  (if file-name-shadow-mode
       ;; Enable the mode
       (add-hook 'minibuffer-setup-hook 'rfn-eshadow-setup-minibuffer)
     ;; Disable the mode
       ;; Enable the mode
       (add-hook 'minibuffer-setup-hook 'rfn-eshadow-setup-minibuffer)
     ;; Disable the mode
@@ -222,4 +222,5 @@ Returns non-nil if the new state is enabled."
 
 (provide 'rfn-eshadow)
 
 
 (provide 'rfn-eshadow)
 
+;;; arch-tag: dcf70a52-0115-4ec2-b1e3-4f8d3541a888
 ;;; rfn-eshadow.el ends here
 ;;; rfn-eshadow.el ends here