LINUX.ORG.RU

Emacs в терминале, отличия разных терминалов, перенастройка клавиш и цветовой схемы

 , ,


0

0

В этом треде я буду осваивать запуск 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 имеет влияние, но в пределах палитры. Вот несколько экспериментов:

Копаясь в емаксодоках и на 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>.

Deleted

Последнее исправление: fargred (всего исправлений: 2)

а скорость запуска емакса тебя не пугает ? Каждый раз для мелкого редактирования запускать емакс... алсо, я его тупо не выключаю.

s9gf4ult ★★
()

есть кстати ещё такая функция list-colors-display(на всяк случай, если ты не знал.)

я хочу режим, суть такова: жмёшь комбинацию, например C-r, она выполняет функцию, которая читает ввод с клавиатуры и четыре клавиши в этом режиме могут менять размеры активного окна, по энтеру выход.

windresize скачать // а лучше имхо, golden-ratio

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)

у меня EDITOR-ом работает обычный emacsclient. И поскольку я в 99.9% случаев сижу в иксах(0.1% - это когда я на работе забываю джаббер выключить, лезу туда по ssh и забываю -Y) - мне, в общем-то, пофиг как он в консоли выглядит. Чего и тебе желаю.

lazyklimm ★★★★★
()

Большинство тем в Emacs Color - сторонние, за их поддержку никто не отвечает, потому и косяки вылезают. С этим решили покончить в Emacs 24, включив часть тем в него, но пока многие важные моды там косячат. Использую color-theme-standard, очень проработанная тема, во всем устраивает. Проверь ее, таких фееричных косяков быть не должно. На ней проверил:

Однако, то, что он показывает там, не совсем кореллирует с тем, что находится в буфере

Нормально коррелирует.

Причём, если пройти по ссылке ‘customize face’ из окна, которое вызвано describe face (как на первом скриншоте), то вас выкинет вовсе не в подменю кастомизации basic faces group а в какое-то наспех скомпонованое, которое находится вне какой-либо группы(!) и состоит из надёрганных элементов, которые названиями переклюкаются с элементами basic faces group, но у меня есть сомнения насчёт того, одни и те же ли элементы там предлагается настроить.

Не понял о чем, но нужно задать после «M-x customize face» название интересующего face.

И самая мякотка — если вместо M-x describe-face в том же scratch буфере попросить сразу M-x customize-face, емакс откроет… пустое меню!

4.2. УМВР.

Вот такой бардак во всей емаксовой красе.

Нет там бардака, бардак в головах тех, кто создает сторонние темы.

iVS ★★★★★
()
Ответ на: комментарий от iVS

оке, а теперь скажи, от какого пользователя это будет запускаться, и что будет, если пользователей несколько?

По моему скромному имху пользовательские настройки должны быть пользовательскими, а не системными.

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

оке, а теперь скажи, от какого пользователя это будет запускаться

Подловил! Писал по памяти, а надо так:

rc-update add emacs.username default
где emacs.username - символьная ссылка на /etc/init.d/emacs

iVS ★★★★★
()
Ответ на: комментарий от lazyklimm

а нафига

если у меня

У каждого свои use-cases.

iVS ★★★★★
()
Ответ на: комментарий от Bad_ptr

для мелкоты можно и emacs -Q

М-м нет.

//ну и повторю ещё раз — ненадо использовать color-theme

Удалил же.

есть кстати ещё такая функция list-colors-display(на всяк случай, если ты не знал.)

Ну ёпрст, мне что каждый чих расписывать в оппосте? >_> Видел я этот лист, только связь между ним и font-lock так и осталась под завесой тайны.

windresize скачать // а лучше имхо, golden-ratio

Ок, я потом посмотрю, спасибо.

Deleted
()
Ответ на: комментарий от lazyklimm

Чего и тебе желаю.

Спасибо, не надо. Я намеренно хочу запустить его через терминал, потому что у меня большие планы на обустройство своей жизни в screen.

И прекращайте засорять мой тред на пару с iVS.

Deleted
()
Ответ на: комментарий от iVS

Большинство тем в Emacs Color - сторонние, за их поддержку никто не отвечает, потому и косяки вылезают.

