Я не очень знаком с тем, как emacs точно обрабатывает разные терминалы.Но, просмотрев каталог lisp/term
в источниках emacs, я обнаружил, что существование функции terminal-init-xxx
позволяет добавить поддержку различных терминалов.Например, у меня есть:
(defun terminal-init-screen ()
"Terminal initialization function for screen."
;; Use the xterm color initialization code.
(xterm-register-default-colors)
(tty-set-up-initial-frame-faces))
в моем .emacs
, что добавляет поддержку screen-256color
.Вы можете попытаться определить аналогичную функцию для gnome, переименовав вышеупомянутую функцию в terminal-init-gnome
.
ПРИМЕЧАНИЕ. Если вам интересно, вы можете попытаться отследить вызовы из кода tty-run-terminal-initialization
.Сначала он получает тип терминала с помощью функции tty-type
, затем просматривает определенные места для загрузки соответствующего файла терминала, затем пытается найти соответствующую функцию terminal-init-xxx
и, наконец, вызывает ее.Это может помочь вам определить правильное имя для gnome-terminal
.
Похоже, если ваш TERM не указывает, что ваш терминал имеет 256 цветов, emacs будет использовать только 8. Изменение TERM
на gnome-256color
разрешил работать функции регистрации цвета.
В конце концов, есть способ обмануть.Когда я запускаю gnome-terminal
, мой терминал по умолчанию настроен на xterm
.Вместо изменения переменной TERM
можно перенаправить xterm
на другой терминал, скажем, gnome-256color
.Просто создайте каталог $(HOME)/.terminfo/x
, затем запустите ln -s /usr/share/terminfo/g/gnome-256color ~/.terminfo/x/xterm
.Я думаю, что это лучше, чем установка TERM
вручную в .bashrc
, потому что он перенаправляет только определенный терминал на что-то другое.Для входа в консоль по-прежнему будет TERM
как linux
, а не xterm-256color
.