GNU/Linux >> Znalost Linux >  >> Linux

Vazba Super+C Super+V pro kopírování a vkládání

Vazba Super na Ctrl

A co svázání levého Windows/Logo/Super klíč, aby fungoval jako další Ctrl klíč?

Toho můžete dosáhnout pomocí následujících příkazů xmodmap:

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

Za předpokladu, že jste výše uvedené řádky uložili jako super_as_ctrl.xmodmap efekt můžete vyzkoušet spuštěním

xmodmap super_as_ctrl.xmodmap

Aby byla změna trvalá (přežívající opětovné přihlášení/reboot), přejmenujte soubor na .Xmodmap ve vaší domovské složce.

(Výše uvedené bylo testováno na živém systému Ubuntu 11.10, ale mělo by to být stejné pro ostatní distribuce Linuxu)

Úprava zkratek pro kopírování/vkládání pro váš terminálový program

S vázáním SuperCtrl nyní můžete použít Super-C kopírovat téměř všude. Jedinou běžnou výjimkou je váš terminálový program. Zde však můžete předefinovat zkratky.

Zjistil jsem, že dokonce gnome-terminal již tuto možnost má (neměl jsem, dokud jsem si nezvykl na Ctrl-Shift-C tak jako tak). V případě, že jej používáte, přejděte na Edit / Keyboard Shortcuts... v nabídce a přiřaďte Ctrl-C kopírovat a Ctrl-V vložit. Mělo by být podobné pro konsole atd.

A nebojte se, neztratíte možnost ukončit program pomocí zkratky. Po opětovném svázání zástupce kopírování pro terminál stačí použít Ctrl-Shift-C jako jste použili Ctrl-C před. Terminál zde nerozlišuje, zda je stisknuto Shift nebo ne. A zkratka již není zachycena pro kopii. Případně přepojte termin s jinou zkratkou, jak navrhuje MountainX ve své odpovědi.

XF86Copy atd. nefungují

Ohledně klíčových symbolů pro kopírování a vkládání:Zřejmě nemají žádný účinek. Rychle jsem to otestoval přiřazením akce kopírování k Shift-ScrollLock (byl nepoužitý a chtěl jsem to otestovat s nemodifikační klávesou):

xmodmap -e 'keycode 78 = Scroll_Lock XF86Copy Scroll_Lock'

Jeho stisknutí nemělo žádný účinek, ani s XF86AudioMute. Při přiřazení písmene „a“ to však fungovalo. Předpokládám tedy, že s těmito speciálními symboly kláves XF86 je specifický problém.


