emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/rfn-eshadow.el


From: Stefan Monnier
Subject: [Emacs-diffs] Changes to emacs/lisp/rfn-eshadow.el
Date: Tue, 15 Nov 2005 18:02:04 -0500

Index: emacs/lisp/rfn-eshadow.el
diff -c emacs/lisp/rfn-eshadow.el:1.15 emacs/lisp/rfn-eshadow.el:1.16
*** emacs/lisp/rfn-eshadow.el:1.15      Sat Aug  6 22:13:43 2005
--- emacs/lisp/rfn-eshadow.el   Tue Nov 15 23:02:03 2005
***************
*** 98,104 ****
    '(face file-name-shadow field shadow)
    "Properties given to the `shadowed' part of a filename in the minibuffer.
  Only used when `file-name-shadow-mode' is active.
! If emacs is not running under a window system,
  `file-name-shadow-tty-properties' is used instead."
    :type file-name-shadow-properties-custom-type
    :group 'minibuffer)
--- 98,104 ----
    '(face file-name-shadow field shadow)
    "Properties given to the `shadowed' part of a filename in the minibuffer.
  Only used when `file-name-shadow-mode' is active.
! If Emacs is not running under a window system,
  `file-name-shadow-tty-properties' is used instead."
    :type file-name-shadow-properties-custom-type
    :group 'minibuffer)
***************
*** 121,140 ****
  
  ;;; Internal variables
  
- ;; Regexp to locate dividing point between shadow and real pathname
- (defconst rfn-eshadow-regexp
-   (cond ((memq system-type '(ms-dos windows-nt))
-        ;; This horrible regexp considers the following patterns as
-        ;; starting an absolute pathname, when following a `/' or an `\':
-        ;;   L:  /  //  ~  $  \\  \\\\
-        
"\\(.*[^/]+/+?\\|/*?\\|\\)\\(~\\|$[^$]\\|$\\'\\|[][\\^a-z]:\\|//?\\([^][\\^a-z/$~]\\|[^/$~][^:]\\|[^/$~]?\\'\\)\\)")
-       (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.")
- 
  ;; A list of minibuffers to which we've added a post-command-hook.
  (defvar rfn-eshadow-frobbed-minibufs nil)
  
--- 121,126 ----
***************
*** 168,198 ****
      (add-to-list 'rfn-eshadow-frobbed-minibufs (current-buffer))
      (add-hook 'post-command-hook #'rfn-eshadow-update-overlay nil t)))
  
  ;; post-command-hook to update overlay
  (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
  `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
!     (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))))))
! 
  
- ;;; Note this definition must be at the end of the file, because
- ;;; `define-minor-mode' actually calls the mode-function if the
- ;;; 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 file-name-shadow-mode
    "Toggle File-Name Shadow mode.
--- 154,201 ----
      (add-to-list 'rfn-eshadow-frobbed-minibufs (current-buffer))
      (add-hook 'post-command-hook #'rfn-eshadow-update-overlay nil t)))
  
+ (defsubst rfn-eshadow-sifn-equal (goal pos)
+   (equal goal (condition-case nil
+                 (substitute-in-file-name
+                  (buffer-substring-no-properties pos (point-max)))
+               ;; `substitute-in-file-name' can fail on partial input.
+               (error nil))))
+ 
  ;; post-command-hook to update overlay
  (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
  `file-name-shadow-mode'; the minibuffer should have already
  been set up by `rfn-eshadow-setup-minibuffer'."
!   (condition-case nil
!       (let ((goal (substitute-in-file-name (minibuffer-contents)))
!             (mid (overlay-end rfn-eshadow-overlay))
!             (start (minibuffer-prompt-end))
!             (end (point-max)))
!         (unless
!             ;; Catch the common case where the shadow does not need to move.
!             (and mid
!                  (or (eq mid end)
!                      (not (rfn-eshadow-sifn-equal goal (1+ mid))))
!                  (or (eq mid start)
!                      (rfn-eshadow-sifn-equal goal mid)))
!           ;; Binary search for the greatest position still equivalent to
!           ;; the whole.
!           (while (or (< (1+ start) end)
!                      (if (and (< (1+ end) (point-max))
!                               (rfn-eshadow-sifn-equal goal (1+ end)))
!                          ;; (SIFN end) != goal, but (SIFN (1+end)) == goal,
!                          ;; We've reached a discontinuity: this can happen
!                          ;; e.g. if `end' point to "/:...".
!                          (setq start (1+ end) end (point-max))))
!             (setq mid (/ (+ start end) 2))
!             (if (rfn-eshadow-sifn-equal goal mid)
!                 (setq start mid)
!               (setq end mid)))
!           (move-overlay rfn-eshadow-overlay (minibuffer-prompt-end) start)))
!     ;; `substitute-in-file-name' can fail on partial input.
!     (error nil)))
  
  ;;;###autoload
  (define-minor-mode file-name-shadow-mode
    "Toggle File-Name Shadow mode.
***************
*** 220,224 ****
  
  (provide 'rfn-eshadow)
  
! ;;; arch-tag: dcf70a52-0115-4ec2-b1e3-4f8d3541a888
  ;;; rfn-eshadow.el ends here
--- 223,227 ----
  
  (provide 'rfn-eshadow)
  
! ;; arch-tag: dcf70a52-0115-4ec2-b1e3-4f8d3541a888
  ;;; rfn-eshadow.el ends here




reply via email to

[Prev in Thread] Current Thread [Next in Thread]