BASH nefunguje zkratka ctrl + l

BASH nefunguje zkratka ctrl + l
« kdy: 25. 08. 2011, 23:02:09 »
Ahoj,

instaloval jsem Debian Squeeze a v Bashi mi nefunguje zkratky ctrl+l. Pouzivam GNU bash, verze 4.1.5(1)-release-(i486-pc-linux-gnu)

Reseni ktera jsme vygoolil nepomohla - nevite nekdo jak na to?
Nize nalezena reseni.

I put in "/etc/inputrc" file the following lines:
# for Ctrl+l clear screen
"\C-l":'clear\n'


Put this in your ~/.inputrc:
C-L: clear-screen


Petr Gajdůšek

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #1 kdy: 26. 08. 2011, 05:33:21 »
To je záležitost knihovny libncurses, resp. readline, kterou bash v interaktivním režimu používá pro editaci - pokud není spuštěn s parametrem --noediting, případně terminálu. Editování řádku jinak funguje? Nedojde pri stisku CTRL+L k vypsání ^L ?

Může být problém v terminálu - terminfo databázi nebo v proměnné prostředí TERM. V jaké terminálu to spouštíte?

/usr/bin/clear obrazovku smaže?

Když stiskněte sled ctrl+v, ctrl+L, to co se vytiskne na obrazovku je sekvence zaslaná terminálu. Mělo by to být ^L.

Fungují vám jiné zkratky s control, např. C-a, C-e (v emacs módu)?

Jaký je obsah /etc/inputrc, ~/.inputrc, co je v proměnné $INPUTRC, co v proměnné $TERM ?
Je soubor ze $TERM dostupný v /lib/terminfo nebo /usr/share/terminfo ?

Máte správně nainstalované balíky ncurses-base, ncurses-term, ncurses-bin, libncurses5, readline-common, libreadline5 apod.?

Ještě mohu doporučit man 3 readline nebo info readline a info rluserman

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #2 kdy: 27. 08. 2011, 19:23:33 »
Ahoj,
editovani radku jinak funguje. Pri CTRL+L jen problikne kurzor.Poustim to v Terminál GNOME 2.30.2.

/usr/bin/clear obrazovku smaze.
pri stisku ctrl+v, ctrl+L jen problikne kurzor, kdyz to udelam jeste jednou objevi se ^V.
C-a, C-e (v emacs módu) funguje.

/etc/inputrc
Kód: [Vybrat]
# /etc/inputrc - global inputrc for libreadline
# See readline(3readline) and `info rluserman' for more information.

# Be 8 bit clean.
set input-meta on
set output-meta on
# To allow the use of 8bit-characters like the german umlauts, uncomment
# the line below. However this makes the meta key not work as a meta key,
# which is annoying to those which don't need to type in 8-bit characters.

# set convert-meta off

# try to enable the application keypad when it is called.  Some systems
# need this to enable the arrow keys.
# set enable-keypad on

# see /usr/share/doc/bash/inputrc.arrows for other codes of arrow keys

# do not bell on tab-completion
# set bell-style none
# set bell-style visible

# some defaults / modifications for the emacs mode
$if mode=emacs

# allow the use of the Home/End keys
"\e[1~": beginning-of-line
"\e[4~": end-of-line

# allow the use of the Delete/Insert keys
"\e[3~": delete-char
"\e[2~": quoted-insert

# mappings for "page up" and "page down" to step to the beginning/end
# of the history
# "\e[5~": beginning-of-history
# "\e[6~": end-of-history

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

$if term=rxvt
"\e[8~": end-of-line
"\eOc": forward-word
"\eOd": backward-word
$endif

# for non RH/Debian xterm, can't hurt for RH/Debian xterm
# "\eOH": beginning-of-line
# "\eOF": end-of-line

# for freebsd console
# "\e[H": beginning-of-line
# "\e[F": end-of-line


~/.inputrc - neexistuje
$INPUTRC - nic neobsahuje (resp. vypsal se prazdny radek.)
$TERM - obsahuje "xterm"
xterm neni ani v /lib/terminfo ani v /usr/share/terminfo

Mam instalovany vsechny baliky az na libreadline5, mam ale libreadline6



JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re: BASH nefunguje zkratka ctrl + l
« Odpověď #3 kdy: 27. 08. 2011, 20:11:01 »
Co kdyz si Gnome terminal nebo Gnome samo Ctrl-L na neco odchytava a bashi se to vubec nedostane? Chodi to v konzoli (Ctrl-Alt-F1)? Me to chodi v Terminatoru pod Lxde a nikde jsem nic nenastavoval. V konzoli to chodi take.

Petr Gajdůšek

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #4 kdy: 28. 08. 2011, 06:14:29 »
xterm neni ani v /lib/terminfo ani v /usr/share/terminfo

