Udostępnij schowek między bash i X11


12

W tym wątku najwyższa odpowiedź pokazuje, jak skopiować tekst, który został wcześniej zaznaczony myszą na terminalu gnome, do schowka w X11.

Moje pytanie brzmi: powiedzmy, że kopiuję fragment tekstu z terminala za pomocą bash set-mark i kopiuję skróty klawiaturowe (tj. set-mark+ M-w). Czy można udostępnić ten schowek X11?

EDYCJA : W pierwotnym pytaniu mówiłem o udostępnianiu schowka w GNOME, ale jak podkreśla Gilles poniżej, GNOME nie ma specjalnie schowka (ogólnie dla X), więc zaktualizowałem pytanie.


W gnome-terminal możesz także wpisać Ctrl + Shift + C i Ctrl + Shift + V, aby skopiować i wkleić do schowka systemowego.
Lie Ryan,

2
Zobacz ten post stackoverflow.com/questions/994563/… Ale to nie działa dla mnie.
świetne q

Odpowiedzi:


10

Schowek Basha jest wewnętrzny dla bash, bash nie łączy się z serwerem X.

Co możesz zrobić, to zmienić znaczenie M-wkopiowania zaznaczenia do schowka X oprócz wewnętrznego schowka bash. Jednak integracja bash jest dość luźna i nie sądzę, aby można było uzyskać dostęp do informacji o regionie lub schowku z kodu bash. Możesz utworzyć powiązanie klucza, aby skopiować całą linię do schowka X.²

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

Jeśli chcesz robić fantazyjne rzeczy w powłoce, przełącz się na zsh, który (między innymi zaletami) ma znacznie lepszą integrację między edytorem linii a językiem skryptowym.

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 nie ma specjalnie schowka, jest to ogólnie rzecz biorąc X.
² Począwszy od wersji bash 4.1 kod parsowania zawiera błąd: powiązane sekwencje klawiszy bind -xnie mogą mieć więcej niż dwóch znaków. Myślę, że bash 4.2 naprawia niektóre przypadki dłuższych prefiksów, ale nie wszystkie; Nie zbadałem szczegółów.


Dzięki za pomysł @Gilles! Myślę, że nadszedł czas, abym się nauczył i przestawił na zsh.
Amelio Vazquez-Reina,

Wreszcie! Wielkie dzięki! Właśnie copy_line_to_x_clipboardtego brakowało mi przez bardzo długi czas: ekwiwalent shift + insert. Zmieniłem na ctrl-x ( bind -x '"\C-x"), ponieważ Escjest to zbyt dalekie od mojego gustu (a Cc byłby najgłupszym możliwym wyborem).
pbarill

Terminale zwykle mają meta-klawisz, który jest domyślnie powiązany z klawiszem alt. Wpisywanie znaku podczas przytrzymywania go jest tłumaczone na escnastępujący po nim, więc możesz wpisać go jako alt-w.
DoMiNeLa10 18.10.18

7

@Gilles już dał doskonałą odpowiedź. Chciałbym tylko wspomnieć o istnieniu xclip, który jest również bardzo przydatnym sposobem kopiowania danych wyjściowych terminala do schowka X, po prostu pipetując cokolwiek do niego:

$ cat /etc/passwd | xclip

1
Tylko uwaga, która xclipdomyślnie kopiuje się do głównego bufora. Aby użyć schowka, użyj xclip -selection clipboard.
Sparhawk
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.