Ciltleme ve Yapıştırma Süper + C Süper + V


23

Bir süredir klavyemdeki Windows Key'i (Super_L) kopyalayıp Yapıştır seçeneğine bağlamak, başka bir sebep olmadan masaüstüm ve MacBook'um arasında kolaylık ve tutarlılık sağlamaktı.

Xmodmap hakkında okuduktan ve aşağıdakileri yaptıktan sonra yakın olduğumu düşündüm:

$ # re-map Super_L to Mode_switch, the 3rd col in keymap table `xmodmap -pke`
$ xmodmap -e "keycode  133 = Mode_switch"

$ # map Mode_switch+c to copy
$ xmodmap -e "keycode  54 = c C XF86_Copy C"

$ # map Mode_switch+v to paste
$ xmodmap -e "keycode  55 = v V XF86_Paste V"

Ne yazık ki, XF86Copy ve XF86Paste hiç çalışmıyor gibi görünüyor. Bunlar listelenmiştir /usr/include/X11/XF86keysym.hve xevanahtar dizinin X tarafından XF86Paste ve XF86Copy olarak yorumlandığını göstermektedir, bu semboller gerçekten işe yarıyor mu? Uygulama düzeyinde destek almak zorundalar mı?

Yanıtlar:


18

Ctrl'ye Süper Ciltleme

Sol Windows/Logo/Superanahtarınızı başka bir Ctrlanahtar olarak çalışmak üzere bağlamaya ne dersiniz ?

Bunu aşağıdaki xmodmap komutlarıyla elde edebilirsiniz:

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

Yukarıdaki satırları kaydettiğiniz varsayılarak super_as_ctrl.xmodmap, efekti uygulayarak test edebilirsiniz.

xmodmap super_as_ctrl.xmodmap

Değişikliği kalıcı kılmak için (tekrar oturum açarak / yeniden başlatıldıktan sonra) dosyayı .Xmodmapana klasörünüzde yeniden adlandırın .

(Yukarıdakiler Ubuntu 11.10 canlı sistemde test edilmiştir, ancak diğer Linux dağıtımları için aynı olmalıdır)


Terminal programınız için Kopyala / Yapıştır kısayollarını ayarlama

Sana bağlı Superolmak Ctrlartık Super-Chemen hemen her yere kopyalamak için kullanabilir . Tek yaygın istisna, terminal programınızdır. Ancak oradaki kısayolları yeniden tanımlayabilirsiniz.

gnome-terminalBu seçeneğin şimdiye kadar bile olduğunu öğrendim ( Ctrl-Shift-Czaten alıştığım zamana kadar sahip değildim ). Bunu kullanmanız durumunda Edit / Keyboard Shortcuts..., menüye gidin ve Ctrl-Ckopyalayıp Ctrl-Vyapıştırmak için atayın . konsoleVb için benzer olmalıdır

Endişelenmeyin, bir kısayol kullanarak bir programı sonlandırma olanağını kaybedemezsiniz. Terminal için kopya kısayol yeniden bağlama sonra, sadece kullanabilirsiniz Ctrl-Shift-Ckullandığınız gibi Ctrl-Cönce. Shift tuşuna basıldığında veya basılmadığında terminal burada ayrım yapmaz. Kısayol kopya için artık yakalanmıyor. Alternatif olarak, MountainX'ın cevabında önerdiği gibi sonlandırmayı başka bir kısayolla yeniden bağlayın.


XF86Copy vb çalışmıyor

Kopyala ve yapıştır için anahtar sembollerle ilgili: Görünüşe göre etkisizler. Kopyalama işlemini Shift-ScrollLock öğesine atayarak hızlı bir şekilde test ettim (kullanılmadı ve değiştirici olmayan bir anahtarla test etmek istedim):

xmodmap -e 'keycode 78 = Scroll_Lock XF86Copy Scroll_Lock'

