Tastaturkürzel zum Einfügen der primären Auswahl


40

Gibt es eine Standard- oder herkömmliche Tastenkombination zum Einfügen der primären Auswahl?

Ich möchte Text auswählen und zu einer anderen App wechseln, um ihn einzufügen, ohne den Inhalt der Zwischenablage zu verwerfen. Ich möchte lieber meine Finger auf der Tastatur lassen, als zur Maus zu gehen, den Mauszeiger zu finden, an der gewünschten Stelle zu positionieren und mit der mittleren Maustaste zu klicken.

Wenn es nichts Konventionelles gibt oder wenn es anwendungsspezifisch ist und von vielen nicht unterstützt wird, gibt es eine Problemumgehung, um dies global zum Laufen zu bringen? (Oder zumindest in mehr Anwendungen.)


2
Mögliche gleiche jede Distribution: unix.stackexchange.com/questions/11889/…
Ciro Santilli

FWIW, Sie können die primäre Auswahl von der Tastatur (dh ohne Verwendung von Maustasten) mit Umschalt-Einfügen einfügen und die Auswahl in der Zwischenablage mit Strg-Einfügen / Strg-Umschalt-Einfügen kopieren / einfügen
Jonathan Hartley

@ JonathanHartley für mich Shift-Einfügen von Pasten aus der Zwischenablage nicht primäre Auswahl
jberryman

Antworten:


32

Das Senden von virtuellen Tastendrücken funktioniert bei mir nicht (siehe Kommentare ), aber diese Antwort hat mich dazu inspiriert, nach ähnlichen Lösungen zu suchen. Das Senden eines "Text" -Ereignisses xvkbdignoriert den aktuellen Status Ihrer physischen Tastatur:

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

xvkbd -textverwendet ein paar Backslash-Sequenzen, um nicht mit Flucht zu tanzen, sondern -filefunktioniert. xvkbdgibt auch einen Warnungstext über Modifikatoren aus, der jedoch für diese Verwendung irrelevant zu sein scheint (aber ich wollte ihn nicht sehen ~/.xsession-errors).

Ich habe dies mit System> Preferences> Keyboard Shortcuts an eine Verknüpfung gebunden .

Beachten Sie, dass Sie die Pakete xsel und xvkbd installiert haben müssen:

sudo apt-get install xsel xvkbd

3
Heilige Bananen! Es klappt! Das ist großartig. Ubuntu sollte dies standardmäßig einrichten.
Eric Johnson

8
Für mich sh -c 'xsel | xvkbd -file - 2>/dev/null'funktioniert, musste -xsendevent aussteigen es arbeiten zu machen.
sup

Übrigens musste ich diesen Befehl noch einmal einer einzigen Tastenkombination zuweisen (zum Glück hat die ThinkVantage-Schaltfläche auf meinem Thinkpad nichts zu tun - Strg + Alt + V verhielt sich seltsam und fügte nur einen Teil dessen ein, was sich darin befand xsel).
sup

2
Dies funktioniert bis auf zwei Probleme sehr gut. (1) Ich verwende ein Dropdown-Terminal (Guake), das ich zum Ausblenden bei Fokusverlust eingerichtet habe. Durch das Ausführen dieses Skripts wird der Fokus vorübergehend vom Terminal entfernt und ausgeblendet. (2) Es ist nicht gut mit UTF-8-Doppelbyte-Zeichen. zB wenn ich "éòü" wähle, druckt das Skript "éòú".
Sparhawk

2
Es sieht so aus, als wäre der zweite Fehler aufgetreten xvkbd. xselFunktioniert gut mit "éòü" in der primären Auswahl, xvkbdschlägt jedoch wie im obigen Skript fehl. (Und scheitert auch mit xvkbd -text "éòü", obwohl es hier nichts druckt.)
Sparhawk

7

Sie erhalten dies durch die kombinierte Verwendung der Programme xdotool ( zum Installieren klicken ) und xsel ( zum Installieren klicken ).

