Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

create emacs alias that starts in background?

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!

like image 251
hatmatrix Avatar asked Feb 16 '10 23:02

hatmatrix


2 Answers

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 $!).

like image 180
Norman Ramsey Avatar answered Sep 19 '22 22:09

Norman Ramsey


While this is not the direct answer to your question, this is the more elegant way to "start emacs deamon or run emacsclient otherwise". Create the following alias: alias emacs=emacsclient -c -a "". As of man emacsclient:

-a, --alternate-editor=EDITOR ... If the value of EDITOR is the empty string, run `emacs --daemon' to start Emacs in daemon mode, and try to connect to it.

like image 28
Mirzhan Irkegulov Avatar answered Sep 21 '22 22:09

Mirzhan Irkegulov