Basılması da etkili değildi, XF86AudioMute ile. Ancak 'a' harfi atanırken işe yaradı. Bu nedenle, bu XF86 özel anahtar sembollerinde belirli bir sorun olduğunu tahmin ediyorum.


3
Ne yazık ki, Super'i Ctrl'ye bağlasam bile, birincil teşvik olan terminalin içine kopyalayıp yapıştırmak için Ctrl / Super + Shift + C tuşlarını kullanmam gerekecek. XF86 tuşlarının çalışmadığını onayladığınız için teşekkür ederiz.
yalnız

Hangi terminal programını kullanıyorsunuz? En azından GNOME terminaliyle çalışan bir çözüm ekledim. Ve diğerleri için benzer olmalıdır.
zpea

4
Denetimi Metaya Bağlama, kopyala / yapıştır için kısayol değiştirme ile aynı şekilde Meta + c / v'ye değil. MacO'ları Linux'ta kboard kısayolları gibi yapmak istiyorum, bu yüzden bu cevap mükemmel değil ...
Sonique

1
Shift + ctrl + c veya çok hantal ve ne olursa olsun sadece Super ile öldürmek sinyalini gönderir Ctrl Süper yeniden bağlama + c yüzden gerçekten bu kadar çözmez
rien333

ilk adım yaklaşık olarak süper / komutu kontrol altına almak için yaptığım şey. Bu, çoğu şeyi düzeltir - ancak cmd başka bir yerde ctrl olsa bile, yine de farklı işlevlere sahip olmak için cmd-c ve ctrl-c'yi istiyorum. Bunu xmodmap ve terminale özgü kısayollarla yapabileceğimden emin değilim.
Tedder42

9

