From 09b95ce39ba378b3fe116379c85af5a5a42599cd Mon Sep 17 00:00:00 2001 From: Masatake YAMATO Date: Fri, 13 Apr 2012 23:43:03 +0200 Subject: [PATCH] Make `C-M-f' and friends work better when prompting for file names * minibuffer.el (minibuffer-local-filename-syntax): New variable to allow `C-M-f' and `C-M-b' to move to the nearest path separator. --- etc/NEWS | 3 +++ lisp/ChangeLog | 6 ++++++ lisp/minibuffer.el | 18 +++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/etc/NEWS b/etc/NEWS index f20b7a840b7..23d6dc0cd89 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -44,6 +44,9 @@ prompts for a column number. ** `mouse-avoidance-banish-position' can now be used to customize `mouse-avoidance-mode' further. +** `C-M-f' and `C-M-b' will now move to the path name separator +character when doing minibuffer filename prompts. + * Changes in Specialized Modes and Packages in Emacs 24.2 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c806ed4a803..e8fc25121fd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-13 Masatake YAMATO + + * minibuffer.el (minibuffer-local-filename-syntax): New variable + to allow `C-M-f' and `C-M-b' to move to the nearest path + separator (bug#9511). + 2012-04-13 Lars Ingebrigtsen * avoid.el: Require cl when compiling. And also move the diff --git a/lisp/minibuffer.el b/lisp/minibuffer.el index bcc6a808d22..eb731897212 100644 --- a/lisp/minibuffer.el +++ b/lisp/minibuffer.el @@ -2045,6 +2045,21 @@ and `read-file-name-function'." (funcall (or read-file-name-function #'read-file-name-default) prompt dir default-filename mustmatch initial predicate)) +(defvar minibuffer-local-filename-syntax + (let ((table (make-syntax-table)) + (punctuation (car (string-to-syntax ".")))) + ;; Convert all punctuation entries to symbol. + (map-char-table (lambda (c syntax) + (when (eq (car syntax) punctuation) + (modify-syntax-entry c "_" table))) + table) + (mapc + (lambda (c) + (modify-syntax-entry c "." table)) + '(?/ ?: ?\\)) + table) + "Syntax table to be used in minibuffer for reading file name.") + ;; minibuffer-completing-file-name is a variable used internally in minibuf.c ;; to determine whether to use minibuffer-local-filename-completion-map or ;; minibuffer-local-completion-map. It shouldn't be exported to Elisp. @@ -2113,7 +2128,8 @@ See `read-file-name' for the meaning of the arguments." (lambda () (with-current-buffer (window-buffer (minibuffer-selected-window)) - (read-file-name--defaults dir initial))))) + (read-file-name--defaults dir initial)))) + (set-syntax-table minibuffer-local-filename-syntax)) (completing-read prompt 'read-file-name-internal pred mustmatch insdef 'file-name-history default-filename))) -- 2.11.4.GIT