Создать или повторно использовать существующий фрейм Emacs GUI - PullRequest
5 голосов
/ 02 апреля 2012

Предполагая, что сервер Emacs работает, я хочу, чтобы emacsclient <file> либо создал новый кадр (например, -c), когда нет существующего кадра, либо повторно использовал существующий кадр, если он есть.Другими словами, я хочу -c только тогда, когда нет существующего кадра.Это возможно?

Ответы [ 4 ]

1 голос
/ 27 ноября 2012

Я решил свою проблему с помощью набора сценариев оболочки.

my_emacs

#!/bin/sh
emacs24-x $@ 1> /dev/null 2> /dev/null &

Возможно, вам придется изменить emacs24-x на что-то, указывающее на ваш emacs X11.

my_emacsclient

#!/bin/sh
emacsclient $@ 1> /dev/null 2> /dev/null || my_emacs

Добавьте оба файла в PATH через ~ / bin и т. П.

В моем .emacs я также добавил следующие строки

(load "server")
(unless (server-running-p) (server-start))

Также измените некоторые переменные окружения и при желании добавьте псевдоним

export ALTERNATE_EDITOR="my_emacs"
export EDITOR="my_emacsclient -n"
export SUDO_EDITOR="my_emacsclient"
...
alias e="$EDITOR"

При запуске eв вашей оболочке он должен создать или повторно использовать существующий фрейм GUI.Кроме того, запуск e <filename> открывает этот файл во фрейме;вы также можете передать другие флаги, такие как -n в e.

Для того же поведения в других приложениях (скажем, в вашем файловом менеджере), вы также должны изменить файл Edescs .desktop (для меня это * 1025)*) для запуска my_emacs.

Также было бы неплохо изменить emacs на my_emacsclient через систему альтернатив в дистрибутивах на основе Debian (?).

0 голосов
/ 28 сентября 2016

Вот мое решение:

В файле запуска emacs (например, ~ / .emacs / init.el) убедитесь, что у вас есть следующие строки:

;; start emacs server, if it's not already running:
(require 'server)
(unless (server-running-p) (server-start))

Затем добавьте в файл ~ / .bashrc следующее:

function e()
{
   emacsclient "$@" -a "emacs"
}

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

Затем из командной строки 'source' файл ~ / .bashrc:

source ~/.bashrc

Наконец, используйте 'e' для редактирования файла:

e Foobar.java &
e notes.txt &
0 голосов
/ 02 апреля 2012

Возможно, вы захотите попробовать `emacsclient --display" $ DISPLAY "", чтобы принудительно создать кадр GUI, если его еще нет.

0 голосов
/ 02 апреля 2012

emacsclient <file> делает то, что вы хотите.

Если вы просто хотите открыть фрейм без указания файла, вам нужно использовать -c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...