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).



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

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 .


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


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)


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ść.


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ę).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.