У меня есть файл screenrc, но я нахожу некоторые конфликты, когда я запускаю emacs внутри экрана. Например, перемещение по буферам в emacs, Ctrl-стрелка вправо / стрелка влево, вместо перемещения назад и вперед, отправляет некоторые символы в буферы, такие как 5C, 5D и т.д. Эта проблема существует, даже когда я вызываю экран без какого-либо файла screenrc. Но, по крайней мере, других конфликтов не было. Но я был бы очень признателен, если бы кто-нибудь сказал мне, как это исправить?
Поскольку у меня есть свои собственные привязки в моем файле screenrc, и я хочу продолжать использовать его, я подумал, что я сохраню свой файл screenrc, но когда я хочу запустить emacs на новом экране, я не буду использовать свой screenrc. Есть ли способ при вызове экрана, чтобы не использовать screenrc? До сих пор я управлял, переименовывая свой файл screenrc во что-то другое при запуске emacs.
Есть ли способ, с помощью которого сам emacs может работать как экран, как в случае, когда я использую экран, чтобы мой сеанс emacs не завершался всякий раз, когда удаленный сеанс ssh завершается. Я нашел некоторую документацию относительно клиента emacs и сервера emacs, но не мог понять многое. Я был бы признателен, если бы кто-то мог рассказать, как сохранять сеансы внутри emacs и восстанавливать их, чтобы мне не приходилось использовать экран для emacs, если это возможно, поскольку в одном случае можно будет снова восстановить процесс emacs.
4 ответа
У меня есть только вход по вашему вопросу № 3.
Начиная с emacs 23, в emacs есть режим демона, который для меня избавил от необходимости запускать emacs внутри экрана. При первом входе в систему после загрузки я запускаю emacs --daemon
в терминале. Это запускает Emacs в фоновом режиме. Затем, когда мне нужно использовать emacs, я либо запускаю emacsclient -nc
чтобы получить окно X для моего сеанса emacs, либо emacsclient -t
чтобы получить сеанс терминала.
Несколько клиентов могут сосуществовать счастливо. Я обычно запускаю X-клиента на экране своей рабочей станции на работе, X-клиента через ssh-вход из дома и терминального клиента на моем телефоне. Все говорят с одним и тем же процессом emacs, все мои буферы и другие состояния не повреждены. И если мое ssh-соединение на моем телефоне прервется, я могу просто продолжить с того места, где остановился, после повторного входа в систему.
Я не знаю достаточно о сочетаниях клавиш на экране, чтобы помочь вам с вашими первыми двумя вопросами.
1) Это связано с тем, как Emacs интерпретирует escape-последовательности, отправленные терминалом. Это забавная штука! Вам необходимо настроить карту ввода-декодирования, например, определив следующую функцию в вашем файле .emacs:
(defun terminal-init-screen ()
"Terminal initialization function for GNU screen."
(when (boundp 'input-decode-map)
(define-key input-decode-map "^[[1;5C" [(control right)])
(define-key input-decode-map "^[[1;5D" [(control left)])))
(Обратите внимание, что ^[
в приведенном выше примере не является кареткой, за которой следует открывающая скобка, это один управляющий символ, который вы вводите так: Cq ESC.)
Эта функция магически вызывается Emacs, работающим внутри экрана.
2) Вы можете вызвать экран с параметром -c
, чтобы указать файл, отличный от .screenrc
по умолчанию. Поэтому, если у вас есть специальные конфигурации для экрана, которые вы хотите применять только при запуске Emacs внутри экрана, вы можете поместить их в файл .emacs-screenrc
и запустить emacs внутри экрана следующим образом:
screen -c .emacs-screenrc emacs
Обратите внимание, что этот файл может быть пустым.
3) Управление сессиями в emacs иногда может быть утомительным. В готовом виде Emacs предоставляет режим сохранения на рабочем столе, который я лично не использую, но я читал смешанные отчеты об этом. Возможно, вы захотите попробовать. Хороший обзор альтернативных подходов можно найти в вики Emacs.
Во-первых, альтернативой управлению сессиями является запуск Emacs в качестве сервера и подключение к нему с помощью emacsclient
. Я не знаю, какую документацию вы видели, но официальная документация GNU по Emacs обычно очень хорошая. Посмотри на это:
http://www.gnu.org/software/libtool/manual/emacs/Emacs-Server.html#Emacs-Server
Для № 1
Попробуйте вызвать emacs так изнутри экрана:
TERM=xterm emacs -nw somefile
CTRL+ стрелка теперь должна работать как задумано
Другой способ получить часть 3) - использовать tramp: с помощью tramp вы можете использовать Emacs, работающий на вашем компьютере, для редактирования файла на вашем сервере. Просто откройте /ssh:user@host:/path/to/remote/file
Это также может быть использовано для другого "удаленного" использования, например
/sudo::/etc/bla
для редактирования с использованием sudo,/ftp:user@host:/path/to/remote/file
для редактирования удаленного файла с помощью ftp ...
tramp снова откроет соединение ssh, когда это необходимо, и вы даже можете использовать tramp для запуска программы на удаленном хосте (например, VCS).