From 2daeea78335f4dbfd4d61fd3e179b41b48922104 Mon Sep 17 00:00:00 2001 From: Phil Sainty Date: Thu, 11 Jul 2019 17:33:12 +0200 Subject: [PATCH] Support program switches in 'comint-run' command * etc/NEWS: * doc/emacs/misc.texi: Describe new behaviour (bug#33037). * lisp/comint.el (comint-run): Add optional SWITCHES argument. With prefix argument C-u, prompt for SWITCHES. --- doc/emacs/misc.texi | 3 ++- etc/NEWS | 4 ++++ lisp/comint.el | 16 ++++++++++++---- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi index cfc50d33b5f..9339626cc45 100644 --- a/doc/emacs/misc.texi +++ b/doc/emacs/misc.texi @@ -1099,7 +1099,8 @@ the directory tracking feature, and a few user commands. @findex comint-run You can use @kbd{M-x comint-run} to execute any program of your choice in a subprocess using unmodified Comint mode---without the -specializations of Shell mode. +specializations of Shell mode. To pass arguments to the program, use +@kbd{C-u M-x comint-run}. @node Shell Prompts @subsection Shell Prompts diff --git a/etc/NEWS b/etc/NEWS index 532babd0fa6..89111b1b7de 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -754,6 +754,10 @@ better emulate 'M-.' in both Bash and zsh, since the former counts from the beginning of the arguments, while the latter counts from the end. ++++ +*** 'comint-run' can now accept a list of switches to pass to the program. +'C-u M-x comint-run' will prompt for the switches interactively. + ** SQL *** SQL Indent Minor Mode diff --git a/lisp/comint.el b/lisp/comint.el index 55e64865a27..049e9e71a79 100644 --- a/lisp/comint.el +++ b/lisp/comint.el @@ -760,16 +760,24 @@ Returns the (possibly newly created) process buffer." (apply #'make-comint-in-buffer name nil program startfile switches)) ;;;###autoload -(defun comint-run (program) - "Run PROGRAM in a Comint buffer and switch to it. +(defun comint-run (program &optional switches) + "Run PROGRAM in a Comint buffer and switch to that buffer. + +If SWITCHES are supplied, they are passed to PROGRAM. With prefix argument +\\[universal-argument] prompt for SWITCHES as well as PROGRAM. + The buffer name is made by surrounding the file name of PROGRAM with `*'s. The file name is used to make a symbol name, such as `comint-sh-hook', and any hooks on this symbol are run in the buffer. + See `make-comint' and `comint-exec'." (declare (interactive-only make-comint)) - (interactive "sRun program: ") + (interactive + (list (read-string "Run program: ") + (and (consp current-prefix-arg) + (split-string-and-unquote (read-string "Switches: "))))) (let ((name (file-name-nondirectory program))) - (switch-to-buffer (make-comint name program)) + (switch-to-buffer (apply #'make-comint name program nil switches)) (run-hooks (intern-soft (concat "comint-" name "-hook"))))) (defun comint-exec (buffer name command startfile switches) -- 2.39.5