В этом треде я буду осваивать запуск Emacs в терминале, чтобы впоследствии назначить его в свой $EDITOR.
Препоны заключаются в том, что
- когда емакс запускается в терминале, это оказывается завязано на ту палитру, которая доступна конкретному эмулятору терминала, нужно этот бордель как-то унифицировать;
- опять же, в зависимости от типа эмулятора терминала одни сочетания клавиш в емаксе работают, другие — нет.
Цвета, заданные через font-lock, вроде бы те же, но после того, как я поставил, а затем удалил color-theme, в иксах всё слетело, а в консольке осталось почти как и было. «Почти», потому что default face в емаксе — довольно странная штука, он как бы есть, а как бы и нет. Попробуйте в scratch буфере поставить курсор на последнюю, пустую строчку и сделать M-x describe-face — емакс послушно откроет в соседнем окне описание некоего default (nil) face. Однако, то, что он показывает там, не совсем кореллирует с тем, что находится в буфере, как, впрочем, и с тем, что в его же, емаксовых настройках. Причём, если пройти по ссылке ‘customize face’ из окна, которое вызвано describe face (как на первом скриншоте), то вас выкинет вовсе не в подменю кастомизации basic faces group а в какое-то наспех скомпонованое, которое находится вне какой-либо группы(!) и состоит из надёрганных элементов, которые названиями переклюкаются с элементами basic faces group, но у меня есть сомнения насчёт того, одни и те же ли элементы там предлагается настроить. И самая мякотка — если вместо M-x describe-face в том же scratch буфере попросить сразу M-x customize-face, емакс откроет… пустое меню! Вот такой бардак во всей емаксовой красе.
Что меня интересовало изначально — это почему цвет фона в емаксе каждый раз разный в новом терминале. Тут надо упомянуть о том, что цвет для background емаксу можно задать через опцию -bg, сначала создалось впечатление, что без неё он в терминале просто проигнорирует настройки default face из font-lock и бекграунд вместе с ним, но оно оказалось ложным, -bg имеет влияние, но в пределах палитры. Вот несколько экспериментов:
- для сравнения: так было в иксах: http://images.netbynet.ru/imgs/6caea2967e0ae800f76308a40bc7bf51.png
- в 88-цветном urxvt: http://images.netbynet.ru/imgs/065d77f302b77aa74ab009d9d40494f8.png
- в 256-цветном: http://images.netbynet.ru/imgs/af96dfcda49ae3f8b8240d946d8afe7b.png
- там же, но с TERM=xterm-256color http://images.netbynet.ru/imgs/e9464b37419f60ea0607939c37f05cb1.png
- -bg «123456¹»² генерирует… прозрачность(!)
Копаясь в емаксодоках и на tldp я смог только узнать, что приложения определяют возможности терминала по переменной TERM, и что описания возможностей этих классифицированы и доступны в /usr/lib/terminfo/, но так просто их не открыть — они бинарные.
Пришло время задать вопросы, как же всё-таки задать цветовую схему так, чтобы она действовала и в терминале? Вроде как понятно, что емакс в терминале зависит от его палитры (об этом вам скажет M-x set-background-face во всё том же scratch буфере, если вы попытаетесь в качестве цвета задать #RRGGBB значение, которого в ней нет), однако, непонятно, где найти соответствие faces номерам цветов из этой палитры.
Как узнать, почему C-, не работает в urxvt? По идее, это должно быть написано в terminfo, но я, видимо, не умею их читать. По крайней мере, C-, я там не нашёл. В любом случае надо как-то выяснить, почему хоткей не работает, сколько их таких, и перебиндить повешенные на них команды от греха подальше³. Если начинать перебиндивать, то я хочу режим, суть такова: жмёшь комбинацию, например C-r, она выполняет функцию, которая читает ввод с клавиатуры и четыре клавиши в этом режиме могут менять размеры активного окна, по энтеру выход. А ещё лучше научите меня писать функции на такие режимы (ох щи, я же делаю из емакса vim)
Где я уже был:
http://emacswiki.org/emacs/ColorTheme
http://www.gnu.org/software/emacs/manual/html_node/emacs/Display.html
http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-11.html
/usr/share/doc/rxvt-unicode-9.15/rxvt-unicode.term*.bz2
https://github.com/sellout/emacs-color-theme-solarized/blob/master/solarized-...
¹ Конечно же, это неправильно, но сам факт!
² Там должны быть прямые программистские кавычки, но кто-то либо очень тупой, либо глубоко заботящийся о тех, кто копипастит с форума в терминал, их поломал.
³ Кажется, я начинаю понимать, почему в емаксе всё через C-x, а не через прямые C-<a-z>.