Super + x, Super + c, Super + v formunun sadece bir kaç dizisini Ctrl + x, Ctrl + c, Ctrl + v gibi diğer dizilere bağlamak istiyorsanız, (bunlar istediğiniz şekilde) belirli Süper anahtar dizileri, sisteminizde Süper tuşun diğer kullanımlarını etkilemeden kesmek ve yapıştırmak için genellikle eşlenir, yalnızca XKB uzantısını kullanmak mümkündür. Aşağıdaki prosedür, adımları açıklar ve iki farklı başlangıç ​​klavyesi ayarları için ayrıntılara iki farklı örnek verir; umarım bu sisteminize adapte olmak için yeterli bilgi sağlayacaktır. Gibi sistem konumlarında olanlar da dahil olmak üzere, sisteminizde dosya oluşturma ve düzenleme konusunda rahat olduğunuz varsayılmaktadır /usr/share/X11/xkb.

  1. XKB yapılandırma ağacınızın nerede durmasını istediğinize karar verin. İlk önce sistemi bul. Genellikle / usr / share / X11 / xkb dizinindedir ve orada değilse nasıl bulacağımı tam olarak bilmiyorum; Sisteminizi sadece "xkb" adlı dizinler için arayabilirsiniz. Her neyse, bir kere bulduktan sonra, sistemi bir tane olarak değiştirebilir veya seçtiğiniz herhangi bir dizini kullanabilirsiniz. Sistem dizini kullanmanın avantajı, değişikliklerinizi çok daha kolay bir şekilde çağırabilmenizdir, ancak dezavantajı gelecekteki sistem güncellemelerinin değişikliklerin üzerine yazmasıdır (uyardınız). Her durumda, bundan sonra bahsi geçen tüm dosya isimleri, bu dizine göredir; bu, gerektiğinde $ XKBLOCAL $ olarak bahsedeceğim ve tüm komutlar sizin geçerli dizininiz olduğunu varsayar.

  2. Geçerli x, c, v tuşlarının hangi XKB anahtarının "tür" olduğunu belirleyin. Bunu yapmanın en kolay yolu komuttur xkbcomp -a $DISPLAY - | grep -C 6 c,(virgülün kasıtlı olarak desene dahil edildiğini unutmayın). İlk örnek kurulumumda, bu şunu üretir:

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

    diğer örnek kurulumumda bu üretir

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

    Sonuçta, ilk örnekte, ilgili tuşlar "ALFABETİK" türünde, ikinci örnekte "FOUR_LEVEL" türündedir. Klavye kurulumunuza bağlı olarak, bunların tamamen başka bir türden olduğunu görebilirsiniz. Bundan sonra, tür gerçek ALPHABETIC dizesiyle veya aşağıdaki komutlardan herhangi biriyle değiştirmeniz gereken $ TYPE $ olarak adlandırılacaktır.

  3. $ TYPE $ tanımını bulun ve $ XKBLOCAL $ / types dizininde yeni bir dosyaya kopyalayın. İşte tam da bunu yapar bir komut var: xkbcomp -a $DISPLAY - | grep -z -o 'type "$TYPE$" {[^}]*};' > types/cutpaste. Seçtiğim "cutpaste" dosyasının adı isteğe bağlı, istediğiniz adı kullanın, ancak sonraki adımlarda tutarlı bir şekilde bu dosyaya başvurmanız gerekeceğini unutmayın. İlk kurulumda, bu dosya içeriği alır

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

    ve diğer örnekte içeriği alır

    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. İki şeyi yapmak için dosya türlerini / cutpaste'ı düzenleyin: uygun bir XKB maddesi yapan bir başlangıç ​​ve postamble ekleyin ve Süper'e karşılık gelen değiştirici tarafından üretilen bir seviye daha eklemek için tür adını ve tür tanımını değiştirin. Bu değiştiricinin sisteminizde ne olduğunu kontrol etmelisiniz, muhtemelen aşağıda kullanıldığı gibi Mod4 olabilir. Gerekli modifikasyonlar, iki örnek / cutpaste örneğinin son versiyonundan açıkça anlaşılmalıdır:

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

    ve

    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. İkinci adımda grep tarafından verilen anahtar sembol tanımlarını ikinci bir yeni dosya sembollerine / cutpaste içine kopyalayın ve benzer başlangıç ​​ve postamble ekleyin ve yeni türleri kullanmak ve tanımlamak için istenen anahtarı işlemek üzere eylemler eklemek için tanımları değiştirin. Süper versiyonlar tarafından üretilmiştir. Bunun iki örneğindeki sonuçları:

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

    ve

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

    İkinci örnekte, çizgi uzunluğunu biraz kontrol altında tutmak için (önemli olmayan) beyaz alanların bir kısmını da sıktığımı unutmayın.

  6. XKB'nin kullanmakta olduğu kuralların adını bulun. Bu kolay, sonuçta gösterilir setxkbmap -query. Benim durumumda "evdev" idi.

  7. Kuralların / evdev'in (veya kurallarınızın adı ne olursa olsun) sistem sürümünü $ XKBLOCAL $ / rules / evdev'e kopyalayın ve oluşturduğumuz seçeneklere işaret eden kuralları ekleyin. Burada iki seçeneğiniz var: Tüm evdev'leri veya sadece klavye modelini, düzenini, varyantını ve gerçekte kullandığınız seçenekleri belirten kısımları kopyalayabilirsiniz. Elbette, sistem dosyalarını yerinde değiştiriyorsanız, herhangi bir kopyalama, sadece düzenleme yapmanız gerekmez.

    Bu durumda, eklenenler ilk klavye kurulumundan bağımsız olarak aynıdır, bu yüzden sadece bir örnek var. Sen ile başlar o kurallar dosyasının bölümünü bulun ! option = symbolsve bir satır ekleyin cutpaste:super = +cutpasteo bölüme ve ayrıca kuralları dosyanın bölümünü bulun bununla başlar ! option = typesve bir çizgi cutpaste:super = +cutpastebu bölüme de.

  8. Evdev.lst dosyasının sistem sürümünü kopyalayın ve yeni seçeneğiniz için bir satır ekleyin. Bu dosyanın adının sadece .lst eklenmiş olan kurallar dosyasının adına karşılık geldiğine dikkat edin. Önceki adımda olduğu gibi, tüm dosyayı veya yalnızca kullandığınız model, düzen, varyant ve seçenek (ler) tarafından referans verilen kısmı kopyalayabilirsiniz. Bunun için başlayan bu dosyanın bölümünü bulmanız ve ! optionşunun gibi bir satır eklemeniz yeterlidir : cutpaste:super Add super equivalents of cut and paste operationso bölüme.

  9. Tamam, şimdi tüm yapılandırma dosyaları yerinde. Sistem dosyalarını değiştirdiyseniz, şimdi yeni seçeneğinizi ile çağırabilirsiniz setxkbmap -option cutpaste:super. Öte yandan, yapmadıysanız, setxkbmap'a $ XKBLOCAL $ dizininizin nerede olduğunu bildirmeniz gerekir. Daha da kötüsü, sunucu bu dizinin nerede olduğunu bilmiyor ve setxkbmap bunu bilmiyor (ya da belki de bilemiyor çünkü sunucu başka bir makinede çalışıyor olabilir). Bu yüzden setxkbmap 'in çıktısını xkbcomp' e yönlendirmelisiniz ve $ XKBLOCAL dizininizin nerede olduğunu söyleyiniz. Bu nedenle tam komut satırı setxkbmap -I$XKBLOCAL$ -option cutpaste:super -print | xkbcomp -I$XKBLOCAL - $DISPLAY.

