создать псевдоним emacs, который запускается в фоновом режиме?

У меня есть псевдоним в bash, который запускает emacsclient, если демон emacs уже запущен, и запускает emacs в противном случае. Однако, в случае запуска нового экземпляра emacs, могу ли я запустить его в фоновом режиме, чтобы по-прежнему использовать этот терминал (или закрыть его)? В моем профиле bash у меня есть

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

И я мог бы быть на терминале и набрать

$ ec newfile

Если демон emacs еще не запущен, могу ли я создать псевдоним, чтобы строка выше выполняла эквивалент

$ emacs newfile &

вместо

$ emacs newfile

(Я также должен упомянуть, что я использую Linux Ubuntu, а emacs-snapshot назначается псевдониму «emacs»).

Спасибо большое!


person hatmatrix    schedule 16.02.2010    source источник


Ответы (2)


Вместо прямого вызова /usr/bin/emacs-snapshot напишите скрипт, который вызывает /usr/bin/emacs-snapshot в фоновом режиме, а затем возвращает:

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

Затем вы вызываете скрипт обычным способом; он запустит фоновый процесс emacs и немедленно вернется.

Если вы хотите пофантазировать, вы можете использовать /bin/bash и disown процесс после esac (получите pid с $!).

person Norman Ramsey    schedule 17.02.2010
comment
Почему case? Простое использование myscript "$@" будет работать так же, как myscript, когда $# равно o. - person dubiousjim; 17.02.2010
comment
@profjim: может быть, в bash, но не в более старых версиях /bin/sh. case гарантирует портативность. В более старых версиях myscript "$@" ведет себя как myscript "", когда $# равно 0. Когда вы будете такими же старыми, как я, вы научитесь сохранять совместимость между ошибками... - person Norman Ramsey; 17.02.2010
comment
Спасибо - мне нужно откреститься от процесса? - person hatmatrix; 18.02.2010
comment
@Stephen: я не понимаю disown так хорошо, как хотелось бы. Я бы выбрал более простое решение, но тогда, если вы обнаружите, что ваша оболочка не завершается или ваш emacs отключается по необъяснимым причинам (или ваш emacs отключается при выходе из оболочки), я бы попытался от него отказаться. - person Norman Ramsey; 18.02.2010
comment
Спасибо - кажется, работает как есть, без необходимости отрекаться..., хотя мой файл .emacs не загружается с помощью этого метода. Я посмотрю на это... но спасибо. - person hatmatrix; 18.02.2010

Хотя это не прямой ответ на ваш вопрос, это более элегантный способ «запустить демон emacs или запустить emacsclient иначе». Создайте следующий псевдоним: alias emacs=emacsclient -c -a "". По состоянию на man emacsclient:

-a, --alternate-editor=EDITOR ... Если значением EDITOR является пустая строка, запустите `emacs --daemon', чтобы запустить Emacs в режиме демона, и попытайтесь подключиться к нему.

person Mirzhan Irkegulov    schedule 24.05.2012