Mercurial > emacs
changeset 80220:c67d2b72f70a
(make-auto-save-file-name): Encode more characters in
non-file buffer names. Use url-encoding.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Tue, 26 Feb 2008 16:52:02 +0000 |
parents | ac7edea19aab |
children | e4842173cecd |
files | lisp/files.el |
diffstat | 1 files changed, 10 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/files.el Tue Feb 26 16:34:36 2008 +0000 +++ b/lisp/files.el Tue Feb 26 16:52:02 2008 +0000 @@ -4561,15 +4561,18 @@ (let ((buffer-name (buffer-name)) (limit 0) file-name) - ;; Eliminate all slashes and backslashes by - ;; replacing them with sequences that start with %. - ;; Quote % also, to keep distinct names distinct. - (while (string-match "[/\\%]" buffer-name limit) + ;; Restrict the characters used in the file name to those which + ;; are known to be safe on all filesystems, url-encoding the + ;; rest. + ;; We do this on all platforms, because even if we are not + ;; running on DOS/Windows, the current directory may be on a + ;; mounted VFAT filesystem, such as a USB memory stick. + (while (string-match "[^A-Za-z0-9-_.~#+]" buffer-name limit) (let* ((character (aref buffer-name (match-beginning 0))) (replacement - (cond ((eq character ?%) "%%") - ((eq character ?/) "%+") - ((eq character ?\\) "%-")))) + ;; For multibyte characters, this will produce more than + ;; 2 hex digits, so is not true URL encoding. + (format "%%%02X" character))) (setq buffer-name (replace-match replacement t t buffer-name)) (setq limit (1+ (match-end 0))))) ;; Generate the file name.