Teilen Sie die Zwischenablage zwischen Bash und X11


11

In diesem Thread zeigt die obere Antwort, wie Text, der zuvor mit der Maus auf einem Gnome-Terminal ausgewählt wurde, in die Zwischenablage in X11 kopiert wird.

Meine Frage lautet: Angenommen, ich kopiere einen Text vom Terminal mit dem Bash-Set-Mark und kopiere Tastaturkürzel (dh set-mark+ M-w). Ist es möglich, diese Zwischenablage mit X11 zu teilen?

BEARBEITEN : In der ursprünglichen Frage habe ich über das Teilen der Zwischenablage mit GNOME gesprochen, aber wie Gilles weiter unten ausführt, verfügt GNOME nicht speziell über eine Zwischenablage (es ist allgemein für X), daher habe ich die Frage aktualisiert.


Im Gnome-Terminal können Sie auch Strg + Umschalt + C und Strg + Umschalt + V eingeben, um sie zu kopieren und in die Systemzwischenablage einzufügen.
Lie Ryan

2
Siehe diesen Beitrag stackoverflow.com/questions/994563/… Aber es funktioniert nicht für mich.
große q

Antworten:


9

Die Zwischenablage von Bash ist intern für Bash, Bash stellt keine Verbindung zum X-Server her.

Sie können die Bedeutung ändern, M-wum die Auswahl zusätzlich zur internen Zwischenablage von bash in die X-Zwischenablage¹ zu kopieren¹. Die Integration von bash ist jedoch ziemlich locker, und ich glaube nicht, dass es eine Möglichkeit gibt, über Bash-Code auf die Regionsinformationen oder die Zwischenablage zuzugreifen. Sie können eine Tastenkombination erstellen, um die gesamte Zeile in die X-Zwischenablage zu kopieren.²

if [[ -n $DISPLAY ]]; then
  copy_line_to_x_clipboard () {
    printf %s "$READLINE_LINE" | xsel -ib
  }
  bind -x '"\eW": copy_line_to_x_clipboard'
fi

Wenn Sie ausgefallene Dinge in der Shell tun möchten, wechseln Sie zu zsh, das (neben anderen Vorteilen) eine weitaus bessere Integration zwischen dem Zeileneditor und der Skriptsprache bietet.

if [[ -n $DISPLAY ]]; then
  x-copy-region-as-kill () {
    zle copy-region-as-kill
    print -rn -- "$CUTBUFFER" | xsel -ib
  }
  x-kill-region () {
    zle kill-region
    print -rn -- "$CUTBUFFER" | xsel -ib
  }
  zle -N x-copy-region-as-kill
  zle -N x-kill-region
  bindkey '\C-w' x-kill-region
  bindkey '\ew' x-copy-region-as-kill
fi

¹ Gnome hat keine spezielle Zwischenablage, dies ist allgemein für X.
² Ab Bash 4.1 gibt es einen Fehler im Schlüsselparsing-Code: Schlüsselsequenzen, an die gebunden ist, bind -xdürfen nicht länger als zwei Zeichen sein. Ich denke, Bash 4.2 behebt einige Fälle von längeren Präfixen, aber nicht alle; Ich habe die Details nicht recherchiert.


Danke für die Idee @Gilles! Ich denke, es ist Zeit für mich zu lernen und zu wechseln zsh.
Amelio Vazquez-Reina

Schließlich! Vielen Dank! Dies copy_line_to_x_clipboardist genau das, was ich für eine sehr lange Zeit fehlte: das Kopieren äquivalent Shift + Insert. Ich habe zu Strg-x ( bind -x '"\C-x") gewechselt, weil Esces zu weit nach meinem Geschmack ist (und Cc wäre die dümmste Wahl).
Pbarill

Terminals haben normalerweise einen Meta-Schlüssel, der standardmäßig an den Alt-Schlüssel gebunden ist. Wenn Sie ein Zeichen bei gedrückter Taste eingeben, wird es escgefolgt von diesem Zeichen übersetzt, sodass Sie es als eingeben können alt-w.
DoMiNeLa10

7

@ Gilles gab bereits eine hervorragende Antwort. Ich möchte nur die Existenz von erwähnen xclip, die auch eine sehr nützliche Möglichkeit ist, die Terminalausgabe in die X-Zwischenablage zu kopieren, indem Sie einfach etwas hineinleiten:

$ cat /etc/passwd | xclip

1
Nur eine Notiz, xclipdie standardmäßig in den Primärpuffer kopiert wird. Verwenden Sie zum Verwenden der Zwischenablage xclip -selection clipboard.
Sparhawk
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.