xdotoolkann das Eintippen in ein Fenster simulieren; xselgibt den Inhalt der PRIMARY-Auswahl aus (standardmäßig); Der folgende Shell One Liner erledigt den Trick:

 xdotool type `xsel`

Um dies über den Menüpunkt System-> Einstellungen-> Tastaturkürzel an eine beliebige Taste zu binden, muss sie in einen Shell-Aufruf eingeschlossen werden:

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

xdotoolBei einigen Programmen funktioniert das Eintippen nicht. Beachten Sie die Hinweise in der Dokumentation zu xdotool .


Das funktioniert nur, wenn sich das aktive Textfeld und die Cursorposition genau an dieser Position befinden. Wenn dies den Fenstermanager-Rahmen zählt, wird meine Aktion "Mittenklick auf Fenstertitel" ausgeführt, was völlig anders ist.

@ Roger Danke, korrigiert den Text. Ich bin gespannt, ob es dafür einen besseren Weg gibt: Ich selbst suche seit einiger Zeit nach einem "Paste" -Schlüssel ...
Riccardo Murri

Nun, ich schätze den Aufwand, aber das wird immer noch nicht funktionieren. Wenn ich mir Gedanken über die Mausposition machen wollte, würde ich die Maus nur an erster Stelle benutzen. :)

@ Roger: Habe es beim zweiten Mal richtig gemacht: xdotool + xsel macht es. (Na ja, funktioniert zumindest bei mir.)
Riccardo Murri

2
Benötigt die Option --clearmodifiers, andernfalls besteht eine Wettlaufsituation zwischen der Freigabe der Tastenkombination und der Ausführung von xdotool. Das xdotool in 10.04s Repos wurde für diese Option nicht aktualisiert, ich musste es selbst herunterladen und erstellen. --Clearmodifiers scheint die Modifikatoren jedoch merkwürdig zu beeinflussen, und ich verstehe nicht, wie ich xdotool letztendlich für meine Tastenkombination verwenden kann (obwohl es sich hervorragend zum virtuellen Eingeben von Text eignet).


2

Das Aufrufen xdotool click --clearmodifiers 2simuliert das Klicken mit der mittleren Maustaste. Dies funktioniert viel besser als die Verwendung von xsel (zumindest für mich). Sie müssen jedoch die Maus positionieren, bevor Sie tippen ...


2

Ein weiterer xdotool-Vorschlag, der in Debian Jessie 8.7 (Januar 2017) funktioniert:

xdotool click --delay 0 --clearmodifiers 2
  • xdotool verarbeitet im Gegensatz zu xvkbd Mehrbyte-Strings (zB UTF-8).
  • xdotool clicksimuliert einen tatsächlichen Klick, so dass Sie nicht selbst klicken müssen xdotool type, um an der Mausposition einzufügen , wie Sie es bei Verwendung von oder xvkbd getan hätten.

Das einzige Problem ist, dass --clearmodifiersjeder Modifikator (Strg / Alt / Umschalt / Meta), den Sie nach der Simulation des Klicks verwenden, "gedrückt" wird. Selbst mit --delay 0(statt 12 ms) dauert die Ausführung des Befehls etwas. Wenn Sie die Tasten vorzeitig loslassen, werden Ihre Modifikatoren erneut "gedrückt" und bleiben dort hängen, bis Sie die eigentliche Taste erneut drücken und loslassen.

Daher muss man ein bisschen "langsam" sein (50ms?), Um die Modifikatoren freizugeben, wenn man welche verwendet.

Sie können dies testen, indem Sie Ihre Tastenkombination einrichten, sie in einem Texteditor verwenden und dann eine Taste (z. B. aoder einen Pfeil) drücken . Der Buchstabe sollte in Kleinbuchstaben angezeigt werden. Wenn etwas anderes passiert, sind Sie zu schnell und ein Modifikator bleibt hängen (z. B. Umschalt, wenn er in Großbuchstaben geschrieben ist, Strg, wenn Sie den gesamten Text ausgewählt haben, Alt, wenn Sie ein Menü geöffnet haben). Drücken Sie die Modifikatoren erneut und lassen Sie sie wieder los, um sie zurückzusetzen.

