From: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org, snogglethorpe@gmail.com,
teirllm@dms.auburn.edu, miles@gnu.org
Subject: Re: file-name-shadow-mode
Date: Mon, 21 Mar 2005 08:24:38 -0500 [thread overview]
Message-ID: <87is3lw2yk.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <E1DD4jv-0006Yb-0f@fencepost.gnu.org> (Richard Stallman's message of "Sun, 20 Mar 2005 13:01:27 -0500")
> The functionality of rfn-eshadow is quite useful to the vast majority
> of users, and indeed is much-requested, and you want to not enable it
> because you found a minor flaw? A flaw whose only effect is to make
> the prompt slightly less clear that it could be?
I agree that the approximate handling of envvars never seriously bothered
me, but it's clearly a bug we should fix.
I've OTOH been annoyed by the bad interaction with url-handler-mode, where
the file name is most naturally something of the form "http://foo/bar" and
rfn-eshadow.el systematically hides the "http:/".
> I agree: this bug is not enough reason not to enable the feature.
> However, it would be nice to fix the bug.
> [I think it's probably possible to fix this -- e.g., by generating a
> regexp of all non-absolute environment variables and glomming it onto
> the rexexp used for filenames. But my basic point is that it scarcely
> matters.]
> Could you try fixing it that way?
How 'bout the patch below which makes no assumption (that I know of) about
substitute-in-file-name, and will thus correctly even with weird
magic file name handlers.
Stefan
--- rfn-eshadow.el 01 sep 2003 11:45:14 -0400 1.12
+++ rfn-eshadow.el 21 mar 2005 08:19:24 -0500
@@ -1,6 +1,6 @@
;;; rfn-eshadow.el --- Highlight `shadowed' part of read-file-name input text
;;
-;; Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2002, 2005 Free Software Foundation, Inc.
;;
;; Author: Miles Bader <miles@gnu.org>
;; Keywords: convenience minibuffer
@@ -176,25 +176,25 @@
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))))))
-
-\f
-;;; 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]
+ (condition-case nil
+ (let ((goal (substitute-in-file-name (minibuffer-contents)))
+ (start (minibuffer-prompt-end))
+ (end (point-max)))
+ ;; Binary search for the greatest position still equivalent to
+ ;; the whole.
+ (while (< (1+ start) end)
+ (let ((mid (/ (+ start end) 2)))
+ (if (equal (condition-case nil
+ (substitute-in-file-name
+ (buffer-substring mid (point-max)))
+ (error nil))
+ goal)
+ (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)))
+\f
;;;###autoload
(define-minor-mode file-name-shadow-mode
"Toggle File-Name Shadow mode.
@@ -222,5 +222,5 @@
(provide 'rfn-eshadow)
-;;; arch-tag: dcf70a52-0115-4ec2-b1e3-4f8d3541a888
+;; arch-tag: dcf70a52-0115-4ec2-b1e3-4f8d3541a888
;;; rfn-eshadow.el ends here
next prev parent reply other threads:[~2005-03-21 13:24 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-03-17 9:16 file-name-shadow-mode David Kastrup
2005-03-17 12:16 ` file-name-shadow-mode Matt Hodges
2005-03-18 1:56 ` file-name-shadow-mode Miles Bader
2005-03-18 1:59 ` file-name-shadow-mode Miles Bader
2005-03-18 2:17 ` file-name-shadow-mode Nick Roberts
2005-03-18 4:35 ` file-name-shadow-mode Luc Teirlinck
2005-03-18 4:47 ` file-name-shadow-mode Stefan Monnier
2005-03-18 4:55 ` file-name-shadow-mode Luc Teirlinck
2005-03-18 5:18 ` file-name-shadow-mode Luc Teirlinck
2005-03-18 5:37 ` file-name-shadow-mode Luc Teirlinck
2005-03-18 18:20 ` file-name-shadow-mode Richard Stallman
2005-03-19 15:21 ` file-name-shadow-mode Luc Teirlinck
2005-03-19 15:45 ` file-name-shadow-mode David Kastrup
2005-03-19 16:45 ` file-name-shadow-mode Stefan Monnier
2005-03-20 2:14 ` file-name-shadow-mode Luc Teirlinck
2005-03-20 14:13 ` file-name-shadow-mode Stefan Monnier
2005-03-20 16:02 ` file-name-shadow-mode Luc Teirlinck
2005-03-20 16:18 ` file-name-shadow-mode Luc Teirlinck
2005-03-20 2:30 ` file-name-shadow-mode Luc Teirlinck
2005-03-20 3:33 ` file-name-shadow-mode Miles Bader
2005-03-20 4:28 ` file-name-shadow-mode David Kastrup
2005-03-20 17:30 ` file-name-shadow-mode Luc Teirlinck
2005-03-20 18:10 ` file-name-shadow-mode David Kastrup
2005-03-21 1:19 ` file-name-shadow-mode Richard Stallman
2005-03-20 18:01 ` file-name-shadow-mode Richard Stallman
2005-03-20 18:24 ` file-name-shadow-mode Luc Teirlinck
2005-03-20 18:47 ` file-name-shadow-mode David Kastrup
2005-03-20 21:11 ` file-name-shadow-mode Luc Teirlinck
2005-03-20 21:25 ` file-name-shadow-mode Luc Teirlinck
2005-03-21 13:44 ` file-name-shadow-mode Stefan Monnier
2005-03-21 22:24 ` file-name-shadow-mode Luc Teirlinck
2005-03-21 23:00 ` file-name-shadow-mode Stefan Monnier
2005-03-22 20:44 ` file-name-shadow-mode Richard Stallman
2005-03-28 21:32 ` file-name-shadow-mode Stefan Monnier
2005-03-21 13:24 ` Stefan Monnier [this message]
2005-03-21 14:05 ` file-name-shadow-mode David Kastrup
2005-03-21 16:48 ` file-name-shadow-mode Stefan Monnier
2005-03-22 3:34 ` file-name-shadow-mode Richard Stallman
2005-03-21 14:26 ` file-name-shadow-mode Miles Bader
2005-03-21 15:14 ` file-name-shadow-mode David Kastrup
2005-03-21 15:47 ` file-name-shadow-mode David Kastrup
2005-03-21 16:58 ` file-name-shadow-mode Stefan Monnier
2005-03-21 23:57 ` file-name-shadow-mode Luc Teirlinck
2005-03-23 22:55 ` file-name-shadow-mode Stefan Monnier
2005-03-24 0:04 ` file-name-shadow-mode David Kastrup
2005-03-25 6:42 ` file-name-shadow-mode Richard Stallman
2005-03-25 8:45 ` file-name-shadow-mode David Kastrup
2005-03-18 5:23 ` file-name-shadow-mode Richard Stallman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87is3lw2yk.fsf-monnier+emacs@gnu.org \
--to=monnier@iro.umontreal.ca \
--cc=emacs-devel@gnu.org \
--cc=miles@gnu.org \
--cc=snogglethorpe@gmail.com \
--cc=teirllm@dms.auburn.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).