Chia sẻ bảng tạm giữa bash và X11


11

Trong chuỗi này , câu trả lời trên cùng cho thấy cách sao chép văn bản đã được chọn trước đó bằng chuột trên thiết bị đầu cuối gnome, vào bảng tạm trong X11.

Câu hỏi của tôi là: Giả sử tôi sao chép một đoạn văn bản từ thiết bị đầu cuối bằng cách sử dụng dấu bash set-copy và sao chép phím tắt (tức là set-mark+ M-w). Có thể chia sẻ clipboard này với X11 không?

EDIT : Trong câu hỏi ban đầu, tôi đã nói về việc chia sẻ bảng tạm với Gnome, nhưng như Gilles chỉ ra bên dưới, Gnome không đặc biệt có bảng tạm (nói chung là X), vì vậy tôi đã cập nhật câu hỏi.


Trong gnome-terminal, bạn cũng có thể nhập Ctrl + Shift + C và Ctrl + Shift + V để sao chép và dán vào bảng tạm hệ thống.
Lie Ryan

2
Xem bài đăng này stackoverflow.com/questions/994563/ Mạnh Nhưng nó không hoạt động với tôi.
tuyệt vời q

Câu trả lời:


9

Bảng tạm của Bash là nội bộ của bash, bash không kết nối với máy chủ X.

Những gì bạn có thể làm là thay đổi ý nghĩa của M-wviệc sao chép lựa chọn vào bảng tạm X bên cạnh bảng tạm bên trong của bash. Tuy nhiên, sự tích hợp của bash khá lỏng lẻo và tôi không nghĩ có cách nào để truy cập thông tin khu vực hoặc bảng tạm từ mã bash. Bạn có thể tạo một ràng buộc chính để sao chép toàn bộ dòng vào X clipboard.²

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

Nếu bạn muốn làm những thứ lạ mắt trong trình bao, hãy chuyển sang zsh, trong đó (trong số những lợi thế khác) có sự tích hợp tốt hơn nhiều giữa trình chỉnh sửa dòng và ngôn ngữ kịch bản.

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 không đặc biệt có một clipboard, đây là chung cho X.
² Tính đến bash 4.1, có một lỗi trong mã phân tích cú pháp chính: chuỗi chìa khóa bị ràng buộc với bind -xcó thể không hơn hai ký tự. Tôi nghĩ bash 4.2 sửa một số trường hợp tiền tố dài hơn nhưng không phải tất cả chúng; Tôi chưa nghiên cứu chi tiết.


Cảm ơn ý tưởng @Gilles! Tôi nghĩ rằng đã đến lúc tôi học hỏi và chuyển sang zsh.
Amelio Vazquez-Reina

Cuối cùng! Cảm ơn nhiều! Đây copy_line_to_x_clipboardchính xác là những gì tôi đã thiếu trong một thời gian rất dài: bản sao tương đương với shift + insert. Tôi đã đổi thành ctrl-x ( bind -x '"\C-x") vì Escquá xa với sở thích của tôi (và Cc sẽ là lựa chọn ngu ngốc nhất có thể).
pbarill

Thiết bị đầu cuối thường có khóa meta, được liên kết với phím alt theo mặc định. Nhập một ký tự trong khi giữ nó được dịch esctheo sau bởi ký tự đó, vì vậy bạn có thể nhập nó dưới dạng alt-w.
DoMiNeLa10

7

@Gilles đã đưa ra một câu trả lời tuyệt vời. Tôi chỉ muốn đề cập đến sự tồn tại của xclip, đây cũng là một cách rất hữu ích để sao chép đầu ra của thiết bị đầu cuối vào bảng tạm X, bằng cách chỉ cần đưa bất cứ thứ gì vào đó:

$ cat /etc/passwd | xclip

1
Chỉ cần một lưu ý rằng xclipsao chép vào bộ đệm chính theo mặc định. Để sử dụng clipboard, sử dụng xclip -selection clipboard.
Sparhawk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.