terminal: scrolling region

Amíg mérlegelik, hogy lesz-e tűzijáték, gyorsan becsépeltem pár szót a scrolling region mibenlétéről: Itten van

Hozzászólások

Hm, úgy látom te nagyon értesz ezekhez a terminálemulátoros dolgokhoz! Emiatt bátorkodom megemlíteni neked egy régi gondomat, hátha tudsz segíteni. Olyan régi, hogy nagyjából azóta kínlódok vele amióta áttértem a Linuxra, pedig ennek jópár éve van már.

Szóval: bizonyos terminálemulátorokkal semmi bajom. Másokkal igen. A "baj" alatt azt értem, hogy ha ezen terminálemulátorokban megnyitok valami olyan alkalmazást ahol némi szövegszerkesztés is folyik - tipikus példa erre mondjuk az "mc edit" - akkor itt egyszerűen nem tudok kijelölni sorokat és/vagy sorrészleteket a Shift+KurzorBillentyű kombinációval! Más terminálemulátoroknál ez működik. Néhol a Shift+KurzorLe/Fel működik, csak a Shift+KurzorJobbra/Balra nem, mint épp most is nálam. Konkrétan: jelenleg Sabayon disztrót használok, ezalatt az Urxvt terminálemulátort, és az Mc Edit alatt csak a Shift+KurzorFel/Le működik, de a Shift+KurzorJobbra/Balra nem működik, nem lehet vele kijelölni.

Nagyon sok disztrót és terminálemulátort kipróbáltam már, és számomra "random" jelenségnek tűnik, mintegy szerencse függvényének hogy épp mit fogok ki, működik-e vagy sem.

Na most azt én tudom más postjaidból is hogy komoly tudással rendelkezel, és mert ez a számomra rém komoly gond (oké, meg lehet kerülni trükkökkel de igazán idegesítő) emiatt én tulajdonképpen nem azt szeretném ha konkrétan a mostani "állapotomra" valami ideiglenes orvosságot találnál, mert ugye a fene se tudja meddig marad meg nekem akár a Sabayon disztró akár az urxvt, hanem hogy kissé kiokosíts hogy ez mitől van, és mit lehet tenni annak érdekében hogy működjön, s így legközelebb már akármiféle más esetben is megoldhassam magam e gondot. Semmi baj ha a megoldás érdekében akár újra kell fordítanom az urxvt-t vagy más programot, nem baj ha bele kell nyúlnom a kódba netán, nem ijedek meg ilyesmitől. Max nem sikerül, semmi baj. Érteni szeretném hogy ez mitől van és mit kell(ene) csinálnom, mert ez iszonyúan idegesít régóta.

Köszi előre is a segítségedet!
-------------
Honlapom: http://parancssor.info
Könyvem a VIM-ről: http://mek.oszk.hu/09600/09648/#
=== Sabayon disztró, DWM ablakkezelő ===

Amennyire én tudom, ez a Shift+Nyíl működés az rxvt specialitása, más emulátorok nem csinálnak ilyet -- a lényeg az, hogy a Shif+Nyíl más szekvenciát küld, mint a Nyíl magában, vagy a Ctrl+Nyíl. Vannak segédprogramok a szekvenciák megnézésére, pl: shkeys.c.
Most csak dtelnet van a kezem ügyében (rxvt-t emulálva), abban a következő szekvenciákat látom:


