Skrót klawiaturowy do wklejenia zaznaczenia podstawowego

40

Czy istnieje standardowy lub konwencjonalny skrót klawiaturowy do wklejenia zaznaczenia podstawowego?

Chciałbym zaznaczyć tekst i przejść do innej aplikacji, aby wkleić bez usuwania zawartości schowka. Wolę trzymać palce na klawiaturze niż poruszać się po myszy, znajdować wskaźnik, ustawiać go w żądanym miejscu i klikać środkowym przyciskiem myszy.

Jeśli nie ma nic konwencjonalnego lub jeśli jest ono specyficzne dla aplikacji i nie jest obsługiwane przez wielu, czy istnieje sposób obejścia tego problemu na całym świecie? (Lub przynajmniej w większej liczbie aplikacji).

Stefano Palazzo
źródło
2
Możliwe to samo dowolna dystrybucja: unix.stackexchange.com/questions/11889/...
Ciro Santilli 9 改造 中心 法轮功 六四 事件
FWIW, możesz wkleić podstawowy wybór z klawiatury (tj. Bez użycia przycisków myszy) za pomocą shift-insert, a także skopiować / wkleić zaznaczenie schowka za pomocą ctrl-insert / ctrl-shift-insert
Jonathan Hartley
@JonathanHartley dla mnie pasty shift-insert ze schowka nie wybór podstawowy
jberryman

Odpowiedzi:

32

Wysyłanie wirtualnych naciśnięć klawiszy nie działa dla mnie (patrz komentarze ), ale ta odpowiedź zainspirowała mnie do poszukiwania podobnych rozwiązań. Wysłanie zdarzenia „tekstowego” z xvkbdignoruje bieżący stan klawiatury fizycznej:

sh -c 'xsel | xvkbd -xsendevent -file - 2>/dev/null'

xvkbd -textużywa kilku sekwencji odwrotnego ukośnika, więc zamiast tańczyć z ucieczką, -filedziała. xvkbdwyświetla również tekst ostrzegawczy o modyfikatorach, ale wydaje się, że nie ma znaczenia dla tego zastosowania (ale nie chciałem go widzieć ~/.xsession-errors).

Powiązałem to ze skrótem za pomocą System> Preferencje> Skróty klawiaturowe .

Pamiętaj, że musisz mieć zainstalowane pakiety xsel i xvkbd:

sudo apt-get install xsel xvkbd
Społeczność
źródło
3
Święte banany! To działa! To cudownie. Ubuntu powinien to ustawić domyślnie.
Eric Johnson
8
Dla mnie, sh -c 'xsel | xvkbd -file - 2>/dev/null'działa, -xsendevent musiał się wydostać, żeby to działało.
sup
Nawiasem mówiąc, musiałem jeszcze raz przypisać to polecenie do jednego skrótu klawiszowego (na szczęście mam przycisk ThinkVantage, który nic nie robi na moim Thinkpad - ctrl + alt + v zachowywał się dziwnie i wkleił tylko część tego, co było xsel).
sup
2
Działa to bardzo dobrze, z wyjątkiem dwóch problemów. (1) Korzystam z rozwijanego terminala (Guake), który ustawiłem, aby ukrywał się, gdy straciłem ostrość. Uruchomienie tego skryptu tymczasowo usuwa fokus z terminala, powodując jego ukrycie. (2) Nie radzi sobie dobrze ze znakami dwubajtowymi UTF-8. np. jeśli wybiorę „éòü”, za pomocą skryptu zostanie wydrukowany „à © òü”.
Sparhawk
2
Wygląda na to, że jest drugi błąd xvkbd. xseldziała dobrze z „éòü” w selekcji podstawowej, ale xvkbdkończy się niepowodzeniem jak w powyższym skrypcie. (I też się nie udaje xvkbd -text "éòü", chociaż tutaj nic nie drukuje.)
Sparhawk
7

