comparison lisp/minibuf.el @ 286:57709be46d1b r21-0b41

Import from CVS: tag r21-0b41
author cvs
date Mon, 13 Aug 2007 10:35:03 +0200
parents 558f606b08ae
children e11d67e05968
comparison
equal deleted inserted replaced
285:9a3756523c1b 286:57709be46d1b
203 These are the same places where this behavior would occur later on anyway, 203 These are the same places where this behavior would occur later on anyway,
204 in `substitute-in-file-name'." 204 in `substitute-in-file-name'."
205 :type 'boolean 205 :type 'boolean
206 :group 'minibuffer) 206 :group 'minibuffer)
207 207
208 (defun minibuffer-electric-slash () 208 ;; originally by Stig@hackvan.com
209 ;; by Stig@hackvan.com 209 (defun minibuffer-electric-separator ()
210 (interactive) 210 (interactive)
211 (and minibuffer-electric-file-name-behavior 211 (let ((c last-command-char))
212 (eq ?/ (char-before (point))) 212 (and minibuffer-electric-file-name-behavior
213 (not (save-excursion 213 (eq c directory-sep-char)
214 (eq c (char-before (point)))
215 (not (save-excursion
214 (goto-char (point-min)) 216 (goto-char (point-min))
215 (and (looking-at "^/.+:~?[^/]*/.+") 217 (and (looking-at "/.+:~?[^/]*/.+")
216 (re-search-forward "^/.+:~?[^/]*" nil t) 218 (re-search-forward "^/.+:~?[^/]*" nil t)
217 (progn 219 (progn
218 (delete-region (point) (point-max)) 220 (delete-region (point) (point-max))
219 t)))) 221 t))))
220 (not (save-excursion 222 (not (save-excursion
221 (goto-char (point-min)) 223 (goto-char (point-min))
222 (and (looking-at "^.+://[^/]*/.+") 224 (and (looking-at ".+://[^/]*/.+")
223 (re-search-forward "^.+:/" nil t) 225 (re-search-forward "^.+:/" nil t)
224 (progn 226 (progn
225 (delete-region (point) (point-max)) 227 (delete-region (point) (point-max))
226 t)))) 228 t))))
227 (not (eq (point) (1+ (point-min)))) ; permit `//hostname/path/to/file' 229 ;; permit `//hostname/path/to/file'
228 (or (not (eq ?: (char-after (- (point) 2)))) ; permit `http://url/goes/here' 230 (not (eq (point) (1+ (point-min))))
229 (eq ?/ (char-after (point-min)))) 231 ;; permit `http://url/goes/here'
232 (or (not (eq ?: (char-after (- (point) 2))))
233 (eq ?/ (char-after (point-min))))
230 (delete-region (point-min) (point))) 234 (delete-region (point-min) (point)))
231 (insert ?/)) 235 (insert c)))
232 236
233 (defun minibuffer-electric-tilde () 237 (defun minibuffer-electric-tilde ()
234 (interactive) 238 (interactive)
235 (and minibuffer-electric-file-name-behavior 239 (and minibuffer-electric-file-name-behavior
236 (eq ?/ (char-before (point))) 240 (eq directory-sep-char (char-before (point)))
237 ;; permit URL's with //, for e.g. http://hostname/~user 241 ;; permit URL's with //, for e.g. http://hostname/~user
238 (not (save-excursion (search-backward "//" nil t))) 242 (not (save-excursion (search-backward "//" nil t)))
239 (delete-region (point-min) (point))) 243 (delete-region (point-min) (point)))
240 (insert ?~)) 244 (insert ?~))
241 245
242 (defvar read-file-name-map 246 (defvar read-file-name-map
243 (let ((map (make-sparse-keymap 'read-file-name-map))) 247 (let ((map (make-sparse-keymap 'read-file-name-map)))
244 (set-keymap-parents map (list minibuffer-local-completion-map)) 248 (set-keymap-parents map (list minibuffer-local-completion-map))
245 (define-key map "/" 'minibuffer-electric-slash) 249 (define-key map (vector directory-sep-char) 'minibuffer-electric-separator)
246 (define-key map "~" 'minibuffer-electric-tilde) 250 (define-key map "~" 'minibuffer-electric-tilde)
247 map 251 map
248 )) 252 ))
249 253
250 (defvar read-file-name-must-match-map 254 (defvar read-file-name-must-match-map
251 (let ((map (make-sparse-keymap 'read-file-name-map))) 255 (let ((map (make-sparse-keymap 'read-file-name-map)))
252 (set-keymap-parents map (list minibuffer-local-must-match-map)) 256 (set-keymap-parents map (list minibuffer-local-must-match-map))
253 (define-key map "/" 'minibuffer-electric-slash) 257 (define-key map (vector directory-sep-char) 'minibuffer-electric-separator)
254 (define-key map "~" 'minibuffer-electric-tilde) 258 (define-key map "~" 'minibuffer-electric-tilde)
255 map 259 map
256 )) 260 ))
257 261
258 (defun minibuffer-keyboard-quit () 262 (defun minibuffer-keyboard-quit ()