Já mám /lib/terminfo/x/xterm. Pokud tam skutečně není, tak zkus přeinstalovat ncurses-base, ale nezdá se mi to, asi by nefungovala editace řádku vůbec.

Co kdyz si Gnome terminal nebo Gnome samo Ctrl-L na neco odchytava a bashi se to vubec nedostane?

Zkus xev, z toho poznáš jestli není zkratka odchytávaná. Pokud je vše ok, tak zkontroluj klávesové zkratky nastavené v gnome-terminálu.


Re: BASH nefunguje zkratka ctrl + l
« Odpověď #5 kdy: 28. 08. 2011, 17:49:27 »
/lib/terminfo/x/xterm mam taky
Ctrl-Alt-F1 me prepne do terminalu
klávesové zkratky - kontroloval jsem, neni tam nastaveno ctrl+l

Ve vystupu xev se nejak nevyznam, na co bych se mel zamerit?

Petr Gajdůšek

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #6 kdy: 28. 08. 2011, 22:02:35 »
Nejrychleji otestovat by to šlo asi takhle:
Kód: [Vybrat]
$ xev | grep 'state 0x4, keycode 46 (keysym 0x6c, l)'a v okně, které otevře xev, stisknout CTRL-l. Při každém stisku by se měly objevit dva řádky:
Kód: [Vybrat]
    state 0x4, keycode 46 (keysym 0x6c, l), same_screen YES,
    state 0x4, keycode 46 (keysym 0x6c, l), same_screen YES,

Pokud je to tak, tak to globální zkratka není.
Normálně dostane okno při stisku klávesy událost typu KeyPress  a při uvolnění KeyRelease (viz man 3 XKeyEvent). Tyhle události by tedy mělo okno dostat při stisku CTRL+l čtyřikrát. Stisknutí CTRL, stisknutí l, uvolnění l a uvolnění CTRL.:

Kód: [Vybrat]
KeyPress event, serial 30, synthetic NO, window 0x1400001,
    root 0xac, subw 0x0, time 25450119, (95,-15), root:(96,520),
    state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0x1400001,
    root 0xac, subw 0x0, time 25450862, (95,-15), root:(96,520),
    state 0x4, keycode 46 (keysym 0x6c, l), same_screen YES,
    XLookupString gives 1 bytes: (0c) "
                                       "
    XmbLookupString gives 1 bytes: (0c) "
                                         "
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x1400001,
    root 0xac, subw 0x0, time 25450932, (95,-15), root:(96,520),
    state 0x4, keycode 46 (keysym 0x6c, l), same_screen YES,
    XLookupString gives 1 bytes: (0c) "
                                       "
    XFilterEvent returns: False

KeyRelease event, serial 33, synthetic NO, window 0x1400001,
    root 0xac, subw 0x0, time 25451283, (95,-15), root:(96,520),
    state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Pokud je CTRL+l globální zkratka, tedy tu klávesu odchytí kořenové okno, tak naše xev okno obdrží:
1) Při stisknutí CTRL dostane událost KeyPress.
2) Při stisknutí "l" ztratí okno zaměření (událost FocusOut s mode=NotifyGrab a detail=NotifyAncestor - tj. zaměření si vzalo nadřazené okno, nejspíš kořenové, viz. man 3 XFocusChangeEvent )
3) Při uvolnění "l" dostane zpátky zaměření a KeymapNotify (viz man 3 XKeymapEvent)
4) Případně obdrží při uvolnění CTRL událost KeyRelease, pokud nebylo uvolněno dříve než "l".
Tedy nedostane události pro stisknutí a uvolnění klávesy "l", ani z události KeymapNotify při navrácení zaměření nezjistí, že bylo stisknuto "l".

Pokud by jsi sledoval i události kořenového okna (xev -root), tak mezi body 2 a 3:
2.1) Kořenové okno dostane zaměření a událost KeymapNotify s bitmapou stisknutých kláves (ctrl a l)
2.2) Při uvolnění "l" zaměření ztratí (vrátí ho oknu xev).
U obou případů bude v detail=NotifyInferior, tj. zaměření získá od a předá podřadnému oknu (naše okno s xev). To dostane zpět zaměření (bod 3) a událost KeymapNotify s bitmapou stisknutých kláves (ale bez "l", které již bylo uvolněno). KeymapNotify událost je generována vždy po získání zaměření.

Klidně sem pošli výstup pro xev...

