An improved shell-command for Emacs
Remove deprecated option 'shell-command+-enable-file-substitution'
Use 'shell-quote-argument' where applicable (grep, man)
Do not hard-code glob expansions in tests



You can also use your local clone with git send-email.

#shell-command With a Few Extra Features

Find here the source for shell-command+.el, that defines an extended version of Emacs' shell-command (bound to M-! by default). See (emacs) Single Shell if you are unfamiliar with the command.

shell-command+ has been based on a function named bang by Leah Neukirchen.


shell-command+ is available from GNU ELPA. It can be installed by invoking

M-x package-install RET shell-command+ RET


Bind the command shell-command+ to any key, for example M-!:

(global-set-key (kbd "M-!") #'shell-command+)

No further changes are necessary. It is recommended to consult the shell-command+ documentation string (C-h f shell-command+) and the shell-command+ customisation group (M-x customize-group shell-command+).

Note that Dired rebinds M-!, so it might be necessary to also bind shell-command+ in dired-mode-map. I do this using setup:

(setup (:package shell-command+)
  (:option (remove shell-command+-features) #'shell-command+-implicit-cd
           shell-command+-prompt "$ ")
  (:bind-into dired "M-!" shell-command+)
  (:global "M-!" shell-command+))


As shell-command+.el is distribed as part of GNU ELPA, and therefore requires a copyright assignment to the FSF, for all non-trivial code contributions.

#Source code

shell-command+ is developed on SourceHut.

#Bugs and Patches

Bugs or comments can be submitted to my public inbox.

When contributing, make sure to provide test and use the existing tests defined in shell-command+-tests.el. These can be easily executed using the bundled Makefile:

make test


shell-command+.el and all other source files in this directory are distributed under the GNU Public License, Version 3 (like Emacs itself).