แบ่งปันคลิปบอร์ดระหว่าง bash และ X11


12

ในกระทู้นี้คำตอบยอดนิยมแสดงวิธีคัดลอกข้อความที่เลือกไว้ก่อนหน้านี้ด้วยเมาส์บน gnome-terminal ไปยังคลิปบอร์ดใน X11

คำถามของฉันคือว่าฉันคัดลอกข้อความจากเครื่องเทอร์มินัลโดยใช้เครื่องหมายทุบตีและแป้นพิมพ์ลัด (เช่นset-mark+ M-w) เป็นไปได้ไหมที่จะแบ่งปันคลิปบอร์ดนี้กับ X11?

แก้ไข : ในคำถามเดิมฉันได้พูดคุยเกี่ยวกับการแบ่งปันคลิปบอร์ดกับ GNOME แต่ตามที่ Gilles ชี้ไว้ด้านล่าง GNOME ไม่มีคลิปบอร์ด (โดยเฉพาะ X) ดังนั้นฉันจึงได้อัปเดตคำถาม


ใน gnome-terminal คุณสามารถพิมพ์ Ctrl + Shift + C และ Ctrl + Shift + V เพื่อคัดลอกและวางไปยังคลิปบอร์ดของระบบ
Lie Ryan

2
ดูโพสต์นี้ stackoverflow.com/questions/994563/… แต่มันไม่ทำงานสำหรับฉัน
ยอดเยี่ยม q

คำตอบ:


10

คลิปบอร์ดของ Bash นั้นอยู่ในภายในของ bash และ bash ไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์ X

สิ่งที่คุณสามารถทำได้คือเปลี่ยนความหมายของM-wการคัดลอกส่วนที่เลือกไปยังคลิปบอร์ด X นอกเหนือจากคลิปบอร์ดภายในของ bash อย่างไรก็ตามการรวมของ bash นั้นค่อนข้างหลวมและฉันไม่คิดว่าจะมีวิธีเข้าถึงข้อมูลภูมิภาคหรือคลิปบอร์ดจากรหัสทุบตี คุณสามารถทำการผูกคีย์เพื่อคัดลอกทั้งบรรทัดไปยังคลิปบอร์ด 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

หากคุณต้องการทำสิ่งที่แปลกใหม่ในเชลล์ให้เปลี่ยนเป็น zsh ซึ่ง (เหนือสิ่งอื่นใด) มีการรวมที่ดีขึ้นระหว่างตัวแก้ไขบรรทัดและภาษาสคริปต์

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 ไม่มีคลิปบอร์ดโดยเฉพาะนี่คือ X ทั่วไป
² ในฐานะของทุบตี 4.1 มีข้อบกพร่องในรหัสการแยกคีย์: ลำดับคีย์ที่ผูกไว้กับbind -xอาจมีความยาวไม่เกินสองตัวอักษร ฉันคิดว่าทุบตี 4.2 แก้ไขบางกรณีของคำนำหน้าอีกต่อไป แต่ไม่ใช่ทั้งหมด; ฉันไม่ได้ค้นคว้ารายละเอียด


ขอบคุณสำหรับความคิด @Gilles! ฉันคิดว่าถึงเวลาแล้วที่ฉันจะเรียนรู้และเปลี่ยนไปzshใช้
Amelio Vazquez-Reina

ที่สุด! ขอบคุณมัด! ตรงนี้copy_line_to_x_clipboardเป็นสิ่งที่ฉันขาดหายไปเป็นเวลานานนั่นคือจำนวนสำเนาของ shift + insert ฉันเปลี่ยนเป็น ctrl-x ( bind -x '"\C-x") เพราะEscไกลเกินกว่าที่ฉันจะลิ้มรส (และสำเนาถึงจะเป็นตัวเลือกที่โง่ที่สุด)
pbarill

โดยปกติเทอร์มินัลจะมีเมตาคีย์ซึ่งถูกผูกไว้กับคีย์ alt ตามค่าเริ่มต้น พิมพ์ตัวอักษรในขณะที่ถือมันลงจะแปลให้ตามด้วยตัวอักษรที่เพื่อให้คุณสามารถพิมพ์เป็นesc alt-w
DoMiNeLa10

7

@Gilles ให้คำตอบที่ยอดเยี่ยมแล้ว ฉันอยากจะพูดถึงการดำรงอยู่ของxclipซึ่งเป็นวิธีที่มีประโยชน์มากในการคัดลอกการส่งออกขั้วไปยังคลิปบอร์ด X โดยเพียงแค่ใส่อะไรลงไป:

$ cat /etc/passwd | xclip

1
เพียงแค่ทราบว่าxclipคัดลอกลงในบัฟเฟอร์หลักโดยค่าเริ่มต้น xclip -selection clipboardหากต้องการใช้คลิปบอร์ดการใช้งาน
Sparhawk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.