unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Stefan Monnier" <monnier+gnu/emacs@RUM.cs.yale.edu>
Cc: emacs-devel@gnu.org
Subject: Re: using pcomplete for comint.el/shell.el
Date: Fri, 15 Feb 2002 17:49:37 -0500	[thread overview]
Message-ID: <200202152249.g1FMnbU25659@rum.cs.yale.edu> (raw)
In-Reply-To: 1013730609.754.60.camel@space-ghost

> One of the design goals was to avoid loading pcomplete unless the user
> actually used the completion facilities.  So this made things a little
> bit tricky.  I've attached the patch to shell.el to implement this. 
> Other modes will have to do something very similar.  
> 
> Or would it be better if we just unconditionally required pcomplete.el
> for shell.el?
> 
> After this is implemented, we can just remove a lot of cruft in
> comint.el.

Sounds good.  On a related note, I really would like it if we could
make a `read-shell-command' that provides pcomplete completion for
things like M-! and friends.

> Also, one issue to consider is that this will break backwards
> compatibility with modes deriving from comint.

Could you expand on that ?  What kind of breakage ?
Can it be avoided ?


	Stefan

PS: I currently use the following quick-and-ugly hack for `shell-command':



--- simple.el	6 Feb 2002 15:08:45 -0000	1.520
+++ simple.el	15 Feb 2002 22:47:39 -0000
@@ -1135,6 +1152,20 @@
 is run interactively.  A value of nil means that output to stderr and
 stdout will be intermixed in the output stream.")
 
+(defun minibuffer-shell-complete ()
+  "Complete current minibuffer input as a shell command."
+  (interactive)
+  (require 'shell)
+  (pcomplete-shell-setup)
+  (let ((comint-dynamic-complete-functions shell-dynamic-complete-functions))
+    (call-interactively 'comint-dynamic-complete)))
+
+(defvar minibuffer-local-shell-completion-map
+  (let ((map (make-sparse-keymap)))
+    (set-keymap-parent map minibuffer-local-map)
+    (define-key map "\t" 'minibuffer-shell-complete)
+    map))
+
 (defun shell-command (command &optional output-buffer error-buffer)
   "Execute string COMMAND in inferior shell; display output, if any.
 With prefix argument, insert the COMMAND's output at point.
@@ -1186,7 +1217,7 @@
 specifies the value of ERROR-BUFFER."
 
   (interactive (list (read-from-minibuffer "Shell command: "
-					   nil nil nil 'shell-command-history)
+					   nil minibuffer-local-shell-completion-map nil 'shell-command-history)
 		     current-prefix-arg
 		     shell-command-default-error-buffer))
   ;; Look for a handler in case default-directory is a remote file name.
@@ -1399,8 +1430,9 @@
 		 ;; Do this before calling region-beginning
 		 ;; and region-end, in case subprocess output
 		 ;; relocates them while we are in the minibuffer.
-		 (setq string (read-from-minibuffer "Shell command on region: "
-						    nil nil nil
+		 (setq string (read-from-minibuffer
+			       "Shell command on region: "
+			       nil minibuffer-local-shell-completion-map nil
 						    'shell-command-history))
 		 ;; call-interactively recognizes region-beginning and
 		 ;; region-end specially, leaving them in the history.


_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


  reply	other threads:[~2002-02-15 22:49 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-14 23:50 using pcomplete for comint.el/shell.el Colin Walters
2002-02-15 22:49 ` Stefan Monnier [this message]
2002-02-16  1:26   ` Colin Walters
2002-02-16  8:03   ` Eli Zaretskii
2002-02-17 16:48   ` Richard Stallman
2002-02-16 21:55 ` Richard Stallman
2002-02-17  0:43   ` Colin Walters
2002-02-17 22:49     ` Richard Stallman
2002-02-18 21:30       ` John Wiegley
2002-02-18 21:55       ` Colin Walters
2002-02-18 22:21         ` John Wiegley
2002-02-19 21:31         ` Richard Stallman
2002-02-23 21:39           ` Colin Walters

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200202152249.g1FMnbU25659@rum.cs.yale.edu \
    --to=monnier+gnu/emacs@rum.cs.yale.edu \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).