Спасибо кэп.

Проверь ее

Мне не нужны ни темы, ни емакс-24.

но нужно задать после «M-x customize face» название интересующего face.

Подстановка же.

4.2. УМВР.

Повтори?

Нет там бардака, бардак в головах тех, кто создает сторонние темы.

Все мои претензии к сторонним темам заключаются в том, что тебе приходится читать мои скриншоты чёрным по тёмно-серому.

Deleted
()
Ответ на: комментарий от Deleted

большие планы на обустройство своей жизни в screen.

уж кому-кому, а емаксу (с демоном) скрин совершенно необязателен.

И, кстати, не забудь, что поведение screen как XTERM отличается от эмуляторов терминала, в которых запущен.

lazyklimm ★★★★★
()
Ответ на: комментарий от Deleted

ни емакс-24

а какой смысл использовать устаревшую версию?

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

уж кому-кому, а емаксу (с демоном) скрин совершенно необязателен.

Емаксу для емакса? А у меня емакс ради $EDITOR.

И, кстати, не забудь, что поведение screen как XTERM отличается от эмуляторов терминала, в которых запущен.

Интересно, продолжай.

а какой смысл использовать устаревшую версию?

А ради чего мне использовать 24?

Deleted
()
Последнее исправление: fargred (всего исправлений: 1)

в емксе не шарю, но вопрос есть:
ты будешь его использовать регулярно в разных эмуляторах терминалаов?

q11q11 ★★★★★
()
Ответ на: комментарий от Deleted

Емаксу для емакса? А у меня емакс ради $EDITOR.

ну и отлично, пусть висит в фоне демоном, когда надо - цепляемся клиентом и редактируем.

Интересно, продолжай.

man terminfo

А ради чего мне использовать 24?

да даже хотя бы ради package.el искоробочного

lazyklimm ★★★★★
()
Ответ на: комментарий от q11q11

Регулярно — да. В разных эмуляторах терминала — скорее через некое их множество. И я хочу, чтобы в конце емакс всегда выглядел одинаково и клавиши не отваливались. Ну, и не факт, что я останусь на том эмуляторе, что использую сейчас.

Deleted
()
Ответ на: комментарий от lazyklimm

ну и отлично, пусть висит в фоне демоном, когда надо - цепляемся клиентом и редактируем.

А теперь я хочу редактировать файл настройки nginx, который лежит на сервере в облаке за шлюзом и внутри VPN.

man terminfo

Снисходительно улыбается. Найди там хоть слово про емакс.

да даже хотя бы ради package.el искоробочного

Фу *****, фу *****.

Deleted
()
Ответ на: комментарий от Deleted

А теперь я хочу редактировать файл настройки nginx, который лежит на сервере в облаке за шлюзом и внутри VPN.

И что ты делаешь в таком случае?

emacs 24
package.el искоробочного

Фу *****, фу *****.

расходимся, посоны.

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)
Ответ на: комментарий от Deleted

А теперь я хочу редактировать файл настройки nginx, который лежит на сервере в облаке за шлюзом и внутри VPN.

tramp кому придумали?

Найди там хоть слово про емакс.

консольный емакс рисуется через libtinfo, libtinfo использует ncurses, который использует(я бы даже сказал «предоставляет») базу данных terminfo.

Фу *****, фу *****.

любитель el-get? или ручной установки?

lazyklimm ★★★★★
()
Ответ на: комментарий от Bad_ptr

расходимся, посоны.

да, пожалуй медицина бессильна

lazyklimm ★★★★★
()
Ответ на: комментарий от Bad_ptr

И?

Простыню для фаервола ты мейнтейнить будешь? Ок.

Deleted
()
Ответ на: комментарий от lazyklimm

tramp кому придумали?

А, то есть вот сижу я в скрине, фильтрую ps, стопаю nginx, а теперь, чтобы поредактировать его конфиг, открываю второй терминал и трампом тяну через тридевять фаерволов этот конфиг, да? М, как всё просто.

консольный емакс рисуется через libtinfo, libtinfo использует ncurses, который использует(я бы даже сказал «предоставляет») базу данных terminfo.

Мы начали не с того. Позволь, напомню