Wenn Sie zu schnell sind, können Sie den Vorschlag von ilkerk verwenden:

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

Dann müssen Sie sie in weniger als 300 ms loslassen und eine halbe Sekunde warten, bis der Text angezeigt wird.

Verwenden xdotool typebedeutet auch, dass Sie den Text so einfügen, als ob Sie tippen würden, an der Position des Textcursors und nicht am Mauszeiger. Sie können dies ändern, clickwenn Sie das übliche Verhalten beim Klicken mit der mittleren Maustaste bevorzugen.

(Dieser Beitrag wurde so gestaltet, dass Neulinge die in den Kommentaren verteilten Puzzleteile nicht mehr teilen müssen.)


funktioniert jetzt für mich in Arch Linux
MountainX

1

Ich hatte Probleme mit den Lösungen, die das Einfügen der PRIMARYAuswahl simulieren , und habe stattdessen eine Verknüpfung hinzugefügt, die die Auswahl in die kopiertPRIMARYCLIPBOARD . Nach der Verwendung meiner Verknüpfung ich fügen Sie die CLIPBOARDin der üblichen Art und Weise, mit Ctrl+V, Ctrl+Shift+Voder Shift+Insert, abhängig von der Anwendung.

Der Befehl zum Kopieren der PRIMARYAuswahl in CLIPBOARDist

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

an die ich mich binde Ctrl+Insert(willkürliche Auswahl) in den Gnome-Verknüpfungseinstellungen unterSystem Settings -> Devices -> Keyboard

Zusammenfassung der Probleme mit anderen Lösungen: Ich habe die xsel | xvkbd ...und xsel | xdotool ...-Lösungen ausprobiert , aber festgestellt, dass sie nicht sehr gut funktionieren, da sie die Auswahl zeichenweise simulieren. DiesPRIMARY ist nicht dasselbe wie das Einfügen mit einem mittleren Klick. Zu den Problemen gehören: Es gibt eine lange Verzögerung, während eine große Auswahl zeichenweise eingefügt wird. Wenn Sie das Einfügen rückgängig machen möchten, müssen Sie es zeichenweise rückgängig machen, was langsam ist. wenn Sie "tote Schlüssel" verwenden, wird alles durcheinander gebracht, zB "Einfügen" "eerzeugt ë; Das xvkdbbehandelt Unicode-Zeichen nicht richtig.

Warnung: Diese Lösung überschreibt den vorhandenen CLIPBOARDInhalt, aber das OP hat nach Lösungen gefragt, die den vorhandenen CLIPBOARDInhalt beibehalten .


Wird der ursprüngliche Inhalt der Zwischenablage gespeichert und anschließend erneut festgelegt? Oder wird der ursprüngliche Inhalt der Zwischenablage verworfen, sodass der Teil " Einfügen ohne Verwerfen des Inhalts meiner Zwischenablage " nicht funktioniert ?
Xen2050

@ Xen2050 ja, das macht die CLIPBOARD kaputt. Ich werde der Antwort eine Notiz hinzufügen.
ntc2

0

Ich hatte das gleiche Problem und die Internetsuche half mir nicht viel. Das Problem beim Simulieren von Klick 2 ist laut OP ärgerlich.

Das Problem mit dem oben vorgeschlagenen xdotoolund dem xsel ist, dass Sie zu xdotoolBeginn des "Tippens" immer noch eine andere Taste drücken. Das führt nicht immer zu irgendeiner Ausgabe. Wenn Sie es beispielsweise an die Taste "Einfügen" binden, werden Schlüssel xdotoolgesendet, während Ihr Finger die Taste "Einfügen" drückt, was nichts bewirkt.

Unten finden Sie eine Problemumgehung, um sie an einen Tastendruck zu binden:

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

es ist nicht perfekt, aber es funktioniert. Jetzt haben Sie 0,3 Sekunden Zeit, um die Auswahl des Tastendrucks zu beenden (und die Taste zu drücken).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.