Możesz to uzyskać dzięki połączeniu programów xdotool ( kliknij, aby zainstalować ) i xsel ( kliknij, aby zainstalować ).

xdotoolpotrafi symulować pisanie w oknie; xselwypisuje zawartość wyboru PODSTAWOWEGO (domyślnie); Następująca powłoka jedna linijka załatwi sprawę:

 xdotool type `xsel`

Aby powiązać to z dowolnym klawiszem za pomocą pozycji menu System-> Preferencje-> Skróty klawiaturowe , konieczne jest zawinięcie go w wywołanie powłoki:

 sh -c 'xdotool type --clearmodifiers -- "`xsel`"'

Wpisywanie xdotoolnie działa z niektórymi programami; zobacz uwagi w dokumentacji xdotool .

Riccardo Murri
źródło
To nie zadziała, dopóki aktywne pole tekstowe i pozycja kursora nie znajdą się w dokładnie tej pozycji, a na pewno nie. W rzeczywistości, jeśli to zlicza ramkę menedżera okien, wykona to moją akcję „kliknięcia środkowego tytułu okna”, co jest zupełnie inne.
@Roger Dzięki, poprawiłem tekst. Ciekawe, czy jest lepszy sposób: od dłuższego czasu sam szukam klucza „wklej”…
Riccardo Murri,
Doceniam wysiłek, ale to nadal nie działa. Gdybym chciał się martwić o pozycję myszy, po prostu użyłbym myszy. :)
@Roger: Poprawnie za drugim razem: xdotool + xsel to robi. (Cóż, przynajmniej działa dla mnie.)
Riccardo Murri
2
Potrzebuje opcji --clearmodifiers, w przeciwnym razie istnieje wyścig między zwolnieniem skrótu klawiaturowego a uruchomieniem narzędzia xdotool. Xdotool w repozytoriach 10.04 nie jest aktualizowany dla tej opcji, sam musiałem go pobrać i zbudować. Wydaje się jednak, że --clearmodifiers dziwnie wpływają na modyfikatory, i nie rozumiem, w jaki sposób ostatecznie uruchomić xdotool dla mojego skrótu klawiaturowego (chociaż działa świetnie do wirtualnego pisania tekstu).
2

Wywołanie xdotool click --clearmodifiers 2symuluje kliknięcie środkowym przyciskiem myszy. Działa to znacznie lepiej niż używanie Xsel (przynajmniej dla mnie). Trzeba jednak ustawić mysz przed wpisaniem ...

Robert Jakob
źródło
2

Kolejna sugestia xdotool, działająca w Debian Jessie 8.7 (styczeń 2017):

xdotool click --delay 0 --clearmodifiers 2
  • xdotool obsługuje ciągi wielobajtowe (pe UTF-8), w przeciwieństwie do xvkbd.
  • xdotool clicksymuluje rzeczywiste kliknięcie, więc nie musisz klikać siebie, aby wkleić w miejscu myszy, tak jak w przypadku użycia xdotool typelub xvkbd.

Jedynym problemem jest to, że --clearmodifiers„naciska” z powrotem dowolny modyfikator (Ctrl / Alt / Shift / Meta), którego używasz po symulacji kliknięcia. Nawet przy --delay 0(zamiast 12ms) wykonanie polecenia zajmuje trochę czasu. Jeśli zwolnisz klawisze przed końcem, modyfikatory zostaną ponownie „wciśnięte” i utkną tam, aż ponownie naciśniesz i zwolnisz właściwy klawisz.

Więc przy tym musisz być nieco „powolny” (50 ms?), Aby zwolnić modyfikatory, jeśli używasz.

