Jalankan beberapa perintah xdotool dalam satu baris yang terpisah satu sama lain

11

Saya mencoba untuk menjalankan xdotool type wordkemudian xdotool key Returndari Preferences Startup Aplications.
Tetapi jika saya menggunakan &&atau ;, xdotool mengevaluasinya sebagai kelanjutan dari input.

janot
sumber
1
Dalam use case saya berfungsi dengan baik xdotool type $'word\r', di mana $''lolos \rke sesuatu seperti kembali ( \ntidak bekerja di sini).
Scz

Jawaban:

16

Singkat cerita:
Gunakan skrip.

#! /bin/sh
# With some window selection magic, or a sleep 
# if you want to do that manually.
xdotool type word
xdotool key Return

Dan letakkan jalan naskah di Execlapangan.


Cerita panjang:

Menurut halaman xdotoolmanual :

type
       Supports newlines and tabs (ASCII newline and tab). 
       With respect to "COMMAND CHAINING", this command consumes the
       remainder of the arguments and types them. That is, no commands can
       chain after 'type'.

Perangkaian perintah melalui ;atau &tidak dimungkinkan, karena itu adalah sintaksis shell dan Aplikasi Startup tidak mendukung sintaksis shell. Namun, jika semua yang ingin Anda lakukan adalah menekan Entersetelah mengetik sesuatu, ada cara memutar untuk melakukannya.

Ketika dikatakan "ASCII" baris baru, itu tidak berarti telanjang \n. Dan perintah substitusi ( xdotool type "$(printf '\n')", katakanlah) memakan baris baru. Mengikuti xdotoolsposting forum ini , saya mencoba ini:

xdotool type "$(printf 'date\n ')"

Dan itu berhasil. Tapi itu hanya berfungsi jika ada beberapa karakter setelah \n, dan ini jelas meninggalkan ruang tambahan, yang tidak akan seperti yang Anda inginkan. Saya memodifikasi itu menjadi:

xdotool type "$(printf 'date\n\e ')"

Dan ini bekerja dan tidak meninggalkan ruang tambahan. Namun, ini dapat menyebabkan masalah bagi mereka yang menggunakan mode Vi di shell mereka.

Berkat komentar @ steeldriver, saya menemukan bahwa ini karena saya mencobanya di terminal tempat saya menjalankan perintah. Hanya sedikit celah antara penekanan saya Enterdan xdotoolperintah sudah cukup untuk satu baris baru untuk didaftarkan dengan benar. Jadi:

sleep 0.1; xdotool type $'date\n'

Jadi, perpanjang baris dengan mengutipnya:

xdotool type 'date
'

atau menggunakan interpretasi shell seperti yang disarankan @steeldriver sepertinya opsi yang tepat.

Namun, skrip berisi:

#! /bin/sh
sleep 1
xdotool type date
xdotool key Return

di Execlapangan bekerja dengan baik. Memang, saya selalu merekomendasikan menggunakan skrip untuk perintah kompleks dalam file desktop.

Anda dapat memiliki skrip dengan /usr/bin/xdotoolshebang, tetapi halaman manual mengatakan " scriptmode tidak sepenuhnya disempurnakan dan mungkin jauh di bawah harapan Anda", jadi saya tetap menggunakan bash scripts.

Saya mungkin telah melihat banyak hal, tetapi dalam beberapa percobaan pertama saya, saya harus meletakkan (kecil) sleepantara perintah typedankey . Itu adalah artefak untuk mencobanya di terminal yang mengeksekusi perintah bukan jendela lain.

muru
sumber
Sebuah baris literal tampaknya berfungsi yaitu xdotool type 'worddiikuti oleh tombol 'Enter' dan kemudian penutup ', seperti halnya $'word\n'(di mana bash memperluas \nke baris baru literal sebelum meneruskan argumen ke xdotool).
steeldriver
@steeldriver hit-and-miss. Itu adalah salah satu hal pertama yang saya coba dan tidak berhasil.
muru
@steeldriver Apa yang berhasil adalah dua baris baru (dua entri sebelum menutup satu 'atau dua \ns dengan $trik).
muru
itu aneh, baris baru tambahan sepertinya tidak perlu bagi saya - saya ingin tahu apakah itu tergantung pada aplikasi yang memiliki jendela target (saya menggunakan dokumen kosong di geany)?
steeldriver
@steeldriver terima kasih atas tipnya. Senang mengetahui bahwa saya tidak berhalusinasi tentang perlunya sleep(lihat catatan dalam teks kecil). Saya tidak mengubah jendela dan hanya mencobanya di jendela yang sama, tetapi dengan a sleep 1, kedua metode bekerja dengan jendela yang sama dan setelah beralih. Saya kira Enter saya sendiri menekan tombol entah bagaimana mengganggu dengan xdotool newline. Namun, untuk persyaratan file desktop yang lebih kompleks, saya masih merekomendasikan script.
muru
1

Menurut saya aplikasi tersebut tidak mem-parsing beberapa perintah, tetapi memperlakukannya sebagai satu perintah. Dengan demikian membuatnya menjadi perintah tunggal dengan membungkusnya dengan panggilan shell ...

bash -c 'xdotool type date; xdotool key Return'

Sekarang Anda juga dapat melakukan hal-hal shell lainnya ...

bash -c 'xdotool type "`date +"%Y-%m-%d_%T`"'

Perhatikan bahwa perintah "date" yang digunakan pada yang terakhir menyertakan baris baru! dan "xdotool" akan menampilkannya.

CATATAN: jika Anda melakukan ini sebagai makro keyboard saya juga akan menambahkan beberapa opsi lagi ke "xdotool" untuk membuat ini bekerja lebih baik ...

bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
anthony
sumber