/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
XTerm keybindings
Fra : Martin Ehmsen


Dato : 06-05-02 14:10

Hej...

Jeg har et lille problem med min XTerm skal.
For at få HOME og END tasterne til at virke i pine, pico og i
kommandolinien i selve xterm, har jeg tilføjet følgende til .Xdefaults:
xterm*VT100.Translations: #override \
<Key>Home: string(0x1b) string("[H") \n\
<Key>End: string(0x1b) string("[F")
....

Derudover har jeg være inde i dele af pine/pico sourcecode og
tilsvarende ændre tastebindingerne så HOME og END kom til at virke
fornuftigt.
Alt dette virker efter planen.

Men efter disse ændringer har jeg fået et problem med andre programmer
som kører gennem xterm. Fx så virker HOME og END nu ikke, når man bruger
less eller læser man-sider.
Er der nogen som har en løsning på mit problem, som ikke indebærer at
skifte xterm, pine og pico ud?

På forhånd tak
Martin
--
Young man, in mathematics you don't understand things, you just get used
to them.
   von Neumann

 
 
Kent Friis (06-05-2002)
Kommentar
Fra : Kent Friis


Dato : 06-05-02 15:11

Den Mon, 6 May 2002 13:09:34 +0000 (UTC) skrev Martin Ehmsen:
>Hej...
>
>Jeg har et lille problem med min XTerm skal.
>For at få HOME og END tasterne til at virke i pine, pico og i
>kommandolinien i selve xterm, har jeg tilføjet følgende til .Xdefaults:
>xterm*VT100.Translations: #override \
> <Key>Home: string(0x1b) string("[H") \n\
> <Key>End: string(0x1b) string("[F")
>...

Det er en meget dårlig ide. I stedet bør du fixe terminfo eller termcap,
så det virker.

Iflg. terminfo(5) er det følgende koder du skal kigge på:

terminfo: khome, kend
termcap: kh, @7

Mvh
Kent
--
Mails skrevet før 12:00 skal læses med det forbehold, at hjernen først
forventes at være færdig med at boote på det tidspunkt, og indholdet
derfor kan indeholde random data der tilfældigvis lå i den
uinitializerede cache.

Kent Friis (06-05-2002)
Kommentar
Fra : Kent Friis


Dato : 06-05-02 15:13

Den Mon, 6 May 2002 14:11:13 +0000 (UTC) skrev Kent Friis:
>Den Mon, 6 May 2002 13:09:34 +0000 (UTC) skrev Martin Ehmsen:
>>Hej...
>>
>>Jeg har et lille problem med min XTerm skal.
>>For at få HOME og END tasterne til at virke i pine, pico og i
>>kommandolinien i selve xterm, har jeg tilføjet følgende til .Xdefaults:
>>xterm*VT100.Translations: #override \
>> <Key>Home: string(0x1b) string("[H") \n\
>> <Key>End: string(0x1b) string("[F")
>>...
>
>Det er en meget dårlig ide. I stedet bør du fixe terminfo eller termcap,
>så det virker.
>
>Iflg. terminfo(5) er det følgende koder du skal kigge på:
>
>terminfo: khome, kend
>termcap: kh, @7

Det skal lige siges, at inden du går så vidt, bør du sikre dig at $TERM
rent faktisk står til "xterm", og ikke "linux", "con80x25", "vt100"
eller noget andet suspekt.

Mvh
Kent
--
"Handlingen blev afbrudt pga. computerens begrænsede effekt"
- Windows NT på en Pentium III 550 MHz

Martin Ehmsen (06-05-2002)
Kommentar
Fra : Martin Ehmsen


Dato : 06-05-02 15:19

Kent Friis <leeloo@phreaker.net> wrote:
>>Iflg. terminfo(5) er det følgende koder du skal kigge på:
>>
>>terminfo: khome, kend
>>termcap: kh, @7

> Det skal lige siges, at inden du går så vidt, bør du sikre dig at $TERM
> rent faktisk står til "xterm", og ikke "linux", "con80x25", "vt100"
> eller noget andet suspekt.

Jeg har aldrig helt forstået indholdet af terminfo og termcap. Har du
evt. et link (jeg har som du sikkert kan se allerede løst problemet, men
det skader aldrig at lære noget nyt)
Og nej TERM står til xterm. XTerm er et bevidst valg fra min side.

Martin
--
"Only wimps use tape backup: _real_ men just upload their important
stuff on ftp, and let the rest of the world mirror it ;)"
   Linus Torvalds