föl-le-jobb-bal
^[[A              27 0x1b 0033
                  91 0x5b 0133
                  65 0x41 0101
^[[B              27 0x1b 0033
                  91 0x5b 0133
                  66 0x42 0102
^[[C              27 0x1b 0033
                  91 0x5b 0133
                  67 0x43 0103
^[[D              27 0x1b 0033
                  91 0x5b 0133
                  68 0x44 0104

Shift + föl-le-jobb-bal
^[[a              27 0x1b 0033
                  91 0x5b 0133
                  97 0x61 0141
^[[b              27 0x1b 0033
                  91 0x5b 0133
                  98 0x62 0142
^[[c              27 0x1b 0033
                  91 0x5b 0133
                  99 0x63 0143
^[[d              27 0x1b 0033
                  91 0x5b 0133
                 100 0x64 0144

Ctrl + föl-le-jobb-bal
^[Oa              27 0x1b 0033
                  79 0x4f 0117
                  97 0x61 0141
^[Ob              27 0x1b 0033
                  79 0x4f 0117
                  98 0x62 0142
^[Oc              27 0x1b 0033
                  79 0x4f 0117
                  99 0x63 0143
^[Od              27 0x1b 0033
                  79 0x4f 0117
                 100 0x64 0144

Ezeket azután a mcedit felismeri, és ebből dönti el, hogy mit is ténykedjen.
Szerintem neked is elsősorban azt kellene kimérned, hogy milyen szekvenciákat kapsz az urxvt-től ezekre a billentyűkombinációkra.

PS: Ha legközelebb unix-közelben leszek, én is kipróbálom ezt az urxvt-t.

Köszi a választ! Megjegyzem, mikor réges-régen még UhuLinuxszal kezdtem, amennyire emlékszem ott ez működött, Gnome terminal alatt. Azaz esetleg mégsem csak az rxvt specialitása talán. De ha az lenne is, az urxvt úgy tudom alapvetően az rxvt "továbbfejlesztett" (vagy hogy nevezzem) változata, akkor pedig nem értem abban miért nem működik.

Ráadásul azt végképp fel nem tudom fogni, egy ennyire alapvető funkció hogyhogy nem magától értetődő MINDEN terminálemulátorban... Ha én készítenék egy efféle szoftvert, egyszerűen pre-alfa verzióként se merném közreadni amíg ez nem működik benne. Tudom, nem én vagyok a programozók gyöngye de nem is erről van szó, hanem hogy ez szerintem olyasmi, ami nélkül az emulátor kvázi használhatatlan, vagy szerényebben fogalmazva a funkcionalitása oly mértékben sérült, hogy csak "nyögvenyelősen" lehet használni. Állandóan olyan érzésem van ettől, mintha zsákban akarnék futni.

-------------
Honlapom: http://parancssor.info
Könyvem a VIM-ről: http://mek.oszk.hu/09600/09648/#
=== Sabayon disztró, DWM ablakkezelő ===

Az shkeys.c program kimenete az én esetemben:

Press any key to see codes, ctrl-D to terminate


FEL:
^[[A              27 0x1b 0033
                  91 0x5b 0133
                  65 0x41 0101
Shift+FEL:
^[[a              27 0x1b 0033
                  91 0x5b 0133
                  97 0x61 0141
LE:
^[[B              27 0x1b 0033
                  91 0x5b 0133
                  66 0x42 0102
Shift+LE:
^[[b              27 0x1b 0033
                  91 0x5b 0133
                  98 0x62 0142
JOBBRA:
^[[C              27 0x1b 0033
                  91 0x5b 0133
                  67 0x43 0103
SHIFT+JOBBRA:
^[[c              27 0x1b 0033
                  91 0x5b 0133
                  99 0x63 0143
BALRA:
^[[D              27 0x1b 0033
                  91 0x5b 0133
                  68 0x44 0104
SHIFT+BALRA:
^[[d              27 0x1b 0033
                  91 0x5b 0133
                 100 0x64 0144

-------------
Honlapom: http://parancssor.info
Könyvem a VIM-ről: http://mek.oszk.hu/09600/09648/#
=== Sabayon disztró, DWM ablakkezelő ===

[code] és [/code] közé kellene tenni... Mindenesetre ezek jónak látszanak, hiszen a Shift hatására az A-B-C-D átalakult a-b-c-d-vé.

Megjegyzés: linux terminálon (Ctrl+Alt+F1..F5) ez nem külön szekvenciával működik, hanem a TIOCLINUX rendszerhívással. Ilyesmi:

#define SHIFT_PRESSED   0x01
#define ALTR_PRESSED    0x02
#define CONTROL_PRESSED 0x04
#define ALTL_PRESSED    0x08

unsigned char modifiers= 6; /* TIOCLINUX subcode=6: módosítók lekérdezése */

ioctl (0, TIOCLINUX, &modifiers);

lásd még: vt.c, keyboard.c

Betettem code tagek közé. Bocs!

Ha azonban a szekvenciák jók, akkor kérdés, hogy miért nem működnek mégsem. Mármint a Shift+Jobbra/Balra nem működik. A Shift+Fel/Le igen. Nem csodálkoznék a dolgon ha egyáltalán semelyik se működne, mert akkor arra gondolnék, hogy biztos az mc vagy az urxvt van lefordítva rosszul (ez Sabayon alatt ami Gentoo-based igazán könnyen lehetséges, a rengeteg USE flag miatt...)

De nem mindegyik szekvencia nem működik. Így aztán egyszerűen elképzelésem sincs mi lehet a baj, egyszerűen nem tudom merrefelé induljak el a nyomozásban, és ezért is kértem tanácsot.
-------------
Honlapom: http://parancssor.info
Könyvem a VIM-ről: http://mek.oszk.hu/09600/09648/#
=== Sabayon disztró, DWM ablakkezelő ===

Az egerrol szolo infok cime is scrolling region lett - szerintem nem arra gondolt a kolto.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. 

Kipróbáltam a konsole-t meg a gnome-terminal-t, az előbbiben a Shift+Nyil egyáltalán nem küldenek semmilyen szekvenciát, az utóbbiban jól mennek, mcedit-ben is.


fel-le-jobb-bal gnome-terminalban:
^[[A              27 0x1b 0033
                  91 0x5b 0133
                  65 0x41 0101
^[[B              27 0x1b 0033
                  91 0x5b 0133
                  66 0x42 0102
^[[C              27 0x1b 0033
                  91 0x5b 0133
                  67 0x43 0103
^[[D              27 0x1b 0033
                  91 0x5b 0133
                  68 0x44 0104

Shift+fel-le-jobb-bal gnome-terminalban:
^[[1;2A           27 0x1b 0033
                  91 0x5b 0133
                  49 0x31 0061
                  59 0x3b 0073
                  50 0x32 0062
                  65 0x41 0101
^[[1;2B           27 0x1b 0033
                  91 0x5b 0133
                  49 0x31 0061
                  59 0x3b 0073
                  50 0x32 0062
                  66 0x42 0102
^[[1;2C           27 0x1b 0033
                  91 0x5b 0133
                  49 0x31 0061
                  59 0x3b 0073
                  50 0x32 0062
                  67 0x43 0103
^[[1;2D           27 0x1b 0033
                  91 0x5b 0133
                  49 0x31 0061
                  59 0x3b 0073
                  50 0x32 0062
                  68 0x44 0104

Ctrl+fel-le-jobb-bal gnome-terminalban:
^[[1;5A           27 0x1b 0033
                  91 0x5b 0133
                  49 0x31 0061
                  59 0x3b 0073
                  53 0x35 0065
                  65 0x41 0101
^[[1;5B           27 0x1b 0033
                  91 0x5b 0133
                  49 0x31 0061
                  59 0x3b 0073
                  53 0x35 0065
                  66 0x42 0102
^[[1;5C           27 0x1b 0033
                  91 0x5b 0133
                  49 0x31 0061
                  59 0x3b 0073
                  53 0x35 0065
                  67 0x43 0103
^[[1;5D           27 0x1b 0033
                  91 0x5b 0133
                  49 0x31 0061
                  59 0x3b 0073
                  53 0x35 0065
                  68 0x44 0104

Referenciaképpen kipróbáltam az 'Eterm'-et, ez pontosan ugyanolyan szekvenciákat generál, mint az rxvt, csak épp a mc nem tud erről (ezt persze csak a saját gépemen teszteltem). Viszont a TERM=rxvt mcedit filenev paranccsal tökéletesen működnek benne a Shift+Nyil és Ctrl+Nyíl kombinációk.

Köszi az infókat, Mester, ÓÓÓÓÓÓÓRIÁSI vagy! (Most tényleg kiabálok, de örömömben!)

Igaz hogy a problémát nem oldottad meg, de nekem sikerült megoldanom, méghozzá a legkifejezettebben csakis amiatt, mert jó ötletet adtál, tippet amin végre elindulhattam! Ezer hála és köszönet érte!

A tipp a TERM változó volt. Ez nálam alapból rxvt-unicode értékre volt beállítva. Na most kipróbáltam hogy beállítom simán rxvt értékre, na úgy már a Shift+Le/Fel se működött. Ezután átállítottam egyszerűen arra hogy xterm, s lőn öröm és bódoccsááá': minden remekül működik!

Most már csak azt szeretném tudni, kizárólag kíváncsiságból s ismereteimet fejlesztendő, hogy tulajdonképpen mi a csudát kapcsolgatok én ezzel a változóval?! Azt értem hogy ez tulajdonképpen egy "flag", ami bizonyos viselkedésmódokat jelez vagy talán ír elő. De miben különböznek ezek a módok és mik veszik figyelembe ezen változó értékét? Hol van definiálva, hogy az egyes TERM értékek tulajdonképpen mit jelentenek, mire vannak hatással? Szóval mit csinál ez? Remélem ebből nem lesz az, hogy az urxvt-ben elindított progik hirtelen nem UTF-8 módon kezelik/kódolják majd nekem az ékezetes karaktereket...

Az is megfelelne, ha csak pár erről szóló linkkel ajándékozol meg.

Köszi előre is!
-------------
Honlapom: http://parancssor.info
Könyvem a VIM-ről: http://mek.oszk.hu/09600/09648/#
=== Sabayon disztró, DWM ablakkezelő ===

A programok a TERM-változóból tudják, hogy mire képes a terminál(emulátor)... egyrészt úgy, hogy beléjük van gyógyítva egy csomó if-utasítás (kevésbé elegáns módszer), másrészt a termcap/terminfo adatbázisból... ez utóbbi az elegánsabb/flexibilisebb módszer, csak sajnos a terminfo hiányos, pl a FAQ-ban is írtam, hogy benne van a 'bold'-ot és a 'blink'-et bekapcsoló szekvencia, de nincs benne az ugyanazeket kikapcsoló szekvencia. (Note to self: Mindezekről kellene értekezni a FAQ-ban is.)

Ha a mc-d egy régebbi darab, megpróbálhatod forrásból telepíteni a legfrissebbet (--prefix=/usr/local opcióval persze), és összehasonlítani a működését a régivel.

Szerk: a 'terminfo hiányos'-t ne úgy értsük, hogy valaki lusta volt, és nem gépelte be mondjuk az xterm-hez a bold_off=\E[21m sort, hanem úgy, hogy globálisan nincs ilyen 'bold_off' definiálva benne (man 5 terminfo) [Ha mégis van, akkor ez rossz példa volt...]

Próbából fordítottam egy mc-4.8.10-t, minden épp úgy megy benne, mint eddig; sőt, az Eterm-et is kezeli trükközés nélkül.

Fordítási beállítások:

./configure \
    --enable-shared \
    --enable-static \
    --prefix=/usr/local \
    --without-x \
    --with-screen=slang \
    --enable-nls \
    --enable-extcharset \
2>&1 | tee log.configure

PS: van valami zavar az erőben az egerentyű kezelését illetően: a görgő nem megy rxvt-ben, de megy xterm-ben és Eterm-ben.

Érdemes lenne nézelődni a [/usr/local]/etc/mc/*keymap* fájlokban, mit mondanak a 'shift-left'-re és társaira -- lehet, hogy a disztribútorok ezekben a fájlokban alkottak valamit (ez csak egy tipp, de a hogy én az ilyen disztribútorokat ismerem, olyanok, mint a kiscserkészek: ahol tudnak, segítenek; ahol nem tudnak... ott legalább megváltoztatnak valamit, hogy nyomot hagyjanak maguk után.)