ฉันพยายามที่จะเรียกใช้xdotool type word
แล้วxdotool key Return
จากการตั้งค่าเริ่มต้น Aplications
แต่ถ้าฉันใช้&&
หรือ;
xdotool ประเมินว่ามันเป็นความต่อเนื่องของอินพุต
ฉันพยายามที่จะเรียกใช้xdotool type word
แล้วxdotool key Return
จากการตั้งค่าเริ่มต้น Aplications
แต่ถ้าฉันใช้&&
หรือ;
xdotool ประเมินว่ามันเป็นความต่อเนื่องของอินพุต
คำตอบ:
เรื่องสั้นสั้น ๆ :
ใช้สคริปต์
#! /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
manpage :
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ฉันคิดว่านี่เป็นเพราะฉันลองใช้งานในเทอร์มินัลที่ฉันกำลังใช้งานคำสั่ง เพียงช่องว่างเล็ก ๆ ระหว่างการกดEnterและxdotool
คำสั่งก็เพียงพอสำหรับการขึ้นบรรทัดใหม่เดียวที่จะลงทะเบียนอย่างถูกต้อง ดังนั้น:
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
ใน shebang แต่ manpage บอกว่า " script
โหมดไม่เต็มไปด้วยเลือดและอาจต่ำกว่าความคาดหวังของคุณ" ดังนั้นฉันจึงติดกับสคริปต์ทุบตี
ฉันอาจจะได้เห็นสิ่งที่ แต่ในคู่แรกของฉันพยายามที่ผมต้องใส่ (เล็ก) คำสั่งsleep
ระหว่างtype
และkey
นั่นเป็นสิ่งประดิษฐ์ของการทดลองใช้บนเทอร์มินัลที่กำลังเรียกใช้คำสั่งแทนหน้าต่างอื่น
xdotool type 'word
แล้วตามด้วยคีย์ 'Enter' และจากนั้นปิด'
เช่นเดียวกับ$'word\n'
(ซึ่งทุบตีขยาย\n
เพื่อขึ้นบรรทัดใหม่ตามตัวอักษรก่อนที่จะผ่านการโต้แย้งไปxdotool
)
'
หรือสอง\n
s พร้อมกับ$
เคล็ดลับ)
sleep
(ดูหมายเหตุในข้อความขนาดเล็ก) ฉันไม่ได้เปลี่ยน windows และลองใช้กับหน้าต่างเดียวกัน แต่ด้วย a sleep 1
ทั้งสองวิธีทำงานกับทั้งหน้าต่างเดิมและหลังจากเปลี่ยน ฉันเดาว่าฉันกดปุ่ม Enter ของตัวเองจะรบกวนการขึ้นบรรทัดใหม่ของ xdotool อย่างไรก็ตามสำหรับความต้องการที่ซับซ้อนมากขึ้นของไฟล์เดสก์ท็อปฉันยังคงแนะนำสคริปต์
ดูเหมือนว่าแอปพลิเคชันจะไม่แยกวิเคราะห์คำสั่งหลายคำสั่งโดยให้ถือว่าเป็นคำสั่งเดียว เช่นนั้นทำให้มันเป็นคำสั่งเดียวโดยการตัดมันเรียกเชลล์ ...
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`"'
xdotool type $'word\r'
กรณีที่การ$''
หลบหนี\r
ไปยังสิ่งที่ต้องการกลับ (\n
ไม่ทำงานที่นี่)