Kent Friis (06-05-2002)
Kommentar
Fra : Kent Friis


Dato : 06-05-02 15:45

Den Mon, 6 May 2002 14:18:53 +0000 (UTC) skrev Martin Ehmsen:
>Kent Friis <leeloo@phreaker.net> wrote:
>>>Iflg. terminfo(5) er det følgende koder du skal kigge på:
>>>
>>>terminfo: khome, kend
>>>termcap: kh, @7
>
>> Det skal lige siges, at inden du går så vidt, bør du sikre dig at $TERM
>> rent faktisk står til "xterm", og ikke "linux", "con80x25", "vt100"
>> eller noget andet suspekt.
>
>Jeg har aldrig helt forstået indholdet af terminfo og termcap. Har du
>evt. et link (jeg har som du sikkert kan se allerede løst problemet, men
>det skader aldrig at lære noget nyt)
>Og nej TERM står til xterm. XTerm er et bevidst valg fra min side.

Vi starter med termcap (den er nemmest):

/etc/termcap består af en linie pr. terminal. Da dette ikke er læseligt,
kan man indsætte (backslash-linieskift), for at få den til at ignorere
linieskiftet. Det er forøvrigt samme layout som /etc/printcap:

xterm|xterm terminal emulator (X Window System):\
:am:bs:km:mi:ms:xn:\
   :co#80:it#8:li#24:\
