Какой-то хакерский окольный путь, но, похоже, он работает для меня. Надеюсь, кто-нибудь найдет способ получше, но мои первые мысли (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.
Да, вам может даже не понадобиться играть ни с 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
, предназначенного для использования, когда кто-то не имеют указанные ключи.