รับคำใต้เคอร์เซอร์ใน X11


9

สำหรับการเขียนสคริปต์ฉันต้องได้รับคำในขณะนี้ภายใต้เคอร์เซอร์

สามารถxdotoolหรือเครื่องมือที่คล้ายกันได้หรือไม่


คุณหมายถึงคำที่เลือกหรือไม่ ใช่แล้ว (แต่ไม่ใช่ xdotool)
Jacob Vlijm

คำตอบ:


10

วิธีรับข้อความที่เลือกในปัจจุบัน

คุณสามารถรับข้อความที่เลือกในปัจจุบันด้วยคำสั่ง:

echo $(xclip -o -sel)

... แต่คุณต้องติดตั้งxclipก่อน:

sudo apt-get install xclip

จากman xclip:

-o, -out
    prints the selection to standard out (generally for piping to a file or program) 

และ:

-selection
    specify which X selection to use, options are "primary" to use XA_PRIMARY (default), "secondary" for XA_SECONDARY or "clipboard" for XA_CLIPBOARD

ดูเพิ่มเติมที่นี่man xclipหรือเป็นเสมอ


แก้ไข

วิธีแก้ไขปัญหาเกี่ยวกับตัวเลือกสุดท้าย

จากความคิดเห็นฉันเข้าใจว่าให้xclipผลลัพธ์การเลือกสุดท้ายแม้ว่าจะไม่ได้เลือกอะไรอีกแล้ว (เช่นเมื่อปิดไฟล์) ดูเหมือนว่าจะเป็นปัญหาในสถานการณ์ของคุณ

แม้ว่าจะxselมีปัญหานี้ด้วย แต่ก็สามารถแก้ไขได้: หากเราทำให้สคริปต์ของคุณไม่เพียง แต่อ่านสิ่งที่เลือกปัจจุบันลงในสคริปต์ แต่ยังเขียนเนื้อหาเดียวกันลงในไฟล์ จากนั้นเราสามารถตรวจสอบว่าตัวเลือกใหม่นั้นแตกต่างจากการเลือกล่าสุดหรือไม่ หากไม่มีเราสามารถสรุปได้ว่าไม่มีการเลือกใหม่และคำสั่งส่วนใหญ่จะสร้างการเลือกที่ล้าสมัย จากนั้นเราสามารถบอกสคริปต์ให้ผ่านได้

ตัวอย่าง (ใช้xselซึ่งมีข้อได้เปรียบเล็กน้อยในกรณีนี้):

#!/bin/bash

# make sure the file to store the last selection exists
f=~/.old_sel
touch $f
# get the previous & current selection
old=$(cat "$f"); new=$(xsel -o)

if [ "$old" != "$new" ]; then
  # if selection changed, store the new selection to remember
  echo "$new" > "$f"
  # do the action, whatever that may be
  echo $new
fi

ไม่จำเป็นต้องบอกว่าคุณจะต้องติดตั้งxsel:

sudo apt-get install xsel

มีวิธีทำโดยไม่เลือกหรือไม่?
UniversallyUniqueID

1
@BharadwajRaju นั่นจะทำให้ฉันประหลาดใจจริงๆแอปพลิเคชันปัจจุบันที่จะสื่อสารด้วยคืออะไร คุณไม่รู้หรอก! มันจะต้องมีการรับรู้ข้อความทั่วโลกในสิ่งที่เกิดขึ้นบนหน้าจอ และถึงอย่างนั้น .. ฉันไม่เห็นมันเกิดขึ้น
Jacob Vlijm

มีวิธีการค้นหาหรือไม่หากมีข้อความใด ๆ ที่เลือกอยู่ในปัจจุบัน? เพราะถึงแม้ว่าจะไม่มีสิ่งใดเลยให้xclipส่งคืนข้อความที่เลือกล่าสุด
UniversallyUniqueID

@BharadwajRaju ดูการปรับปรุงของฉัน
Jacob Vlijm

บางครั้ง (สุ่ม) จะส่งคืนError: Target STRING not availableและออก
UniversallyUniqueID
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.