Umarım bu kesin bir tanım / XKB dokümantasyonu / referansı az olduğundan, bu yardım birisinin yararınadır. Çok yararlı bir referans http://madduck.net/docs/extending-xkb/ idi .


Mükemmel cevap Bu benim için çalıştı 17.10
blockloop

Bu benim için Ubuntu 18.04'te işe yaramadı. Sonuç, 'c', 'x' ve 'v' tuşlarının artık çalışmadığıydı. Onları tekrar birlikte çalıştırabildim setxkbmap -option. Yerel kurulumum, kısmi semboller dosyasından çıkardığım bazı Group2, Group3 sembollerinin haricinde, FOUR_LEVEL örneğiyle neredeyse aynıydı, böylece dosyam, örneklerle aynı görünüyordu.
JinnKo

2

İşte yaptığım şey. Nihai çözüm değil, ama nihai çözümü elde etmeye çalıştım ve fazla çaba harcadıktan sonra oraya ulaşamadım. Bu yüzden basit ve ihtiyaç duyduğumun% 90'ından fazlası için işe yarayan bir şeye karar verdim. Birkaç dakika içinde gittiğim herhangi bir bilgisayara (veya herhangi bir yeni Linux kurulumuna) uygulayabilirim. Ölü basit.

X terminal uygulamasında kısayol tercihlerini ayarlayın. Bunu hem Gnome hem de KDE'de yaptım. Örneğin Konsole'da Menü> Ayarlar> Kısayolları Yapılandır seçeneğine gidin. Gnome X terminalinde de benzer bir menü var. Sadece kısayolu seçin (örneğin, "kopyala") ve istediğiniz tuş sırasını girin.

Terminal kopyalama ve yapıştırma kısayollarının terminal komutlarıyla çakışması durumunda, bunun için de kolay bir düzeltme vardır. Örneğin, birisi kopya için CTRL-C kullanmak isterse (X terminali CUA standardına uygunsa)?

Bu durumda, stty key ciltlerini kolayca (.bashrc içinde) değiştirebilirsiniz. CTRL-C'yi kopya örneği için devam ettirdiğinizde, kesme anahtarının şimdi CTRL-b olmasını istersiniz ("break" için). Bu başarır ki:

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

Sonra kaynak .bashrc.

Tüm çözüm, kısayolları değiştirmek için X terminal ayarlarını kullanmak ve ardından isteğe bağlı olarak tek satırlık bir yankı komutuyla stty ile çakışmaları çözmek kadar basit. Ölü basit ve ihtiyacım olan hemen hemen her şeyi kapsar.


