Может ли emacs, работающий под управлением urxvt, распознавать ключ-модификатор Hyper?

Какой-то хакерский окольный путь, но, похоже, он работает для меня. Надеюсь, кто-нибудь найдет способ получше, но мои первые мысли (ss/netstat ), похоже, не признают SCTP.

Во-первых,используйте procfs, чтобы найти индекс соединения sctp:

$ cat /proc/net/sctp/eps
 ENDPT     SOCK   STY SST HBKT LPORT   UID INODE LADDRS
b6d72780 a8903800 2   10  48   123       0 1895802 0.0.0.0

Возьмите этот inode (1895802 в моем примере )и используйте lsof, чтобы узнать, кому он принадлежит:

$ lsof -R | grep 1895802
socat      8697        2045             root    5u     sock    1895802      0t0       SCTP ENDPT: b6d72780 0.0.0.0[123]

Как видите, я использовал socat, чтобы сокет прослушивал 123/sctp. 8697 - это pid.

2
03.07.2018, 09:30
1 ответ

Да, вам может даже не понадобиться играть ни с xmodmap, ни с модификаторами, просто привяжите их в свой ~/.Xdefaultsвот так:

URxvt.keysym.XF86AudioPlay: string:\030@m
URxvt.keysym.Menu: string:\030@s
URxvt.keysym.Muhenkan: string:\030@h

Как это работает

Чтобы получить хорошее объяснение того, как обрабатываются ключевые события, см. Как работает ввод с клавиатуры и вывод текста? Первый.

TL;DR :Возьмем, к примеру, "C -a", emacs не будет получать "Ctrl вниз, a вниз, a вверх, ctrl вверх", как это делает urxvt, и преобразуем его в\1(да, последовательности ctrl -короткие, C-aсопоставляется с \1, C-bсопоставляется с \2, C-cсопоставляется с \3и так далее ).

Здесь моя модификация происходит очень поздно в процессе, когда urxvt отправляет escape-последовательности. Я прошу urxvt отправить \030@mв emacs, а этоC-x @ m(посмотрите на man ascii, 030 в левом столбце удобно выровнено с X в правом столбце ). C-x @ mдобавляет модификатор meta, C-x @ sдобавляет модификатор super, а C-x @ hдобавляет модификатор hyper (, см.https://www.gnu.org/software/emacs/manual/html_node/emacs/Modifier-Keys.html).

На моей клавиатуре есть клавиши XF86AudioPlay, Menu и Muhenkan, удобно расположенные рядом с клавишей Ctrl, поэтому я привязал к ним мета, супер и гипер.

Возможно, есть лучшее решение, нам нужно узнать, как emacs ожидает получения мета- и гипер-последовательностей перехода, чтобы напрямую отправлять правильную вместо использования обходного пути C-x @ s, предназначенного для использования, когда кто-то не имеют указанные ключи.

0
18.10.2020, 13:11

Теги

Похожие вопросы