Możesz to sprawdzić, konfigurując skrót klawiaturowy, używając go w edytorze tekstu, a następnie naciskając klawisz (jak alub strzałkę). List powinien być pisany małymi literami. Jeśli dzieje się coś innego, jesteś za szybki i modyfikator utknął (pe Shift, jeśli jest pisany wielkimi literami, Ctrl, jeśli zaznaczyłeś cały tekst, Alt, jeśli otworzyłeś menu). Naciśnij i zwolnij modyfikatory ponownie, aby je zresetować.

Jeśli jesteś za szybki, możesz skorzystać z sugestii ilkerk:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

Następnie musisz zwolnić je w mniej niż 300 ms i zaczekać pół sekundy, aż pojawi się tekst.

Również użycie xdotool typeoznacza wstawienie tekstu tak, jakbyś pisał w miejscu kursora tekstowego, a nie wskaźnika myszy. Możesz to zmienić, clickjeśli wolisz zwykłe zachowanie po kliknięciu środkowym przyciskiem.

(napisał ten post, aby nowicjusze nie musieli ponownie układać elementów układanych w komentarzach)

Chema
źródło
teraz działa dla mnie w Arch Linux
MountainX
1

Miałem problemy z rozwiązań, które symulują wklejając ten PRIMARYwybór, więc zamiast dodałem skrót, który kopiujePRIMARY wyboru doCLIPBOARD . Po użyciu mój skrót I wklej CLIPBOARDw zwykły sposób, z Ctrl+V, Ctrl+Shift+Vlub Shift+Insert, w zależności od zastosowania.

Poleceniem skopiowania PRIMARYzaznaczenia do CLIPBOARDjest

sh -c 'xsel --output --primary | xsel --input --cliboard'

z którym wiążę Ctrl+Insert(dowolny wybór) w ustawieniach skrótu Gnome w sekcjiSystem Settings -> Devices -> Keyboard

Podsumowanie problemów z innymi rozwiązaniami: Próbowałem xsel | xvkbd ...i xsel | xdotool ...rozwiązań, ale okazało się, że nie działa bardzo dobrze, bo symulować wpisując się PRIMARYcharakter selekcyjny po znaku, który nie jest taki sam jak wklejenie go środkowym kliknięcia. Problemy obejmują: duże opóźnienie, podczas gdy duży wybór jest wstawiany po jednym znaku na raz; jeśli chcesz cofnąć „wklejanie”, musisz cofnąć to znak po znaku, co jest powolne; jeśli używasz „martwych kluczy”, wszystko się psuje, np. "eprodukuje się „wklejanie” ë; xvkdbnie obsługuje znaków Unicode poprawnie.

Ostrzeżenie: to rozwiązanie zastępuje istniejącą CLIPBOARDzawartość, ale OP poprosił o rozwiązania, które zachowają istniejącą CLIPBOARDzawartość.

ntc2
źródło
Czy to zapisuje oryginalną zawartość schowka i ustawia ją ponownie później? Czy też powoduje to zniszczenie oryginalnej zawartości schowka, a tym samym nie powiodło się pytanie „ wklej bez usuwania zawartości mojego schowka ”?
Xen2050
@ Xen2050 tak, to psuje SCHOWEK. Dodam notatkę do odpowiedzi.
ntc2
0

Miałem ten sam problem i wyszukiwanie w Internecie niewiele mi pomogło. Problem symulacji kliknięcia 2 jest denerwujący, jak wspomniano OP.

Problem z powyższym proponowanym xdotooli Xsel polega na tym, że kiedy xdotoolzaczyna się „pisać”, nadal naciskasz inny klawisz. To nie zawsze daje wynik. Na przykład, jeśli powiążesz go z klawiszem „wstaw”, wówczas xdotoolwysyła klucze, gdy palec naciska klawisz „wstaw”, co nie powoduje żadnych skutków.

Poniżej znajduje się obejście umożliwiające powiązanie go z naciśnięciem klawisza:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

to nie jest idealne, ale działa. teraz masz 0,3 sekundy, aby dokończyć wybór klawisza naciśnij (i klawisz w górę).

ilkerk
źródło