Dapatkan kata di bawah kursor di X11

9

Untuk beberapa skrip, saya perlu mendapatkan kata saat ini di bawah kursor.

Bisakah xdotoolatau alat serupa mendapatkannya?

UNUiqueID unik
sumber
Apakah maksud Anda kata yang dipilih ? Lalu ya. (Tapi bukan xdotool)
Jacob Vlijm

Jawaban:

10

Cara mendapatkan teks yang saat ini dipilih

Anda bisa mendapatkan teks yang saat ini dipilih dengan perintah:

echo $(xclip -o -sel)

... tetapi Anda harus menginstal xclipterlebih dahulu:

sudo apt-get install xclip

Dari man xclip:

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

dan:

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

Lihat juga di sini atau, seperti biasa man xclip,.


EDIT

Mengatasi masalah dengan pilihan terakhir

Dari komentar, saya mengerti bahwa xclipmenampilkan pilihan terakhir , bahkan jika tidak ada yang dipilih lagi (misalnya ketika file ditutup). Itu tampaknya menjadi masalah dalam situasi Anda.

Meskipun xseljuga memiliki masalah ini, ini dapat diselesaikan: jika kami membuat skrip Anda tidak hanya membaca pilihan saat ini menjadi skrip, tetapi juga menulis konten yang sama ke file. Kami kemudian dapat memeriksa apakah pilihan baru berbeda dari pilihan terakhir. Jika tidak, kita dapat menyimpulkan tidak ada pilihan baru yang dibuat, dan perintah yang paling mungkin menghasilkan seleksi yang sudah ketinggalan zaman. Kami kemudian dapat memberitahu skrip untuk lulus.

Contoh (menggunakan xsel, yang memiliki sedikit keuntungan dalam kasus ini):

#!/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

Tidak perlu mengatakan bahwa Anda harus menginstal xsel:

sudo apt-get install xsel
Yakub Vlijm
sumber
Apakah ada cara untuk melakukannya tanpa seleksi?
UniversallyUniqueID
1
@BharadwajRaju Itu akan sangat mengejutkan saya, apa aplikasi saat ini untuk berkomunikasi? Kamu tidak akan tahu! Diperlukan pengenalan teks global tentang apa yang terjadi di layar. Dan bahkan kemudian ... Saya tidak melihat itu terjadi.
Jacob Vlijm
Apakah ada cara untuk mengetahui apakah ada teks yang saat ini dipilih? Karena meskipun tidak ada, xclipkembalikan teks yang dipilih terakhir .
UniversallyUniqueID
@BharadwajRaju lihat pembaruan saya.
Jacob Vlijm
Terkadang (secara acak) ia kembali Error: Target STRING not availabledan keluar.
UniversallyUniqueID