[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [h-e-w] Re: backward-kill-word in minibuffer
From: |
Anders Lindgren |
Subject: |
Re: [h-e-w] Re: backward-kill-word in minibuffer |
Date: |
19 Dec 2001 18:17:30 +0100 |
User-agent: |
Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 |
address@hidden writes:
> > My own electric commands look like the following piece of code.
>
> > (defun minibuffer-electric-tilde ()
> > (interactive)
> > (if (eq ?/ (preceding-char))
> > (delete-region (point-min) (point)))
> > (insert ?~))
>
> If all you are trying to do is make the tilde behave as above
> then I would first question why. As you can enter a new filename
> starting with tilde without deleting the existing directory.
>
> If you really want to delete the directory in the prompt it
> may be worth trying to run the minibuffer-complete command
> automatically after inserting the tilde.
>
> You could also look at minibuffer-complete to see how that
> deletes the prompt
Hi Andy!
Well, you're right about the fact that you can write a tilde (as well
as the other characters I've redefined) in the middle of the line.
However, I find it very un-ergonomical to try to find where the line
actually starts. (In fact, I haven't found the feature so valuable
that I've bothered to make a package out of it, but it has felt
strange to be without it.)
The `minibuffer-complete' functionality is not working that well, for
example expanding something with a "$"-sign at the end of a line
causes an error to be thrown. I wanted little bit more fine-grained
control so I decided to edit the line myself.
-- Anders
Ps. Instead of just talking about it, here it is, enjoy:
;;---------------------------------------------------------------------
;; Smarter `read-file-name'.
;;
;; `minibuffer-electric-slash' stolen from XEmacs.
;; Minor-mode:ized by Anders Lindgren.
(if (not (fboundp 'minibuffer-electric-slash))
(progn
(defvar my-electric-file-mode nil)
(defvar my-electric-file-mode-map (make-sparse-keymap))
(make-local-variable 'my-electric-file-mode)
;; Backward compatibility.
(if (not (fboundp 'minibuffer-prompt-end))
(defun minibuffer-prompt-end ()
(point-min)))
(defun minibuffer-electric-slash ()
;; by address@hidden
(interactive)
(and (eq ?/ (preceding-char))
;; permit `//hostname/path/to/file'
(not (eq (point) (1+ (minibuffer-prompt-end))))
;; permit `http://url/goes/here'
(not (eq ?: (char-after (- (point) 2))))
(delete-region (minibuffer-prompt-end) (point)))
(insert ?/))
(defun minibuffer-electric-tilde ()
(interactive)
(if (eq ?/ (preceding-char))
(delete-region (minibuffer-prompt-end) (point)))
(insert ?~))
(defun minibuffer-electric-dollar ()
(interactive)
(if (eq ?/ (preceding-char))
(delete-region (minibuffer-prompt-end) (point)))
(insert ?$))
;; TODO: Check the "special syntax" list (maybe colon is used
;; by ange-ftp?)
(defun minibuffer-electric-colon ()
(interactive)
(let ((pos nil))
(save-excursion
(unless (equal (skip-chars-backward "a-zA-Z") 0)
(setq pos (point))
;; Allow //http:
(if (equal (skip-chars-backward "/") -2)
(setq pos (point)))))
(if pos
(delete-region (minibuffer-prompt-end) pos))
(insert ?:)))
(define-key my-electric-file-mode-map "/" 'minibuffer-electric-slash)
(define-key my-electric-file-mode-map "~" 'minibuffer-electric-tilde)
(define-key my-electric-file-mode-map "$" 'minibuffer-electric-dollar)
(define-key my-electric-file-mode-map ":" 'minibuffer-electric-colon)
(setq minor-mode-map-alist (cons (cons 'my-electric-file-mode
my-electric-file-mode-map)
minor-mode-map-alist))
(defun my-electric-minibuffer-setup ()
(setq my-electric-file-mode
(and (boundp 'minibuffer-completion-table)
(eq minibuffer-completion-table
'read-file-name-internal))))
(defun my-electric-minibuffer-exit ()
(setq my-electric-file-mode nil))
(add-hook 'minibuffer-setup-hook 'my-electric-minibuffer-setup)
(add-hook 'minibuffer-exit-hook 'my-electric-minibuffer-exit)))
--
;; .signature -- File added to the end of mail, containing joke or info.
(defvar me '((profession . "Compiler Designer") (company . "IAR Systems")
(age . 32) (country . "Sweden") (hair . "Long") (lindy-hopper . t)))
;; .signature ends here.