И, кстати, не забудь, что поведение screen как XTERM отличается от эмуляторов терминала, в которых запущен.

Так вот, отбрасывая хождения вокруг да около (и заодно прекращая засорять мой тред), ты можешь сказать, что должно отвалиться в screen, если я запущу там emacsclient?

Deleted
()
Последнее исправление: fargred (всего исправлений: 1)

$EDITOR

Рекомендую jmacs.

anonymous
()
Ответ на: комментарий от lazyklimm

да даже хотя бы ради package.el искоробочного

Отказался из-за глюков в Wanderlust, а со стабильной версией работает только Emacs 23. А package.el добавляется элементарно.

iVS ★★★★★
()
Ответ на: комментарий от Deleted

Юзаю ssh и screen. Всё равно ж через них сидеть.

И таскаешь настройки емакса на каждый сервер?

Ты не поверишь!

системный пакетный менеджер это канешна круто, сам по возможности использую, но

979 matches for «available» in buffer: *Packages*

таки даёт большую свободу

lazyklimm ★★★★★
()
Ответ на: комментарий от iVS

Отказался из-за глюков в Wanderlust,

я просто пересобрал его из гита, всё ок (хотя хз, может щас и wl-beta нормально работает)

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

И таскаешь настройки емакса на каждый сервер?

Пока он не EDITOR — нет, но буду. Как и ключи, и .bashrc.

таки даёт большую свободу

Ну, ну, ты прям вот все эти 979 пакетов собираешься использовать?
У меня уже после обилия говнотемок и так испорчено впечатление. А то, что мне нужно, давно есть в репозитории, в то время как ELPA обновляется кривовато и несинхронно — я как-то ставил свежий емакс, накатил к нему ecb из ельпы, а cedet к нему не подошёл. Когда поставил оба из репозитория — разом взлетели.

Deleted
()
Ответ на: комментарий от lazyklimm

Видимо ты видишь это как-то так:

tramp → быстро, хорошо, удобно.
EDITOR → старое, неудобное ненужно.

А я вижу это так:

EDITOR → ура, emacs!
tramp → куча новой возни ради сомнительного профита.

Я прочитал http://www.gnu.org/software/tramp/#Usage но так и не понял, чем это должно быть лучше и надёжнее простого вызова редактора из того же шелла, в котором и так сидишь. Да, таскать файл с удалёнки к себе в редактор проще, чем открывать редактор прямо на месте. Но с другой стороны, полноценной гибкости ssh я в примерах использования не заметил, а значит, tramp пригоден только там, где по ssh можно стучаться напрямую (поправьте, если что). Ну и в конце концов tramp в генте тянет за собой xemacs и ещё 40 пакетов.

Deleted
()
Ответ на: комментарий от Deleted

Регулярно — да. В разных эмуляторах терминала

а зачем если не секрет?
не вижу юзкейса для частой систематической смены терминала на одной машине
или же не вижу смысла не ставить один самый попсовый терминал на тех многих машинах которыми будешь поьзоваться

q11q11 ★★★★★
()
Ответ на: комментарий от Deleted

Ну и в конце концов tramp в генте тянет за собой xemacs и ещё 40 пакетов.

вообще-то в GNU он уже с 22й версии искаропки идёт

Да, таскать файл с удалёнки к себе в редактор проще, чем открывать редактор прямо на месте.

и удобнее - потому что у тебя единая среда для работы: единые буфера, единый кэш автодополнения итп.

tramp → куча новой возни ради сомнительного профита.

никакой возни, всё есть искаропки уже больше 5 лет как

EDITOR → старое, неудобное ненужно.

я сам использую EDITOR на _локальной_ машине

lazyklimm ★★★★★
()
Ответ на: комментарий от lazyklimm

вообще-то в GNU он уже с 22й версии искаропки идёт

Где-где? Пора бы мне уже игнорировать посты людей, которые не могут найти шифт на клавиатуре.

никакой возни, всё есть искаропки уже больше 5 лет как

Ок, я-то на #usage сразу прыгнул.

я сам использую EDITOR на _локальной_ машине

Возьмисполкипирожок, а на остальную часть комментария сил ответить так и не хватило?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.