Pagina 1 di 1

Modifica funzione tasti (almeno su KDE4) [risolto con worka]

Inviato: gio 5 gen 2012, 11:27
da wakkokid
Salve,
Ho comperato un PC con questa tastiera:
Immagine

Questa tastiera ha, secondo me, un grosso problema:
Come in tante altre tastiere da portatili, si attiva/disativa il Blocco Numerico premendo la combinazione Fn + Bloc Num.
Purtroppo, in questo caso si può passare da numeri a frecce anche mantenendo premuto shift.
Infatti si può notare come sulle frecce "normali" i tasti modificati siano disegnati in blu (richiedono il tasto modificatore Fn) mentre sul tastierino numerico sono in bianco (e richiedono come modificatore shift)

Io di solito tengo il blocco numerico disattivato, usufruendo dei tasti home e Fine presenti sul blocco numerico.
Quando vado a selezionare una riga di testo, di solito mi posiziono alla fine e premo shift + Home ma con questa tastiera questa combinazione equivale al 7 a causa della sopracitata particolarità del tastierino numerico.

Vorrei sapere se è possibile cambiare la mappatura della tastiera, in modo che il tasto shift non influenzi il tastierino numerico.
Oppure assegnare la funzione di switch momentaneo del tastierino al tasto Fn (per capirci, come nell'immagine della tastiera i numeri del tastierino numerico fossero scritti in blu).




Ho provato ad analizzare i codici dei tasti premuti con il comando xev. Filtrando i dati che mi sembrano inutili ho determinato i vari codici relativi al tasto "7" nelle sue diverse condizioni (con bloc num, senza, con shift, ecc):

Codice: Seleziona tutto

Con bloc num (funzione "7"):
       state 0x10, keycode 79 (keysym 0xffb7, KP_7),

Con bloc num + shift (funzione "home")
       state 0x11, keycode 79 (keysym 0xff95, KP_Home),

Senza bloc num (funzione "home")
        state 0x0, keycode 79 (keysym 0xff95, KP_Home)

Senza bloc num, con shift  (funzione "7"):
        state 0x1, keycode 79 (keysym 0xffb7, KP_7)
Con questi dati, è possibile cambiare la mappatura della tastiera almeno all'interno dell'ambiente KDE4? (pazienza se in console testuale non dovesse funzionare, non utilizzo spesso le funzioni di selezione lì).

Vi ringrazio molto dell'attezione,
WK

Re: Modifica funzione tasti (almeno su KDE4)

Inviato: gio 5 gen 2012, 12:21
da wakkokid
Passo avanti:
ho trovato il comando xmodmap.
Facendogli stampare a video la lista dei comandi vedo (xmodmap -pk)

Codice: Seleziona tutto

79         0xff95 (KP_Home)        0xffb7 (KP_7)   0xff95 (KP_Home)        0xffb7 (KP_7)
Il risultato che vorrei ottenere è che lo shift non influisca, quindi ho pensato di mettere nelle regole di xmodmap:

Codice: Seleziona tutto

keycode 79 = KP_Home   KP_Home   KP_7   KP_7
A questo punto il risultato del comando xmodmap -pk è

Codice: Seleziona tutto

79         0xff95 (KP_Home)        0xff95 (KP_Home)        0xffb7 (KP_7)   0xffb7 (KP_7)
Il che a me sembra corretto, ma a questo punto il tasto ha perso le funzioni di blocknum:
fa sempre il tasto home qualsiasi combinazione di bloc num e shift io usi.




AGGIORNAMENTO:

Codice: Seleziona tutto

keycode 79 = KP_Home KP_7   KP_7 KP_Home  
Con questa impostazione:
Senza Bloc num => Home
Senza Bloc num + shift => Home
Con Bloc num => 7
Con Bloc num + shift => Home


Non è ancora il risultato che mi ero prefisso, ma è una soluzione che mi va bene, in quanto non mi capita di usare lo shift con i numeri.



AGGIORNAMENTO 2:

Il risultato dipende dal contesto...
In Kate funziona come previsto, in console e nella barra degli indirizzi di chrome non funziona.
Perché ?

Re: Modifica funzione tasti (almeno su KDE4)

Inviato: gio 5 gen 2012, 14:36
da wakkokid
Inoltre noto che alcune cose non funzionano con xmodmap. Ad esempio, la riga:

Codice: Seleziona tutto

keycode 118 = Num_Lock Insert
Dovrebbe spostarmi la funzione Num_Lock sul tasto Ins e la funzione Insert sulla combinazione Shift + ins.
La seconda funzione è ok, mentre la prima non si degna di funzionare.

Re: Modifica funzione tasti (almeno su KDE4)

Inviato: mer 18 gen 2012, 11:29
da wakkokid
Risolto con un brutto workaround

Se non si usano i modificatori, la configurazione funziona dappertutto.
Allora ho creato 2 configurazioni:

file /opt/switch_keypad/keypad_on

Codice: Seleziona tutto

! ====================================================
!                       KEYPAD ON
! ====================================================

keycode 79 = KP_7
keycode 80 = KP_8
keycode 81 = KP_9
keycode 83 = KP_4
keycode 84 = KP_5
keycode 85 = KP_6
keycode 87 = KP_1
keycode 88 = KP_2
keycode 89 = KP_3
keycode 90 = KP_0

file /opt/switch_keypad/keypad_off

Codice: Seleziona tutto

! ====================================================
!                       KEYPAD OFF
! ====================================================

keycode 79 = KP_Home
keycode 80 = KP_Up
keycode 81 = KP_Prior
keycode 83 = KP_Left
keycode 84 = KP_5
keycode 85 = KP_Right
keycode 87 = KP_End
keycode 88 = KP_Down
keycode 89 = KP_Next
keycode 90 = KP_0

Poi ho creato uno script per switchare tra le due configurazioni:
file /opt/switch_keypad/numlock_switch

Codice: Seleziona tutto

#!/bin/sh
if [ -f ~/.numlockstate ]
then
    #echo "numlockstate: ";
    cat ~/.numlockstate;
    #echo "";
else
    echo "1" > ~/.numlockstate;
fi

STATO=`cat ~/.numlockstate`;
if [ $STATO -eq 1 ] ; then
    echo "0" > ~/.numlockstate;
    echo "setting keypad off";
    xmodmap /opt/switch_keypad/keypad_off
else
    echo "1" > ~/.numlockstate;
    echo "setting keypad on";
    xmodmap /opt/switch_keypad/keypad_on
E infine ho utilizzato xbindkeys per far eseguire a ogni pressione di "bloc num" lo script da me creato:
file ~/.xbindkeysrc

Codice: Seleziona tutto

#switch keypad
"/opt/switch_keypad/numlock"
    m:0x10 + c:77
    Mod2 + Num_Lock