views:

195

answers:

1

Hi, I have an alias in bash that runs emacsclient if emacs daemon is already running and start emacs otherwise. However, in the event that a fresh instance of emacs is fired up, can I make it run in the background so I can still use that terminal (or close it)? In my bash profile, I have

alias ec="/usr/bin/emacsclient.emacs-snapshot -n -c -a /usr/bin/emacs-snapshot"

And I might be at the terminal and type

$ ec newfile

If emacs daemon is not already running, is there an alias I can create to make the line above do the equivalent of

$ emacs newfile &

instead of

$ emacs newfile

(I should also mention that I am using Linux Ubuntu and emacs-snapshot is assigned to the alias, 'emacs').

Thanks much!

+2  A: 

Instead of calling /usr/bin/emacs-snapshot directly, write a script that calls /usr/bin/emacs-snapshot in the background and then returns:

#!/bin/sh
case $# in
  0) /usr/bin/emacs-snapshot &
  *) /usr/bin/emacs-snapshot "$@" &
esac

Then you call the script in the ordinary way; it will launch a background emacs process and return immediately.

If you want to get fancy you can use /bin/bash and disown the process after the esac (get the pid with $!).

Norman Ramsey
Why the `case`? Just using `myscript "$@"` will work the same as `myscript` when $# is o.
profjim
@profjim: maybe in bash but not in older versions of `/bin/sh`. The `case` guarantees portability. In older versions, `myscript "$@"` behaves as `myscript ""` when `$#` is 0. When you're as old as I am, you learn to retain "bug-for-bug compatibility"...
Norman Ramsey
good to know, thanks!
profjim
Thanks - is it necessary for me to disown the process?
Stephen
@Stephen: I don't understand `disown` as well as I would like. I would go with the simpler solution, but then if you find that your shell will not exit or your emacs goes down inexplicably (or your emacs goes down when your shell exits), then I would try disowning it.
Norman Ramsey
Thanks - appears to work as is without having to disown..., though my .emacs file is not loaded with this method. I'll look into it... but thank you.
Stephen