Ошибка «Неизвестный тип терминала» при попытке запустить emacsclient

(Я использую emacs23 ; на Debian 7; Xfce.)

Я хочу попробовать рекомендованное Gilles решение для быстрых заметок с Emacs .

При попытке запустить emacsclient -a "" -e "(remember-other-frame)" появляется следующая ошибка:

* ОШИБКА *: Неизвестный тип терминала

Что не так?


(Не совсем уверен в том, что я делаю). Я попытался запустить сервер из Emacs: Ctrl + x и начать работу с сервером . Затем он говорит:

Предупреждение (сервер): невозможно запустить сервер Emacs.
Существует существующий сервер Emacs с именем «server».
Чтобы запустить сервер в этом процессе Emacs, остановите существующий
сервера или вызовите `Mx server-force-delete ', чтобы принудительно отключить его.

При нажатии Ctrl + x и вводе команды -force-delete в нем говорится:

Файл подключения «/ tmp / emacs1000 / server» удален

Когда я теперь запускаю emacsclient -a "" -e "(remember-other-frame)" из другого окна терминала (с emacs -nw все еще выполняется в первом), я получаю:

 emacsclient: can't find socket; have you started the server? To start the server in Emacs, type "Mx server-start". Warning: due to a long standing Gtk+ bug http://bugzilla.gnome.org/show_bug.cgi?id=85715 Emacs might crash when run in daemon mode and the X11 connection is unexpectedly lost. Using an Emacs configured with --with-x-toolkit=lucid does not have this problem. ("emacs") Loading 00debian-vars... Loading 00debian-vars...done Loading /etc/emacs/site-start.d/50a2ps.el (source)... Loading /etc/emacs/site-start.d/50a2ps.el (source)...done Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)... Loading debian-ispell... Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)... Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...done Loading debian-ispell...done Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)... Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...done Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...done Starting Emacs daemon. Emacs daemon should have started, trying to connect again *ERROR*: Unknown terminal type 

[Изменить] Запрошенная информация

Выход echo $TERM; echo $DISPLAY echo $TERM; echo $DISPLAY :

 xterm :0.0 

Вы используете это из эмулятора терминала, если да, то где, а не где?

Я не уверен, что такое «эмулятор терминалов», но терминал, который я использую, идентифицирует себя (в меню «Информация») как: Xfce Terminal-Emulator (Terminal 0.4.8). Это по умолчанию используется при установке Debian 7 + Xfce.


Что у вас есть в ~/.emacs и ~/.emacs.d ?

  • ~/.emacs не существует.
  • ~/.emacs.d содержит только auto-save-list подпапок (в котором содержится пустой файл, имя которого начинается с .saves ).

2 Solutions collect form web for “Ошибка «Неизвестный тип терминала» при попытке запустить emacsclient”

Объяснение ошибки

remember-other-frame вызывает switch-to-buffer-other-frame который вызывает display-buffer с переменными pop-up-frames установленными в t . Это приводит к вызову make-frame с аргументом pop-up-frame-alist . Функция make-frame создает кадр на том же устройстве отображения, что и текущий выбранный кадр. (То, что Emacs вызывает фрейм, – это то, что GUI вызывает окно, за исключением того, что кадр также может быть в текстовом терминале.) В этот момент Emacs все еще работает в режиме демона, поэтому нет выбранного кадра. Таким образом, make-frame видит среды GUI и считает, что он должен создать терминальный фрейм, но текстовый терминал также не существует, что приводит к запутанному сообщению об ошибке «Неизвестный тип терминала».

Простое, но неуклюжее обходное решение

remember-other-frame – это правильная функция для вызова из существующего окна Emacs, но технически неверна из emacsclient. Там мы должны использовать опцию -c чтобы Emacs создавал новый фрейм и функцию простого remember .

 emacsclient -a "" -c -e "(remember)" 

Однако это не очень приятно, потому что remember создание окна, которое должно быть уволено с помощью Cc Cc (что также сохраняет примечание), тогда кадр должен быть уволен с Cx 5 0 . Если вы забудете Cc Cc (что тем более вероятно, что сообщение типа Cx 5 0 перезаписывает сообщение для ввода Cc Cc в области эха), заметка даже не сохраняется.

Хороший обходной путь

Настройте make-frame явно, чтобы создать кадр на текущем X-дисплее.

 emacsclient -a "" -e " (let ((pop-up-frame-alist \`((window-system . x) (display . \"$DISPLAY\") ,@pop-up-frame-alist))) (remember-other-frame))" 

Вы можете поместить все это в одну строку, просто не изменяйте пунктуацию.

 emacsclient -a "" -e "(let ((pop-up-frame-alist \`((window-system . x) (display . \"$DISPLAY\") ,@pop-up-frame-alist))) (remember-other-frame))" 

Если вы можете напрямую вызвать (make-frame) , вы можете сказать ему всегда создавать X-фрейм, который позволит избежать этой ошибки, например:

 (select-frame (make-frame '((window-system . x)))) 
  • Как использовать awk-it в Emacs?
  • Как настроить чаепитие в emacs для использования собственной системы уведомлений в gnome
  • Org-mode: Вставка (продвинутых) уравнений LaTeX для HTML expot
  • специфичные для режима emacs keybindings
  • vim / emacs для просмотра рекурсивных результатов поиска grep?
  • Скрипт для открытия файла в уже существующем emacs-процессе
  • Как заставить `helm-execute-persistent-action` не следовать исходному пути symlink
  • Каталог синхронизации emacs shell
  • Как называется графический трюк этого терминального окна, который показывает акцентированные грани вокруг выделенного текста?
  • Отслеживание работы функции в Emacs
  • Трубопроводы в меньшем количестве и редактирование: ошибка «невозможно отредактировать стандартный вход». Обходные?
  • Linux и Unix - лучшая ОС в мире.