Petr Gajdůšek

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #7 kdy: 28. 08. 2011, 22:24:24 »
Pokud tedy zjistíš, že CTRL-l není odchytáváno globálně (zjistíš pomocí xev, nebo prostě že třeba v iceweaselu  nebo v xtermu funguje), tak hledej problém v gnome-terminálu. V gnome-terminálu si projeď i nabídky menu a zkontroluj, jestli některé položce není přiřazeno ctrl+l - v klávesových zkratkách nejsou uvedeny všechny, a pokud jsi měl povolenou změnu klávesových zkratek  označením položky v menu a stisknutím nové zkratky (klíč can_change_accels v gconf), a někdy jsi stiskl ctrl+l zatímco jsi byl v menu, tak si ji mohl přeřadit.

Mimochodem v xtermu to také nefunguje?

Z toho co jsi psal, se mi nezdá, že by to byl problém terminálu, ale můžeš to zkusit i v konsoli? Případně přeinstalovat ncurses-base? /etc/terminfo/ je prázdný (kromě README) ?

Ještě mě napadá, pokud by jsi při stisku ctrl+l v xev okně, neviděl nic (ani by xev neztratilo focus), tak to možná odchytává nějaký daemon a do xserveru se to vůbec nedostane. Třeba nějaký daemon pro globální klávesové zkratky (nebo třeba acpid ?? - nevím jestli umí odchytávat kombinace kláves).

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #8 kdy: 30. 08. 2011, 22:09:06 »
Cau omlouvam se za zdrzeni, mel jsme toho moc. Ted k testovani. CTRL+L pri xev zobrazuju nasledujici:


Kód: [Vybrat]
FocusIn event, serial 33, synthetic NO, window 0x1e00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 33, synthetic NO, window 0x0,
    keys:  2   0   0   0   32  0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

FocusOut event, serial 33, synthetic NO, window 0x1e00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 33, synthetic NO, window 0x1e00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 33, synthetic NO, window 0x0,
    keys:  2   0   0   0   32  0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

FocusOut event, serial 33, synthetic NO, window 0x1e00001,
    mode NotifyGrab, detail NotifyAncestor

FocusIn event, serial 33, synthetic NO, window 0x1e00001,
    mode NotifyUngrab, detail NotifyAncestor

KeymapNotify event, serial 33, synthetic NO, window 0x0,
    keys:  2   0   0   0   32  0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeyRelease event, serial 33, synthetic NO, window 0x1e00001,
    root 0x106, subw 0x0, time 3057154, (204,-6), root:(208,63),
    state 0x4, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Kdyz zkousim ostatni CTRL+ pismenko tak to funguje jak ma. Zobrazuje se tam prislusne pismenko.

xterm - to je nejaky druh emulatoru terminalu?

V terminalu (ctrl+alt+f[1-7]) zkratka ctrl+l FUNGUJE!

Petr Gajdůšek

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #9 kdy: 01. 09. 2011, 01:14:15 »
Ano, xterm je emulátor terminálu, stejně jako gnome-terminal.

Z toho logu je zřejmé, že tu zkratku něco odchytává.
Budeš muset tu aplikaci najít, bohužel nevím jak...

1) Pokud ukládá nastavení do gconf databáze, tak by jsi mohl začít takto:
$ gconftool -R --list-type=string  / | grep -iw l | grep -Eiw "Control|Ctrl"
2) Neběží xbindkeys. Pokud ano, neukáže se zkratka v xbindkeys_show ?
3) Co zkusit vytvořit nového uživatele a pokud tam bude fungovat, tak porovnat procesy? Pokud i tam bude ta zkratka odchytávána, můžeš zkusit začít s programy v /etc/xdg/autostart/.

Petr Gajdůšek

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #10 kdy: 01. 09. 2011, 01:19:34 »
Citace
$ gconftool -R --list-type=string  / | grep -iw l | grep -Eiw "Control|Ctrl"
má být
$ gconftool -R / | grep -iw l | grep -Eiw "Control|Ctrl"[/quote]

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #11 kdy: 02. 09. 2011, 23:55:28 »
Ahoj,
tak jsme na tu zahadu prisel uplne nahodou. Zprovoznil jsem zamykani obrazovky a pri dalsim stisku ctrl+l se mi obrazovka zamkla. Pak uz bylo jednoduche odvodit si, ze v systemu byla tato zkratka nastavena pro zamykani obrazovky.

Mockrat diky za pomoc a venovany cas.

petrrrr

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #12 kdy: 31. 10. 2011, 14:42:12 »
Tyjo omlouvam se ze pisu sem, ale nevi tady nekdo jak skakat v php-cli pomoci CTRL+sipka vpravo/vlevo po celem slove? Misto skoceni kurzoru mi to vypise ;5D

Dik

petrrrr

Re: BASH nefunguje zkratka ctrl + l
« Odpověď #13 kdy: 31. 10. 2011, 14:44:08 »
Tak jsem zjistil ze je to asi nejakej bug v ubuntu php-cli, protoze na serveru kde je centos to funguje normalne.