:is=\E[!p\E[?3;4l\E[4l\E>:k0=\E[21~:k1=\E[11~:k2=\E[12~:\
:vb=\E[?5h\E[?5l:ve=\E[?25h:vi=\E[?25l:

Linien starter med forskellige navne for terminalen (den første er
den primære). Dernæst kommer en række "capabilities", altså hvad
terminalen kan, og hvordan. Disse skrives mellem ::, fx :bs:, og kan
enten være binære (:bs:), tal (:co#80:) eller strenge (:AL=\E[%dL:).

Hvad hver capability betyder, kan man se i "man 5 terminfo", både for
termcap og terminfo:

navn terminfo termcap beskrivelse
   ---- -------- ------- -----------
columns cols co number of columns in
a line

Altså betyder :co#80: at terminalen har 80 kolonner (tegn) pr. linie.

Skal vi fx. bruge escape-koden for F1, kigger vi først i manualen, og
ser at F1 hedder k1 i termcap, og kf1 i terminfo. Vi finder altså k1
i blokken ovenfor, og ser at den hedder :k1=\E[11~:

\E betyder ESC, altså <ESC>[11~. I fx. vi-editoren vises ESC som ^[,
og trykker man Control-V <ESC>, fås: ^[[11~ - hvilken jo passer med
hvad der stod i termcap.

Enkelte capabilites tager et tal, et tegn eller en streng som parameter,
fx. "slet 7 linier". Det skrives som %d, %c eller %s, nøjagtig som
printf(3) formatstrings.

Terminfo følger samme princip, med en række forskelle:

- hver terminal har sin egen fil.
- der er tale om et binært format, der skal pakkes ud med "infocmp", og
pakkes med "tic":

$ incocmp xterm
# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),
am, bce, km, mc5i, mir, msgr, xenl,
   colors#8, cols#80, it#8, lines#24, pairs#64,
   acsc=`aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,

- der bruges komma i stedet for kolon, og linieskift er uden betydning.
- capability-navnene er længere.

Mvh
Kent
--
Gilthoniel, A Elbereth
Aiya elenion ancalima!
- Tolkien, "The Lord of the Rings"

Martin Ehmsen (06-05-2002)
Kommentar
Fra : Martin Ehmsen


Dato : 06-05-02 18:12

Kent Friis <leeloo@phreaker.net> wrote:
<snip>

Fornemt!!
Dit indlæg er hermed cut'n'pastet ind i min samling af hjælpe filer (og
er dermed ophævet til sandhed

Martin
--
"Only wimps use tape backup: _real_ men just upload their important
stuff on ftp, and let the rest of the world mirror it ;)"
   Linus Torvalds

Martin Ehmsen (06-05-2002)
Kommentar
Fra : Martin Ehmsen


Dato : 06-05-02 15:14

Martin Ehmsen <ehmsen@imada.sdu.dk> wrote:
> Hej...

> Jeg har et lille problem med min XTerm skal.
> For at få HOME og END tasterne til at virke i pine, pico og i
> kommandolinien i selve xterm, har jeg tilføjet følgende til .Xdefaults:
> xterm*VT100.Translations: #override \
> <Key>Home: string(0x1b) string("[H") \n\
> <Key>End: string(0x1b) string("[F")
> ...

> Derudover har jeg være inde i dele af pine/pico sourcecode og
> tilsvarende ændre tastebindingerne så HOME og END kom til at virke
> fornuftigt.
> Alt dette virker efter planen.

> Men efter disse ændringer har jeg fået et problem med andre programmer
> som kører gennem xterm. Fx så virker HOME og END nu ikke, når man bruger
> less eller læser man-sider.
> Er der nogen som har en løsning på mit problem, som ikke indebærer at
> skifte xterm, pine og pico ud?

Jeg har selv fundt løsningen (men mangler stadig et svar...)
Hvis jeg kommenterede de to ovenstående linier i .Xdefaults ud, så
virkede det.
Men her stopper min forståelse altså af hvordan keyboardet bliver mappet
til funktioner i X og i særdeleshed XTerm.
I pico og pine, har jeg sat ovenstående værdier til virke som
"beginning-of-line" og "end-of-line", når jeg så fjerne de to lininer
begynder HOME og END at virke i less og man-sider, så må det jo betyde
at jeg mappet HOME og END til andre værdier. Så derfor burde de ikke
virke i pico og pine, men det gør de altså?!?

Så problemet er løst, men min forståelse er dalet.

Martin
--
"Only wimps use tape backup: _real_ men just upload their important
stuff on ftp, and let the rest of the world mirror it ;)"
   Linus Torvalds

Kent Friis (06-05-2002)
Kommentar
Fra : Kent Friis


Dato : 06-05-02 15:47

Den Mon, 6 May 2002 14:13:35 +0000 (UTC) skrev Martin Ehmsen:
>Martin Ehmsen <ehmsen@imada.sdu.dk> wrote:
>> Hej...
>
>> Jeg har et lille problem med min XTerm skal.
>> For at få HOME og END tasterne til at virke i pine, pico og i
>> kommandolinien i selve xterm, har jeg tilføjet følgende til .Xdefaults:
>> xterm*VT100.Translations: #override \
>> <Key>Home: string(0x1b) string("[H") \n\
>> <Key>End: string(0x1b) string("[F")
>> ...
>
>> Derudover har jeg være inde i dele af pine/pico sourcecode og
>> tilsvarende ændre tastebindingerne så HOME og END kom til at virke
>> fornuftigt.
>> Alt dette virker efter planen.
>
>> Men efter disse ændringer har jeg fået et problem med andre programmer
>> som kører gennem xterm. Fx så virker HOME og END nu ikke, når man bruger
>> less eller læser man-sider.
>> Er der nogen som har en løsning på mit problem, som ikke indebærer at
>> skifte xterm, pine og pico ud?
>
>Jeg har selv fundt løsningen (men mangler stadig et svar...)
>Hvis jeg kommenterede de to ovenstående linier i .Xdefaults ud, så
>virkede det.
>Men her stopper min forståelse altså af hvordan keyboardet bliver mappet
>til funktioner i X og i særdeleshed XTerm.
>I pico og pine, har jeg sat ovenstående værdier til virke som
>"beginning-of-line" og "end-of-line", når jeg så fjerne de to lininer
>begynder HOME og END at virke i less og man-sider, så må det jo betyde
>at jeg mappet HOME og END til andre værdier. Så derfor burde de ikke
>virke i pico og pine, men det gør de altså?!?

Både pico og pine burde bruge termcap eller terminfo. De værdier du har
ændret i selve programmet bruges så kun hvis alt andet slår fejl.

Mvh
Kent
--
Those who write "Optimized for Netscape" og "Best viewed with MSIE"
never figured out the difference between the WWW and a
Word Perfect 4.2 Document.

Martin Ehmsen (06-05-2002)
Kommentar
Fra : Martin Ehmsen


Dato : 06-05-02 18:09

Kent Friis <leeloo@phreaker.net> wrote:
> Både pico og pine burde bruge termcap eller terminfo. De værdier du har
> ændret i selve programmet bruges så kun hvis alt andet slår fejl.

De gør de ikke, kan jeg så oplyse dig om. De har deres egne termcap og
terminfo, og bruger altså ikke systemets:
#ls /programmer/pine4.44/pico/osdep/term*
term.ans term.cap term.dos term.inf

Og det er netop i term.cap og term.inf at jeg har ændret i pico's
default værdier.

Martin
--
"Only wimps use tape backup: _real_ men just upload their important
stuff on ftp, and let the rest of the world mirror it ;)"
   Linus Torvalds

Kent Friis (06-05-2002)
Kommentar
Fra : Kent Friis


Dato : 06-05-02 18:23

Den Mon, 6 May 2002 17:08:37 +0000 (UTC) skrev Martin Ehmsen:
>Kent Friis <leeloo@phreaker.net> wrote:
>> Både pico og pine burde bruge termcap eller terminfo. De værdier du har
>> ændret i selve programmet bruges så kun hvis alt andet slår fejl.
>
>De gør de ikke, kan jeg så oplyse dig om. De har deres egne termcap og
>terminfo, og bruger altså ikke systemets:
>#ls /programmer/pine4.44/pico/osdep/term*
>term.ans term.cap term.dos term.inf
>
>Og det er netop i term.cap og term.inf at jeg har ændret i pico's
>default værdier.

Det lyder ikke smart. Hvad gør de så, når man kommer fra en wy50 eller
noget endnu mere obskurt?

Mvh
Kent
--
"A computer is a state machine.
Threads are for people who can't program state machines."
- Alan Cox

Martin Ehmsen (06-05-2002)
Kommentar
Fra : Martin Ehmsen


Dato : 06-05-02 18:40

Kent Friis <leeloo@phreaker.net> wrote:
>>Og det er netop i term.cap og term.inf at jeg har ændret i pico's
>>default værdier.

> Det lyder ikke smart. Hvad gør de så, når man kommer fra en wy50 eller
> noget endnu mere obskurt?

Nu du spurgte, så blev jeg jo nødt til at undersøge sagen

Det lader til at der fra pine4.00 findes en skjult option (skjult, i den
forstand at den ikke står i pine's interne configurations værktøj, men
man skal ind på deres hjemmeside for at finde den), som hedder:
termdef-takes-precedence som eftersigne skulle gøre at systemets
definitioner "vinder" over de indbyggede i pine og pico.

Dette skulle jeg så have vidst for en dag siden

Meningen med at pine ikke bruger de indbyggede, er vist at pine og pico
skal "hvile" i sig selv. Det er vist ideen...
Man kan heller ikke binde funktionstaster til nye funktioner (medmindre
man hacker koden). Så pine og pico er "take-it-or-leave-it".

Men prøv en gang at tage et kig på koden. Det er noget af det pæneste
c-kode jeg længe (hvis ikke for altid) har set.

Martin
--

Kent Friis (06-05-2002)
Kommentar
Fra : Kent Friis


Dato : 06-05-02 18:53

Den Mon, 6 May 2002 17:40:23 +0000 (UTC) skrev Martin Ehmsen:
>Kent Friis <leeloo@phreaker.net> wrote:
>>>Og det er netop i term.cap og term.inf at jeg har ændret i pico's
>>>default værdier.
>
>> Det lyder ikke smart. Hvad gør de så, når man kommer fra en wy50 eller
>> noget endnu mere obskurt?
>
>Nu du spurgte, så blev jeg jo nødt til at undersøge sagen
>
>Det lader til at der fra pine4.00 findes en skjult option (skjult, i den
>forstand at den ikke står i pine's interne configurations værktøj, men
>man skal ind på deres hjemmeside for at finde den), som hedder:
>termdef-takes-precedence som eftersigne skulle gøre at systemets
>definitioner "vinder" over de indbyggede i pine og pico.
>
>Dette skulle jeg så have vidst for en dag siden
>
>Meningen med at pine ikke bruger de indbyggede, er vist at pine og pico
>skal "hvile" i sig selv. Det er vist ideen...
>Man kan heller ikke binde funktionstaster til nye funktioner (medmindre
>man hacker koden). Så pine og pico er "take-it-or-leave-it".

Men det virker stadig tåbeligt, da Xterm og Rxvt har forskellig termcap
afhængig af version, linux-distribution m.m. - jeg havde i hvert fald
førhen rxvt til at køre med TERM=xterm-color, fordi en del ting ikke
virkede med TERM=xterm. Derudover havde jeg et par KeySym-ting i
..Xdefaults, for at få de sidste taster til at virke. Det er ikke
nødvendigt længere, så der er åbenbart ændret en del. Desuden kan jeg
se at /etc/termcap indeholder separate entries til xterm, afhængig af
om det er XFree 3.3 eller 4.0 og helt andre hvis det ikke er XFree.

Mvh
Kent
--
Those who write "Optimized for Netscape" og "Best viewed with MSIE"
never figured out the difference between the WWW and a
Word Perfect 4.2 Document.

Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408877
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste