6

I have a program which can run as a command in bash.

Can I run the program in emacs, in some way similar to run emacs' command (i.e.M-x , e.g. M-x occur), instead of first explicitly running a shell in a buffer of emacs and then running the program in the shell?

Thanks!

Tim
  • 5,007
  • 7
  • 32
  • 61

2 Answers2

14

M-! runs the command shell-command. This will prompt you for the actual command to run in the minibuffer, which then runs. You can run it in the background by putting a & at the end, just as you would in a terminal. alternatively, you can use M-&, async-shell-command.

The output from the shell command will be placed in a temporary buffer. If you want it inserted in the current buffer, use a prefix argument. (i.e., C-u M-!.

A very useful related function is shell-command-on-region, bound to M-| by default. This will run a shell command on the contents of the region. The output will go in a temporary buffer, or, as with M-!, if you use a prefix argument the selected region will be replaced by the output of the shell command.

See (emacs) Single Shell in the manual for more details.

Tyler
  • 22,234
  • 1
  • 54
  • 94
  • @p_wiersig I rejected your edit because I don't fully understand how Compile mode works in this context. With more details, and/or an example, it is probably worth making a separate answer for that! – Tyler Apr 12 '16 at 20:37
3

As mentioned in another answer, shell-command and async-shell-command are the generic way to go.

However, there are also a few tools that can be better in specific contexts.

counsel-linux-app

This one will give you a completion similar to your DE's start menu, allowing to start a usually graphical application, provided it has a configured *.desktop file.

Available from the counsel package on MELPA and here.

make-it-so

If you have a complicated recipe for transforming a file or a set of files into other files, make-it-so might be useful for you. It's on MELPA as well.

abo-abo
  • 14,113
  • 1
  • 30
  • 43