複数のxdotoolコマンドを互いに分離された1行で実行する


11

xdotool type wordその後xdotool key Return、Startup Aplications Preferencesから実行しようとしています。
しかし、&&or を使用すると;、xdotoolはそれを入力の継続として評価します。


1
私のユースケースではで動作しxdotool type $'word\r'$''エスケープで\rreturnのようなものにエスケープします(\nここでは機能しません)。
Scz 2016年

回答:


16

簡単に言えば
、スクリプトを使用します。

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

そして、スクリプトのパスをExecフィールドに入力します。


長い話:

xdotoolマンページによると:

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'.

;またはを介したコマンドチェーン&は不可能です。これはシェル構文であり、スタートアップアプリケーションはシェル構文をサポートしていないためです。ただし、Enter何かを入力した後に押すだけの場合は、迂回する方法があります。

「ASCII」という改行が表示されている場合でも、それだけでは意味がありません\n。そして、コマンド置換(xdotool type "$(printf '\n')"たとえば、)は末尾の改行を削除します。このxdotoolsフォーラム投稿に続いて、私はこれを試しました:

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

そしてそれはうまくいった。しかし、これはの後に文字がある場合にのみ機能し\n、これにより明らかに末尾にスペースが残りますが、これは望んでいないことです。私はそれを次のように変更しました:

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

そして、これは機能し、後続のスペースを残しません。ただし、シェルでViモードを使用している場合は問題が発生する可能性があります。

@steeldriverのコメントのおかげで、これは私がコマンドを実行しているまさにその端末でそれを試したことによるものであることがわかりました。押すEnterxdotoolコマンドの間にわずかなギャップがあれば、1つの改行が正しく登録されます。したがって:

sleep 0.1; xdotool type $'date\n'

したがって、引用符で行を拡張するか、

xdotool type 'date
'

または、@ steeldriverが推奨するシェル解釈を使用すると、正しいオプションのように見えます。

ただし、以下を含むスクリプト:

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

Execフィールド罰金を働きました。実際、デスクトップファイルの複雑なコマンドにはスクリプトを使用することを常にお勧めします。

/usr/bin/xdotoolシバンでスクリプトを使用できますが、マンページには「scriptモードは完全に具体化されておらず、期待を下回る可能性がある」と記載されているため、bashスクリプトを使用しました。

私は何かを見ていたかもしれませんが、最初の数回の試行でsleepは、typekeyコマンドの間に(小さい)を入れなければなりませんでした。それは、別のウィンドウの代わりにコマンドを実行していた端末でそれを試すことのアーティファクトでした。


リテラルの改行は、すなわち動作しているようxdotool type 'wordEnterキー、その後、終値が続く'として行い、$'word\n'(ここではbashが拡大\nリテラルの改行への引数を渡す前にxdotool)。
スチールドライバー、2014

@steeldriverヒットアンドミス。それは私が最初に試みたものの1つで、うまくいきませんでした。
muru 2014

@steeldriver機能したのは、2つの改行です(2 つの Enterキーを閉じる前にEnterキーを押すか'、2つ\nのs キーを$トリックで閉じます)。
muru、2014

奇妙なことに、余分な改行は必要ないようです-ターゲットウィンドウを所有するアプリケーションに依存しているのでしょうか(geanyで空のドキュメントを使用していました)。
スチールドライバー2014

@steeldriverチップをありがとう。私が必要性について幻覚を感じていなかったことを知ってうれしいですsleep(短いテキストのメモを参照)。私はウィンドウを変更せず、同じウィンドウで試してみましたが、を使用するとsleep 1、両方のメソッドが同じウィンドウと切り替え後の両方で機能しました。自分のEnterキーを押すと、どういうわけかxdotool改行が妨げられたと思います。ただし、デスクトップファイルのより複雑な要件については、スクリプトをお勧めします。
muru 2014

1

アプリケーションは複数のコマンドを解析するのではなく、1つのコマンドとして扱うように思えます。そのため、シェル呼び出しをラップすることで単一のコマンドにします...

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

これで、他のシェルのこともできます...

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

最後に使用した「date」コマンドには改行が含まれていることに注意してください。そして「xdotool」はそれを出力します。

注:これをキーボードマクロとして実行している場合は、 "xdotool"にいくつかのオプションを追加して、この機能を改善します...

bash -c 'xdotool type --clearmodifiers -delay 0 "`date +"%Y-%m-%d_%T`"'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.