unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
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

  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).