L'esecuzione di emacs in GNU Screen sovrascrive le impostazioni .emacs per l'associazione di tasti [home] in FreeBSD 8.2


1

Se utilizzo il seguente file .emacs, sono in grado di andare all'inizio / alla fine della riga corrente usando i tasti home / end come mi aspetterei.

(keyboard-translate ?\C-h ?\C-?)

(add-to-list 'load-path "/home/sam/programs/go/go/misc/emacs/" t)
(require 'go-mode-load)

(global-set-key [kp-home]  'beginning-of-line) ; [Home]
(global-set-key [home]     'beginning-of-line) ; [Home]

(global-set-key [kp-end]  'end-of-line) ; [End]
(global-set-key [end]     'end-of-line) ; [End]

Tuttavia, se apro una sessione sullo schermo, non funziona in questo modo (la chiave [home] mi riporta ancora all'inizio del buffer per qualche motivo).

Ecco il mio file .screenrc se qualcuno può individuare qualcosa di funky lì dentro:

term xterm
defutf8 on
defflow off
startup_message off

# terminfo and termcap for nice 256 color terminal
# allow bold colors - necessary for some reason
attrcolor b ".I"

# tell screen how to set colors. AB = background, AF=foreground
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

#use bash as the default login shell
defshell -bash

EDIT: Apparentemente, usando M-x Descrive-Key (come suggerito da nschum) dice che [begin] viene attivato quando premo il tasto Home sulla mia tastiera quando eseguo emacs all'interno dello schermo. Quando eseguo emacs al di fuori della schermata descriva-chiave si riferisce a [home] come previsto. Sembra che "defutf8 on" sia l'unica voce relativa alla tastiera nel mio .screenrc - c'è qualche altra cosa che potrebbe causare problemi?


Cosa dice la chiave descrittiva di M-x?
nschum

Risposte:


0

Quando esegui un programma in screen, il screen il programma può (e lo farà) fare questo:

  • screen ha la sua descrizione del terminale. Cerca di mappare (convertire) le sequenze di tasti del terminale sottostante in quello.
  • La conversione non è completa. Come soluzione alternativa, screen cerca le descrizioni dei terminali personalizzate che iniziano con screen.$TERM. ncurses fornisce alcuni utili.
  • screen filtra (ignora) alcune sequenze di tasti che non rientrano nella sua nozione di come l'input dovrebbe essere fatto.

Molto probabilmente, il tuo problema è nel primo caso. Se fate

infocmp xterm screen

(presumendo che stai usando il valore più spesso suggerito per TERM, che tu sia o meno tu siamo utilizzando xterm ), potresti notare alcune righe come questa:

kend: '\E[4~', '\EOF'.
khome: '\E[1~', '\EOH'.

L'ultima colonna è la sequenza ( \E è il fuga carattere) che screen invierà al tuo programma quando riceve la colonna centrale da xterm, eccetera.

Il problema con il .screenrc è così sovrascrive il $TERM valore a xterm, confuso screen:

term xterm

Supponete che la conversione sia completa, ma i test dimostrano che non lo è. Questo tipo di problema è perché ncurses fornisce voci personalizzate. Per esempio, questa voce dal database di ncurses è quello che ha effetto sulla mia macchina dato che .screenrc impostazione (perché "xterm" è alterato a "xterm-new"):

screen.xterm-xfree86|screen.xterm-new|screen customized for modern xterm,
        bce@, bw,
        invis@, kIC@, kNXT@, kPRV@, meml@, memu@,
        sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;m,
        E3@, use=screen+italics, use=screen+fkeys, use=xterm-new,

potresti notare il use=screen+fkeys. Dice in effetti: vai avanti e usa le chiavi screen userà, dal momento che è la soluzione più semplice. Ora c'è un sottile problema: screen+fkeys Somiglia a questo:

screen+fkeys|function-keys according to screen,
        kend=\E[4~, kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kfnd@,
        khome=\E[1~, kslt@,

perché (nella schermata di test), ha inviato quelle chiavi piuttosto che ciò che era all'esterno $TERM descrizione del terminale. L'interno $TERM è impostato per xterm, ma screen usa questa voce intermedia quando trasmette chiavi speciali come home / end alla tua sessione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.