unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: David Kastrup <dak@gnu.org>
Cc: miles@gnu.org, snogglethorpe@gmail.com, teirllm@dms.auburn.edu,
	rms@gnu.org, emacs-devel@gnu.org
Subject: Re: file-name-shadow-mode
Date: Mon, 21 Mar 2005 15:05:38 +0100	[thread overview]
Message-ID: <x57jk1gklp.fsf@lola.goethe.zz> (raw)
In-Reply-To: <87is3lw2yk.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Mon, 21 Mar 2005 08:24:38 -0500")

Stefan Monnier <monnier@iro.umontreal.ca> writes:

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

> +  (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)))

Cute.  It makes the assumption, however, that there is a unique point
where that equivalence occurs.  I don't think that this is correct:
whenever you split in the middle of an environment variable name,
you'll get a nonmatch that can turn into a match if you happen to look
further.  So it would appear to me that one does not get around either
recognizing syntactical entities and skipping them completely instead
of partially, or going through the whole expression anyhow.

It would appear to me that by far the most robust and also efficient
approach would probably be to provide a
substitute-in-file-name-partially primitive that would expand
everything until the next single non-literal change, returning the
relevant information for splicing in the change and continuing the
scan.  Possibly it might come handy for other file name manipulation
tasks.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum

  reply	other threads:[~2005-03-21 14:05 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                   ` file-name-shadow-mode Stefan Monnier
2005-03-21 14:05                     ` David Kastrup [this message]
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=x57jk1gklp.fsf@lola.goethe.zz \
    --to=dak@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=miles@gnu.org \
    --cc=rms@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).