Так я устал ждать Emacs, чтобы загрузить каждый раз заново, и консультационная Emacs Wiki, я написал мне сценарий вызова, такие как:Emacs клиент/сервер и ClearCase просмотров
#!/bin/bash
# @file: /usr/local/bin/emacs
# @version: 1
server=/tmp/emacs${UID}/server
if [ ! -S ${server} ] ; then
/opt/emacs/bin/emacs --daemon
until [ -S ${server} ] ; do
sleep 1s
done
fi
/opt/emacs/bin/emacsclient -c "[email protected]"
немедленно, однако это не удалось из-за в несвежей гнездо (по другим причинам мой emacs --daemon
был убит неожиданно): Так что я писал:
#!/bin/bash
# @file: /usr/local/bin/emacs
# @version: 2
server=/tmp/emacs${UID}/server
if ! /sbin/fuser ${server} 2> /dev/null ; then
/sbin/funser -k ${server}
rm -f ${server}
fi
if [ ! -S ${server} ] ; then
/opt/emacs/bin/emacs --daemon
until [ -S ${server} ] ; do
sleep 1s
done
fi
/opt/emacs/bin/emacsclient -c "[email protected]"
Это работает, но работает с видом ClearCase я заметил морщин:
В Unix команды ClearCase:
cleartool setview myview-myuser
создает подкаталог оболочку, которая имеет измененную иерархию файловой системы: несколько новых монтирует под /vobs/
, которые с помощью MVFS и видимой только этой оболочки.
Для каждой такой новой оболочки команда /sbin/fuser ${server}
возвращает 1 (ошибка) при первом запуске скрипта вызова Emacs. Таким образом:
- Для версии 1: Существует только один демон, но клиенты Emacs не в состоянии увидеть MVFS крепления под
/vobs/
. - Для версии 2: существует несколько демонов, использующих один и тот же $ {server} сокет.
Таким образом, мои вопросы: Можно ли использовать версию 2? Если да, то как он может работать, если все демоны, по-видимому, используют один и тот же сокет ${server}
? Если нет, что мне делать, чтобы исправить это?
Прогресс:
Так что я получил ответ (см ответы ниже) в части вопроса, и теперь я застрял с , как это исправить? часть:
Я изучаю вопрос о размещении ${server}
под номером /vobs/
и, таким образом, сам ClearCase решает мою проблему. Мне нужно только, чтобы выяснить, если и как Emacs может позволить мне сделать это:
По моему /opt/emacs/share/emacs/23.2/lisp/server.el
server-socket-dir
коренится в значении переменной окружения ${TMPDIR}
, поэтому я попытался:
#!/bin/bash
# @file: /usr/local/bin/emacs
# @version: 3
[ "${CCVIEW}" ] && TMPDIR="/vbos/misc/tmp" || TMPDIR="/tmp"
export TMPDIR
function is_server_up() {
local server=${TMPDIR}/emacs${UID}/server
[ -e ${mysock} ] && /sbin/fuser ${server}
}
if ! is_server_up ; then
/opt/emacs/bin/emacs --daemon
until is_server_up ; do
sleep 1s
echo "DEBUG: sleeping"
done
fi
/opt/emacs/bin/emacsclient -c "[email protected]"
Но когда я вижу:
Loading ~/.emacs.d/this-module.el (source)...
Loading ~/.emacs.d/this-module.el (source)...done
Loading ~/.emacs.d/that-module.el (source)...
Loading ~/.emacs.d/that-module.el (source)...done
... snip ...
Starting Emacs daemon.
ESC [ A
ESC
ESC [
ESC [ a
M-[ A is undefined
... и он никогда не выходит.
Я также попытался исправить server.el
и использовать другую переменную среды, но безрезультатно.
Я второй, чтобы использовать полный путь, я использовал это очень успешно в течение многих лет. Даже создали некоторые вспомогательные скрипты, чтобы легко переключаться между представлениями ... –