help-emacs-windows
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]