/[emacs]/emacs/lisp/vms-patch.el
ViewVC logotype

Diff of /emacs/lisp/vms-patch.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16 by lektu, Mon May 16 11:33:47 2005 UTC revision 1.17 by ttn, Wed May 25 15:16:22 2005 UTC
# Line 193  following bindings are established. Line 193  following bindings are established.
193  All other Emacs commands are still available."  All other Emacs commands are still available."
194    t)    t)
195    
196    ;;;
197    ;;; Filename handling in the minibuffer
198    ;;;
199    (defun vms-magic-right-square-brace ()
200      "\
201    Insert a right square brace, but do other things first depending on context.
202    During filename completion, when point is at the end of the line and the
203    character before is not a right square brace, do one of three things before
204    inserting the brace:
205     - If there are already two left square braces preceding, do nothing special.
206     - If there is a previous right-square-brace, convert it to dot.
207     - If the character before is dot, delete it.
208    Additionally, if the preceding chars are right-square-brace followed by
209    either \"-\" or \"..\", strip one level of directory hierarchy."
210      (interactive)
211      (when (and minibuffer-completing-file-name
212                 (= (point) (point-max))
213                 (not (= 93 (char-before))))
214        (cond
215         ;; Avoid clobbering: user:[one.path][another.path
216         ((search-backward "[" (field-beginning) t 2))
217         ((search-backward "]" (field-beginning) t)
218          (delete-char 1)
219          (insert ".")
220          (goto-char (point-max)))
221         ((= ?. (char-before))
222          (delete-char -1)))
223        (goto-char (point-max))
224        (let ((specs '(".." "-"))
225              (pmax (point-max)))
226          (while specs
227            (let* ((up (car specs))
228                   (len (length up))
229                   (cut (- (point) len)))
230              (when (and (< (1+ len) pmax)
231                         (= ?. (char-before cut))
232                         (string= up (buffer-substring cut (point))))
233                (delete-char (- (1+ len)))
234                (while (not (let ((c (char-before)))
235                              (or (= ?. c) (= 91 c))))
236                  (delete-char -1))
237                (when (= ?. (char-before)) (delete-char -1))
238                (setq specs nil)))
239            (setq specs (cdr specs)))))
240      (insert "]"))
241    
242    (defun vms-magic-colon ()
243      "\
244    Insert a colon, but do other things first depending on context.
245    During filename completion, when point is at the end of the line
246    and the line contains a right square brace, remove all characters
247    from the beginning of the line up to and including such brace.
248    This enables one to type a new filespec without having to delete
249    the old one."
250      (interactive)
251      (when (and minibuffer-completing-file-name
252                 (= (point) (point-max))
253                 (search-backward "]" (field-beginning) t))
254        (delete-region (field-beginning) (1+ (point)))
255        (goto-char (point-max)))
256      (insert ":"))
257    
258    (let ((m minibuffer-local-completion-map))
259      (define-key m "]" 'vms-magic-right-square-brace)
260      (define-key m "/" 'vms-magic-right-square-brace)
261      (define-key m ":" 'vms-magic-colon))
262    
263  ;;; arch-tag: c178494e-2c37-4d02-99b7-e47e615656cf  ;;; arch-tag: c178494e-2c37-4d02-99b7-e47e615656cf
264  ;;; vms-patch.el ends here  ;;; vms-patch.el ends here

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26