Pokud chcete svázat jen několik sekvencí ve tvaru Super+x, Super+c, Super+v s jinými sekvencemi jako Ctrl+x, Ctrl+c, Ctrl+v, například tak, aby (jak si přejete OP) tyto konkrétní sekvence super kláves se obecně mapují pro vyjmutí a vložení, aniž by to ovlivnilo jakékoli jiné použití klávesy Super ve vašem systému, je možné použít pouze rozšíření XKB. Níže uvedený postup popisuje kroky a uvádí dva různé příklady podrobností pro dvě různá nastavení výchozí klávesnice; doufejme, že to poskytne dostatek informací pro přizpůsobení vašemu systému. Předpokládá se, že jste spokojeni s vytvářením a úpravami souborů ve vašem systému, včetně souborů v umístění systému, jako je /usr/share/X11/xkb .

  1. Rozhodněte se, kde chcete, aby byl váš konfigurační strom XKB umístěn. Nejprve najděte systémový. Obvykle je v /usr/share/X11/xkb a nejsem si zcela jistý, jak jej najít, pokud tam není; můžete ve svém systému vyhledat adresáře s názvem "xkb". V každém případě, jakmile jej najdete, můžete buď upravit systémový, nebo můžete použít libovolný adresář podle svého výběru. Výhodou použití systémového adresáře je, že můžete mnohem snadněji vyvolat své změny, ale nevýhodou je, že budoucí aktualizace systému mohou vaše změny přepsat (byli jste varováni). V každém případě jsou všechny níže uvedené názvy souborů relativní k tomuto adresáři, který budu v případě potřeby označovat jako $XKBLOCAL$ a všechny příkazy předpokládají, že se jedná o váš aktuální adresář.

  2. Určete, jaký XKB "typ" klíče jsou aktuální x,c,v klíče. Nejjednodušší způsob, jak to udělat, je pomocí příkazu xkbcomp -a $DISPLAY - | grep -C 6 c, (všimněte si, že čárka je ve vzoru zahrnuta záměrně). V mém prvním příkladu nastavení to produkuje:

    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> {
    

    zatímco v mém jiném příkladu nastavení to produkuje

    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> {
    

    Výsledkem je, že v prvním příkladu jsou příslušné klávesy typu "ALPHABETIC", zatímco ve druhém příkladu jsou typu "FOUR_LEVEL". V závislosti na nastavení klávesnice můžete zjistit, že jsou úplně jiného typu. V následujícím textu bude typ označován jako $TYPE$, který musíte nahradit skutečným řetězcem ALPHABETIC nebo čímkoli v příkazech níže.

  3. Najděte definici $TYPE$ a zkopírujte ji do nového souboru v adresáři $XKBLOCAL$/types. Zde je příkaz, který to dělá:xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste . Název souboru „cutpaste“, který jsem zvolil, je libovolný, použijte libovolný název, ale uvědomte si, že na tento soubor budete muset v dalších krocích důsledně odkazovat. Při prvním nastavení tento soubor získá obsah

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

    a v dalším příkladu získá obsah

    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. Upravte typy souborů/cutpaste, abyste udělali dvě věci:přidejte preambuli a postamble, která z ní udělá správnou klauzuli XKB, a změňte název typu a definici typu, abyste přidali jednu další úroveň vytvořenou modifikátorem odpovídajícím Super. Měli byste zkontrolovat, jaký je tento modifikátor ve vašem systému, pravděpodobně je to Mod4, jak je použit níže. Potřebné úpravy by měly být zřejmé ze dvou příkladů finálních verzí typů/cutpaste, konkrétně:

    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";
        };
    };
    

    a

    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. Zkopírujte definice symbolů klíče, které byly výstupem programu grep ve druhém kroku, do druhého nového souboru symbols/cutpaste a přidejte podobnou preambuli a postamble a upravte definice tak, aby používaly nové typy a přidaly do definice akce pro zpracování požadovaného klíče. vyrobené verzemi Super. Výsledky tohoto v našich dvou příkladech jsou:

    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)]
        };
    };
    

    a

    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)]
        };
    };
    

    Všimněte si, že ve druhém příkladu jsem také vytlačil některé (nevýznamné) mezery, abych měl délku řádku trochu pod kontrolou.

  6. Najděte název sady pravidel, kterou XKB aktuálně používá. To je snadné, ukazuje to výsledek setxkbmap -query . V mém případě to byl „evdev“.

  7. Zkopírujte systémovou verzi rules/evdev (nebo jakýkoli název vaší sady pravidel) do $XKBLOCAL$/rules/evdev a přidejte pravidla ukazující na možnosti, které jsme vytvořili. Zde máte dvě možnosti:můžete zkopírovat všechny ofevdev nebo jen části zmiňující model klávesnice, rozložení, variantu a možnosti, které skutečně používáte. Samozřejmě, pokud upravujete systémové soubory na místě, nemusíte provádět žádné kopírování, pouze úpravy.

    V tomto případě je to, co se přidá, identické bez ohledu na počáteční nastavení klávesnice, takže je zde jen jeden příklad. Najdete tu část souboru pravidel, která začíná ! option = symbols a přidejte řádek cutpaste:super = +cutpaste do této sekce a také najdete sekci souboru pravidel, která začíná ! option = types a řádek cutpaste:super = +cutpaste do této sekce také.

  8. Zkopírujte systémovou verzi evdev.lst a přidejte řádek pro vaši novou možnost. Všimněte si, že název tohoto souboru jednoduše odpovídá názvu souboru pravidel s připojeným .lst. Stejně jako v předchozím kroku můžete buď zkopírovat celý soubor, nebo pouze část, na kterou odkazuje model, rozvržení, varianta a možnosti, které používáte. Stačí najít část tohoto souboru, která začíná ! option a přidejte řádek jako tento:cutpaste:super Add super equivalents of cut and paste operations do této sekce.

  9. OK, nyní jsou všechny konfigurační soubory na svém místě. Pokud jste upravili systémové soubory, můžete nyní vyvolat novou volbu pomocí setxkbmap -option cutpaste:super . Na druhou stranu, pokud jste to neudělali, musíte dát setxkbmap vědět, kde je váš adresář $XKBLOCAL$. A co je horší, server také neví, kde se tento adresář nachází, a setxkbmap mu to neřekne (nebo možná nemůže, protože server může nakonec běžet na jiném počítači). Takže musíte převést výstup setxkbmap do xkbcomp a také tomuto příkazu sdělit, kde je váš adresář $XKBLOCAL. Úplný příkazový řádek je tedy setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY .

Doufejme, že to pro někoho může pomoci/zajímat, protože dobrá definitivní dokumentace/reference XKB je vzácná. Jedna velmi užitečná reference byla http://madduck.net/docs/extending-xkb/.


Tady je to, co dělám. Není to konečné řešení, ale snažil jsem se dosáhnout konečného řešení a nemohl jsem se k němu po velkém úsilí dostat. Spokojil jsem se tedy s něčím, co je jednoduché a co funguje na více než 90 % toho, co potřebuji. Mohu jej implementovat na jakýkoli počítač, na který jdu (nebo na jakoukoli novou instalaci Linuxu), během několika minut. Je to smrtelně jednoduché.

V aplikaci X terminálu nastavte předvolby zkratek. Udělal jsem to v Gnome i KDE. Například v Konsole přejděte do Menu> Nastavení> Konfigurovat zástupce. V terminálu Gnome X je podobná nabídka. Stačí vybrat zkratku (např. „kopírovat“) a zadat požadovanou sekvenci kláves.

V případě, že jsou zkratky pro kopírování a vkládání v terminálu v konfliktu s příkazy terminálu, existuje také jednoduchá oprava. Například, co když někdo chce použít CTRL-C pro kopírování (takže terminál X odpovídá standardu CUA)?

V takovém případě můžete snadno změnit vazby kláves stty (v .bashrc). Pokračujte v příkladu kopírování CTRL-C a řekněme, že chcete, aby klíč přerušení byl nyní CTRL-b (pro "break"). Tím je dosaženo:

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

Poté zadejte zdroj .bashrc.

Celé řešení je tak jednoduché, jako pomocí nastavení X terminálů změnit zkratky a pak volitelně vyřešit konflikty s stty pomocí jednořádkového příkazu echo. Mrtvě jednoduchý a pokrývá téměř vše, co potřebuji.


Linux
  1. Zkopírujte a vložte na příkazový řádek Linuxu pomocí xclip

  2. Superblock, Inode, Dentry a soubor?

  3. Kopírování a vkládání nefunguje pod rdesktop

  1. Vyhněte se zadání klíče Cp -i?

  2. Jak zkopírovat a vložit v Putty

  3. Zkopírujte a vložte na terminál Ubuntu

  1. Kopírování a vkládání v Linuxu a terminálu Ubuntu

  2. politika a mechanismus

  3. Najděte a zkopírujte soubory