GNU/Linux >> Linux Esercitazione >  >> Linux

Binding Super+C Super+V da copiare e incollare

Associare Super a Ctrl

Che ne dici di legare il tuo Windows/Logo/Super sinistro chiave per agire come un altro Ctrl chiave?

Puoi ottenerlo con i seguenti comandi xmodmap:

remove mod4 = Super_L
keysym Super_L = Control_L
add Control = Control_L

Supponendo che tu abbia salvato le righe precedenti come super_as_ctrl.xmodmap puoi testare l'effetto eseguendo

xmodmap super_as_ctrl.xmodmap

Per rendere permanente la modifica (sopravvivendo al nuovo accesso/riavvio) rinomina il file in .Xmodmap nella tua cartella Inizio.

(Quanto sopra è stato testato sul sistema live Ubuntu 11.10, ma dovrebbe essere lo stesso per altre distribuzioni Linux)

Regolazione delle scorciatoie Copia/Incolla per il tuo programma terminale

Avendo legato Super a Ctrl ora puoi usare Super-C copiare quasi ovunque. L'unica eccezione comune è il tuo programma terminale. Tuttavia puoi ridefinire le scorciatoie lì.

Ho scoperto che anche gnome-terminal ha questa opzione ormai (non l'ho avuta fino a quando non mi sono abituato a Ctrl-Shift-C comunque). Se usi quello, vai a Edit / Keyboard Shortcuts... nel menu e assegna Ctrl-C da copiare e Ctrl-V incollare. Dovrebbe essere simile per konsole ecc.

E non preoccuparti, non perderai la possibilità di terminare un programma utilizzando una scorciatoia. Dopo aver ricollegato la scorciatoia di copia per il terminale, puoi semplicemente usare Ctrl-Shift-C come se avessi usato Ctrl-C prima. Il terminale non distingue qui se Shift è premuto o meno. E la scorciatoia non viene più catturata per la copia. In alternativa, riassocia la terminazione a un'altra scorciatoia, come suggerisce MountainX nella sua risposta.

XF86Copy ecc. non funzionano

Per quanto riguarda i simboli chiave per il copia e incolla:a quanto pare non hanno alcun effetto. L'ho testato rapidamente assegnando l'azione di copia a Shift-ScrollLock (era inutilizzato e volevo testare con un tasto non modificatore):

xmodmap -e 'keycode 78 = Scroll_Lock XF86Copy Scroll_Lock'

Premendolo non ha avuto effetto, nemmeno con XF86AudioMute. Tuttavia ha funzionato quando si assegnava la lettera "a". Quindi immagino che ci sia un problema specifico con questi simboli chiave speciali XF86.


Se vuoi associare solo alcune sequenze della forma Super+x, Super+c, Super+v ad altre sequenze come Ctrl+x, Ctrl+c, Ctrl+v, ad esempio in modo che (come desiderato dall'OP) queste particolari sequenze di tasti Super verranno generalmente mappate per tagliare e incollare senza influire su altri usi del tasto Super sul tuo sistema, è possibile utilizzando solo l'estensione XKB. La procedura seguente delinea i passaggi e fornisce due diversi esempi dei dettagli per due diverse impostazioni iniziali della tastiera; si spera che fornisca informazioni sufficienti per adattarsi al proprio sistema. Presuppone che tu abbia dimestichezza con la creazione e la modifica di file sul tuo sistema, inclusi quelli in posizioni di sistema come /usr/share/X11/xkb .

  1. Decidi dove vuoi che risieda il tuo albero di configurazione XKB. Per prima cosa trova quello di sistema. Di solito è in /usr/share/X11/xkb e non sono del tutto sicuro di come trovarlo se non è presente; potresti semplicemente cercare nel tuo sistema le directory denominate "xkb". Ad ogni modo, una volta trovato, puoi modificare quello di sistema in atto oppure puoi utilizzare qualsiasi directory di tua scelta. Il vantaggio dell'utilizzo della directory di sistema è che puoi richiamare molto più facilmente le tue modifiche, ma lo svantaggio è che futuri aggiornamenti di sistema potrebbero sovrascrivere le tue modifiche (sei stato avvisato). In ogni caso, tutti i nomi di file menzionati di seguito sono relativi a questa directory, a cui mi riferirò quando necessario come $XKBLOCAL$, e tutti i comandi presuppongono che sia la directory corrente.

  2. Determina quale "tipo" XKB di chiave sono le chiavi x, c, v correnti. Il modo più semplice per farlo è tramite il comando xkbcomp -a $DISPLAY - | grep -C 6 c, (notare che la virgola è intenzionalmente inclusa nel modello). Nella mia prima configurazione di esempio, questo produce:

    key <AB02> {
        type= "ALPHABETIC",
        symbols[Group1]= [               x,               X ]
    };
    key <AB03> {
        type= "ALPHABETIC",
        symbols[Group1]= [               c,               C ]
    };
    key <AB04> {
        type= "ALPHABETIC",
        symbols[Group1]= [               v,               V ]
    };
    key <AB05> {
    

    mentre nell'altra mia configurazione di esempio questo produce

    key <AB02> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               x,               X, approxeq,     dead_ogonek ]
    };
    key <AB03> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               c,               C, ccedilla,        Ccedilla ]
    };
    key <AB04> {
        type= "FOUR_LEVEL",
        symbols[Group1]= [               v,               V, squareroot,           U25CA ]
    };
    key <AB05> {
    

    Il risultato è che nel primo esempio le relative chiavi sono di tipo "ALPHABETIC" mentre nel secondo esempio sono di tipo "FOUR_LEVEL". A seconda della configurazione della tastiera, potresti scoprire che sono di un altro tipo. In quanto segue, il tipo verrà indicato come $TYPE$, che devi sostituire con la stringa effettiva ALPHABETIC o qualsiasi altra cosa nei comandi seguenti.

  3. Trova la definizione di $TYPE$ e copiala in un nuovo file nella directory $XKBLOCAL$/types. Ecco un comando che fa proprio questo:xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste . Il nome del file "cutpaste" che ho scelto è arbitrario, usa il nome che preferisci, ma tieni presente che dovrai fare riferimento a questo file in modo coerente nei passaggi successivi. Nella prima configurazione, questo file riceve i contenuti

    type "ALPHABETIC" {
        modifiers= Shift+Lock;
        map[Shift]= Level2;
        map[Lock]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Caps";
    };
    

    e nell'altro esempio ottiene i contenuti

    type "FOUR_LEVEL" {
        modifiers= Shift+LevelThree;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    
  4. Modifica i tipi di file/cutpaste per fare due cose:aggiungi un preambolo e un postambolo che lo rendano una clausola XKB corretta, e altera il nome del tipo e la definizione del tipo per aggiungere un altro livello prodotto dal modificatore corrispondente a Super. Dovresti controllare qual è quel modificatore sul tuo sistema, è probabile che sia Mod4 come usato di seguito. Le modifiche necessarie dovrebbero essere evidenti dalle due versioni finali di esempio di types/cutpaste, vale a dire:

    default partial xkb_types "addsuper" {
        type "ALPHABETIC_SUPER" {
            modifiers= Shift+Lock+Mod4;
            map[Shift]= Level2;
            map[Lock]= Level2;
            map[Mod4]= Level3;
            map[Shift+Mod4]= Level3;
            map[Lock+Mod4]= Level3;
            level_name[Level1]= "Base";
            level_name[Level2]= "Caps";
            level_name[Level3]= "With Super";
        };
    };
    

    e

    default partial xkb_types "addsuper" {
        type "FOUR_LEVEL_SUPER" {
            modifiers= Shift+LevelThree+Mod4;
            map[Shift]= Level2;
            map[LevelThree]= Level3;
            map[Shift+LevelThree]= Level4;
            map[Mod4]= Level5;
            map[Shift+Mod4] = Level5;
            map[LevelThree+Mod4] = Level5;
            map[Shift+LevelThree+Mod4] = Level5;
            level_name[Level1]= "Base";
            level_name[Level2]= "Shift";
            level_name[Level3]= "Alt Base";
            level_name[Level4]= "Shift Alt";
            level_name[Level5]= "With Super"';
       };
    };
    
  5. Copia le definizioni dei simboli chiave che sono state emesse da grep nel secondo passaggio in un secondo nuovo file symbols/cutpaste e aggiungi un preambolo e un postambolo simili e modifica le definizioni per utilizzare i nuovi tipi e aggiungi azioni alla definizione per gestire la chiave desiderata prodotto dalle versioni Super. I risultati di ciò nei nostri due esempi sono:

    default partial xkb_symbols "superversions" {
        replace key <AB02> {
            type[Group1]= "ALPHABETIC_SUPER",
            symbols[Group1]= [               x,               X, NoSymbol ],
            actions[Group1]= [      NoAction(),      NoAction(), RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
        };
        replace key <AB03> {
            type[Group1]= "ALPHABETIC_SUPER",
            symbols[Group1]= [               c,               C, NoSymbol ],
            actions[Group1]= [      NoAction(),      NoAction(), RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
        };
        replace key <AB04> {
            type[Group1]= "ALPHABETIC_SUPER",
            symbols[Group1]= [               v,               V, NoSymbol ],
            actions[Group1]= [      NoAction(),      NoAction(), RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
        };
    };
    

    e

    default partial xkb_symbols "superversions" {
        replace key <AB02> { 
            type[Group1]= "FOUR_LEVEL_SUPER",
            symbols[Group1]= [x,X,approxeq,dead_ogonek,NoSymbol],
            actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatX>,mods=Control,clearmods=Super)]
        };
        replace key <AB03> { 
            type[Group1]= "FOUR_LEVEL_SUPER",
            symbols[Group1]= [c,C,ccedilla,Ccedilla,NoSymbol],
            actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatC>,mods=Control,clearmods=Super)]
        };
        replace key <AB04> { 
            type[Group1]= "FOUR_LEVEL_SUPER",
            symbols[Group1]= [v,V,squareroot,U25CA,NoSymbol],
            actions[Group1]= [NoAction(),NoAction(),NoAction(),NoAction(),RedirectKey(key=<LatV>,mods=Control,clearmods=Super)]
        };
    };
    

    Nota che nel secondo esempio ho eliminato anche alcuni degli spazi bianchi (non significativi) per mantenere un po' di controllo sulla lunghezza della riga.

  6. Trova il nome del set di regole attualmente utilizzato da XKB. È facile, è mostrato nel risultato di setxkbmap -query . Nel mio caso, era "evdev".

  7. Copia la versione di sistema di rules/evdev (o qualunque sia il nome del tuo set di regole) in $XKBLOCAL$/rules/evdev e aggiungi le regole che puntano alle opzioni che abbiamo creato. Hai due scelte qui:puoi copiare tutto ofevdev o solo le parti che menzionano il modello di tastiera, il layout, la variante e le opzioni che stai effettivamente utilizzando. Naturalmente, se stai modificando i file di sistema sul posto, non è necessario eseguire alcuna copia, ma solo modifica.

    In questo caso, ciò che viene aggiunto è identico indipendentemente dalla configurazione iniziale della tastiera, quindi c'è solo un esempio. Trovi la sezione del file delle regole che inizia con ! option = symbols e aggiungi una riga cutpaste:super = +cutpaste a quella sezione, e trovi anche la sezione del file delle regole che inizia con ! option = types e una riga cutpaste:super = +cutpaste anche a quella sezione.

  8. Copia la versione di sistema di evdev.lst e aggiungi una riga per la tua nuova opzione. Si noti che il nome di questo file corrisponde semplicemente al nome del file delle regole con .lst aggiunto. Come nel passaggio precedente, puoi copiare l'intero file o solo la parte a cui fa riferimento il modello, il layout, la variante e le opzioni che stai utilizzando. Devi solo trovare la sezione di questo file che inizia con ! option e aggiungi una riga come questa:cutpaste:super Add super equivalents of cut and paste operations a quella sezione.

  9. OK, ora tutti i file di configurazione sono a posto. Se hai modificato i file di sistema, ora puoi invocare la tua nuova opzione con setxkbmap -option cutpaste:super . D'altra parte, se non l'hai fatto, devi far sapere a setxkbmap dove si trova la tua directory $XKBLOCAL$. Quel che è peggio, il server non sa nemmeno dove si trova quella directory, e setxkbmap non lo dice (o forse non può, poiché alla fine il server potrebbe essere in esecuzione su un'altra macchina). Quindi devi reindirizzare l'output di setxkbmap a xkbcomp e anche dire a quel comando dove si trova la tua directory $XKBLOCAL. La riga di comando completa è quindi setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY .

Si spera che questo sia di aiuto/interesse per qualcuno, poiché una buona documentazione/riferimento XKB definitivo è scarsa. Un riferimento molto utile è stato http://madduck.net/docs/extending-xkb/.


Ecco cosa faccio. Non è la soluzione definitiva, ma ho provato a raggiungere la soluzione definitiva e non ci sono riuscito dopo molti sforzi. Quindi ho optato per qualcosa di semplice e che funziona per oltre il 90% di ciò di cui ho bisogno. Posso implementarlo su qualsiasi computer su cui vado (o qualsiasi nuova installazione di Linux) in pochi minuti. È semplicissimo.

Nell'applicazione terminale X, imposta le preferenze di scelta rapida. L'ho fatto sia in Gnome che in KDE. In Konsole, ad esempio, vai su Menu> Impostazioni> Configura scorciatoie. C'è un menu simile nel terminale Gnome X. Basta selezionare la scorciatoia (ad es. "copia") e inserire la sequenza di tasti desiderata.

Nel caso in cui le scorciatoie copia e incolla del terminale siano in conflitto con i comandi del terminale, c'è una soluzione semplice anche per questo. Ad esempio, cosa succede se qualcuno vuole usare CTRL-C per la copia (in modo che il terminale X sia conforme allo standard CUA)?

In tal caso, puoi modificare facilmente le associazioni dei tasti stty (in .bashrc). Continuando l'esempio CTRL-C per la copia, diciamo che vuoi che il tasto di interruzione ora sia CTRL-b (per "interruzione"). Questo realizza che:

echo "stty intr \^b" >> ~/.bashrc 

Poi sorgente .bashrc.

L'intera soluzione è semplice come utilizzare le impostazioni dei terminali X per modificare le scorciatoie e quindi, facoltativamente, risolvere i conflitti con stty con un comando echo di una riga. Mortalmente semplice e copre quasi tutto ciò di cui ho bisogno.


Linux
  1. Un Superblock, Inode, Dentry e un file?

  2. Evitare Invio Digitare Cp -i?

  3. Come copiare e incollare in Putty

  4. Copia e incolla sul terminale di Ubuntu

  5. Copia e incolla nel terminale Linux e Ubuntu

Copia e incolla il testo nel terminale su Ubuntu 22.04

Come copiare, tagliare e incollare in Vim/Vi

Come copiare e incollare testo nel terminale Linux

Come copiare e incollare in Ubuntu

Storia di Unix e Linux

Come generare e utilizzare la chiave SSH nel sistema Linux?