Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Executing External Programs from Emacs

41 views
Skip to first unread message

dstein64

unread,
Feb 14, 2009, 1:48:56 AM2/14/09
to
Are there any functions that can launch external programs (not just
command line programs, but also GUI programs) from Emacs? I know that
I can access a shell, and call a program from there, but then emacs is
not operable until I close the program. Prepending the command with
`nohup' is useful, but for some reason it does not work as expected
with all programs, including emacs. I would prefer another way of
doing this - using a specific built-in of emacs lisp if one exists.
Any help would be greatly appreciated. Thanks.

Pascal J. Bourguignon

unread,
Feb 14, 2009, 5:00:06 AM2/14/09
to
dstein64 <DSte...@gmail.com> writes:

> Are there any functions that can launch external programs (not just
> command line programs, but also GUI programs) from Emacs? I know that
> I can access a shell, and call a program from there, but then emacs is
> not operable until I close the program. Prepending the command with
> `nohup' is useful, but for some reason it does not work as expected
> with all programs, including emacs.

You should read: http://catb.org/esr/writings/taoup/html/
Pay particular attention to the chapter 11.

> I would prefer another way of
> doing this - using a specific built-in of emacs lisp if one exists.
> Any help would be greatly appreciated. Thanks.


(defun run-any-program (program &rest arguments)
(let ((output (get-buffer-create (format "*%s output*" (gensym program)))))
(shell-command (format "xterm -T \"Controlling terminal for %s\" -e %s %s &"
(shell-quote-argument program)
(shell-quote-argument program)
(with-output-to-string
(dolist (arg arguments)
(princ (shell-quote-argument arg))
(princ " "))))
output output)))

(run-any-program "xclock")
(run-any-program "vim")
(run-any-program "emacs" "-q" "-nw")
(run-any-program "emacs" "-q")

--
__Pascal Bourguignon__

Nurullah Akkaya

unread,
Feb 14, 2009, 5:30:39 AM2/14/09
to help-gn...@gnu.org
try using M-x term it does not block your session while running.

if you want to roll your own have a look at start-process function.

Lennart Borgman

unread,
Feb 14, 2009, 5:53:12 AM2/14/09
to dstein64, help-gn...@gnu.org

This is OS dependent. There are some examples on EmacsWiki for MS Windows.


Michael Albinus

unread,
Feb 14, 2009, 8:08:01 AM2/14/09
to dstein64, help-gn...@gnu.org
dstein64 <DSte...@gmail.com> writes:

Tramp does it. Tested with Emacs 23.0.90:

(with-temp-buffer
(cd "/ssh:remotehost:")
(add-to-list 'tramp-remote-process-environment
(concat "DISPLAY=" (getenv "DISPLAY"))
(start-file-process "xterm" nil "xterm"))

Best regards, Michael.


Xah Lee

unread,
Feb 14, 2009, 9:47:36 AM2/14/09
to

if you OS support command line to open the gui app, then you can just
use emacs's shell-command. e.g. in mac os x, to open TextEdit, do

(shell-command "open -a TextEdit")

Q: How to open the current directory in Desktop?

You can define a function and assign it a keyboard shortcut, so that
by pressing a button, emacs will switch you to your operating
systems's file manager (aka Desktop) with the current directory open.

On the Mac OS X, this is done with the “/usr/bin/open” command. So,
press “Alt+! open .” to have Finder open the current directory. You
can define the function this way:

(defun open-with-finder ()
"Open the current file in Mac's Finder."
(interactive)
(shell-command "open ."))

(global-set-key (kbd "<f2>") 'open-with-finder)

For a documentation of OS X's “open” command, see “man open”.

On Microsoft Windows, you can use “explorer.exe” instead of the “open”
command.

the above is from

• Emacs and HTML Tips
http://xahlee.org/emacs/emacs_html.html

see also:

• Elisp Lesson: Execute/Compile Current File
http://xahlee.org/emacs/elisp_run_current_file.html

Xah
http://xahlee.org/


tyler

unread,
Feb 14, 2009, 3:30:21 PM2/14/09
to
dstein64 <DSte...@gmail.com> writes:

> Are there any functions that can launch external programs (not just
> command line programs, but also GUI programs) from Emacs?

From a shell within Emacs, call the command followed by '&'. You can
also do this from with the 'shell-command' function, which is invoked
with M-!. So, to call a pdf viewer, for example, you could do:

M-! xpdf & <return>

Cheers,

Tyler

> I know that
> I can access a shell, and call a program from there, but then emacs is
> not operable until I close the program. Prepending the command with
> `nohup' is useful, but for some reason it does not work as expected
> with all programs, including emacs. I would prefer another way of
> doing this - using a specific built-in of emacs lisp if one exists.
> Any help would be greatly appreciated. Thanks.

--
Philosophy of science is about as useful to scientists as ornithology is
to birds. --Richard Feynman

Xavier Maillard

unread,
Feb 14, 2009, 4:25:04 PM2/14/09
to dstein64, help-gn...@gnu.org

Are there any functions that can launch external programs (not just
command line programs, but also GUI programs) from Emacs?

You could try eev-mode [1].

[1] http://www.emacswiki.org/emacs/EevMode

Xavier
--
http://www.gnu.org
http://www.april.org
http://www.lolica.org


Josef G. Bauer

unread,
Feb 16, 2009, 6:52:10 AM2/16/09
to
Hi,

isn't 'call-process' what you are looking for?

Maybe search Google Groups for 'dired-do-shell-command-in-background'.

Greetings

Josef


>>>>> "dstein64" == dstein64 <DSte...@gmail.com> writes:

dstein64> Are there any functions that can launch external
dstein64> programs (not just command line programs, but also GUI
dstein64> programs) from Emacs? I know that I can access a shell,
dstein64> and call a program from there, but then emacs is not
dstein64> operable until I close the program. Prepending the
dstein64> command with `nohup' is useful, but for some reason it
dstein64> does not work as expected with all programs, including
dstein64> emacs. I would prefer another way of doing this - using
dstein64> a specific built-in of emacs lisp if one exists. Any
dstein64> help would be greatly appreciated. Thanks.

0 new messages