0

Muhtemelen Windows anahtarı değiştirici anahtarıdır. Bunu çalıştır ve tekrar dene:

xmodmap -e 'remove Mod4 = Super_L'

Teşekkürler, ama hile yapmaz. Eşlemenin işe yaradığını biliyorum çünkü xev XF86 olaylarını rapor ediyor.
yalnız

İlk gönderim (sonradan xmodmap -e 'remove Mod1 = Meta_L'komutlarınızı çalıştırıp denemek) benim için işe yaradı.
SSCB

1
@solo ve çalışma hakkında ya da olmasın, her masaüstü ortamının veya uygulamaların onları desteklemediğini düşünün. Gerçekten işe yarayıp yaramadığını anlamak için bunları Firefox'ta kullanın. X tuşunun bağlanmalarını destekler (dinler).
SSCB

0

Glen Whitney'nin söylediklerinden bazılarını aldım ve bu bilgiyi macOS'tan özel bir keymap'e kelime-kötü veya metin manipülasyon davranışını eşlemek için kullandım.

Ctrl vs Süper kopyala ve yapıştır sorununu o özel çözümü kullanmadan çözdüm, ancak söylediğim gibi diğer şeyler için çok yardımcı oldu. Bir noktada Wayland'ı tam olarak desteklemeyi hedeflediğim için xmodmap gibi şeylerden de kaçınıyorum. Kinto yerel xkb'yi kullanır ve terminal davranışı gibi beklenen macOS'a saygı duyar.

https://github.com/rbreaves/kinto

https://medium.com/@benreaves/kinto-a-mac-inspired-keyboard-mapping-for-linux-58f731817c0

İşte aynı zamanda bir Gist, sadece her şeyin merkezinde ne olduğunu görmek istiyorsanız, gerektiğinde tuş eşlemenizi değiştirmeyecektir. Gist ayrıca, macos stil imleçleri / Cmd ve ok tuşlarını kullanan word-wise manipülasyonlarını ayarlayan özel xkb keymap dosyalarını içermez.

https://gist.github.com/rbreaves/f4cf8a991eaeea893999964f5e83eebb

öz içeriği

# permanent apple keyboard keyswap
echo "options hid_apple swap_opt_cmd=1" | sudo tee -a /etc/modprobe.d/hid_apple.conf
update-initramfs -u -k all

# Temporary & instant apple keyboard keyswap
echo '1' | sudo tee -a /sys/module/hid_apple/parameters/swap_opt_cmd

# Windows and Mac keyboards - GUI (Physical Alt is Ctrl, Physical Super is Alt, Physical Ctrl is Super)
setxkbmap -option;setxkbmap -option altwin:ctrl_alt_win

# Windows and Mac keyboards - Terminal Apps (Physical Alt is Super, Physical Super is Alt, Physical Ctrl is Ctrl)
setxkbmap -option;setxkbmap -option altwin:swap_alt_win

# If the hid_apple driver is not loaded for Apple keyboards, which can be found out
# by the lsmod command then the above setxkbmap commands will not work
# Use the following commands for Apple style keyboards without an hid_apple driver
#
# Note: this could also apply to hid_apple driver as well 
# if this option is set to 0 inside swap_opt_cmd
#
lsmod | grep hid_apple

# Apple keyboard without hid_apple - GUI
setxkbmap -option;setxkbmap -option ctrl:swap_lwin_lctl,ctrl:swap_rwin_rctl

# Apple keyboard without hid_apple - Terminal
setxkbmap -option;setxkbmap -option altwin:alt_super_win

#
# If you want a systemd service and bash script to help toggle between
# GUI and Terminal applications then look at project Kinto.
# https://github.com/rbreaves/kinto
#
# Note: The above may not work for Chromebooks running Linux, please look
# at project Kinto for that.
#
# If anyone would like to contribute to the project then please do!
#
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.