แป้นพิมพ์ลัดสำหรับการวางส่วนที่เลือกหลัก


40

มีแป้นพิมพ์ลัดมาตรฐานหรือแป้นพิมพ์ทั่วไปสำหรับวางการเลือกหลักหรือไม่

ฉันต้องการเลือกข้อความและไปที่แอปอื่นเพื่อวางโดยไม่ทำลายเนื้อหาของคลิปบอร์ด ฉันต้องการให้นิ้วของฉันบนแป้นพิมพ์มากกว่าเลื่อนไปที่เมาส์ค้นหาตัวชี้วางตำแหน่งที่ฉันต้องการและคลิกกลาง

หากไม่มีอะไรธรรมดาหรือถ้าเป็นแอพพลิเคชั่นที่เฉพาะเจาะจงและไม่ได้รับการสนับสนุนจากหลายคน (หรืออย่างน้อยก็ในแอปพลิเคชันเพิ่มเติม)


2
มีความเป็นไปได้ที่เหมือนกัน distro: unix.stackexchange.com/questions/11889/ …
Ciro Santilli 事件改造中心中心法轮功六四事件

FWIW คุณสามารถวางส่วนที่เลือกหลักจากแป้นพิมพ์ (เช่นโดยไม่ต้องใช้ปุ่มเมาส์) โดยใช้ shift-insert และคัดลอก / วางส่วนคลิปบอร์ดโดยใช้ ctrl-insert / ctrl-shift-insert
Jonathan Hartley

@JonathanHartley สำหรับฉันเปลี่ยนแทรกจากคลิปบอร์ดไม่ใช่ตัวเลือกหลัก
jberryman

คำตอบ:


32

การส่งปุ่มกดเสมือนจริงไม่ได้ผลสำหรับฉัน (ดูความคิดเห็น ) แต่คำตอบนั้นเป็นแรงบันดาลใจให้ฉันมองหาโซลูชันที่คล้ายกัน การส่งเหตุการณ์ "text" โดยxvkbdไม่สนใจสถานะปัจจุบันของแป้นพิมพ์จริง:

sh -c 'xsel | xvkbd -xsendevent -file - 2>/dev/null'

xvkbd -textใช้ลำดับไม่กี่ทับขวาดังนั้นแทนที่จะเต้นรำกับหนี-fileงาน xvkbdเอาท์พุทข้อความเตือนบางอย่างเกี่ยวกับการปรับเปลี่ยน แต่มันดูเหมือนจะไม่เกี่ยวข้องกับการใช้งานนี้ (แต่ฉันไม่ต้องการที่จะเห็นมันใน~/.xsession-errors)

ฉันผูกพันนี้เพื่อลัดโดยใช้ระบบ> การตั้งค่า> แป้นพิมพ์ลัด

โปรดทราบว่าคุณต้องติดตั้งแพ็คเกจ xsel และ xvkbd:

sudo apt-get install xsel xvkbd

3
กล้วยศักดิ์สิทธิ์! มันได้ผล! ที่น่ากลัว. อูบุนตูควรตั้งค่านี้ตามค่าเริ่มต้น
Eric Johnson เมื่อ

8
สำหรับฉันแล้วsh -c 'xsel | xvkbd -file - 2>/dev/null'งาน -xsendevent ต้องออกไปทำงาน
sup

อีกครั้งฉันต้องกำหนดคำสั่งนี้ให้กับทางลัดคีย์เดียว (โชคดีที่ฉันมีปุ่ม ThinkVantage ที่ไม่ได้ทำอะไรบน Thinkpad ของฉัน - ctrl + alt + v ทำงานอย่างแปลกประหลาดและวางเพียงส่วนหนึ่งของสิ่งที่อยู่ในนั้นxsel)
sup

2
วิธีนี้ใช้งานได้ดีมากยกเว้นปัญหาสองข้อ (1) ฉันใช้เทอร์มินัลแบบหล่นลง (Guake) ที่ฉันได้ตั้งค่าไว้เพื่อซ่อนโฟกัสที่เสีย การเรียกใช้สคริปต์นี้จะเป็นการลบโฟกัสออกจากเทอร์มินัลชั่วคราวทำให้มันซ่อน (2) ไม่สามารถใช้อักขระ UTF-8 ได้ดีอักขระสองตัว เช่นถ้าฉันเลือก "éòü" การใช้สคริปต์จะพิมพ์ "éòü"
Sparhawk

2
ดูเหมือนว่าข้อผิดพลาดที่สองจะxvkbdมา xselทำงานได้ดีกับ "éòü" ในตัวเลือกหลัก แต่xvkbdล้มเหลวเนื่องจากสคริปต์ด้านบน (และยังล้มเหลวด้วยxvkbd -text "éòü"แม้ว่าที่นี่จะพิมพ์อะไร.)
สปาร์

7

คุณสามารถได้รับสิ่งนี้ด้วยการใช้โปรแกรม xdotool ( คลิกเพื่อติดตั้ง ) และ xsel ( คลิกเพื่อติดตั้ง )

xdotoolสามารถจำลองการพิมพ์ลงในหน้าต่าง xselส่งออกเนื้อหาของการเลือกหลัก (โดยค่าเริ่มต้น); เปลือกหนึ่งซับต่อไปนี้จะทำเคล็ดลับ:

 xdotool type `xsel`

ในการผูกสิ่งนี้กับคีย์ใด ๆ โดยใช้รายการเมนูSystem-> Preferences-> Keyboard ช็อตคัตมีความจำเป็นต้องล้อมรอบในการเรียกใช้เชลล์:

 sh -c 'xdotool type --clearmodifiers -- "`xsel`"'

การพิมพ์ในxdotoolจะไม่ทำงานกับบางโปรแกรม ดูหมายเหตุในเอกสาร xdotool


สิ่งนี้จะไม่ทำงานเว้นแต่กล่องข้อความและตำแหน่งเคอร์เซอร์จะอยู่ในตำแหน่งที่แน่นอนและไม่แน่นอน ในความเป็นจริงถ้าสิ่งนี้นับเส้นขอบตัวจัดการหน้าต่างนั่นจะเป็นการกระทำ "คลิกกลางที่ชื่อหน้าต่าง" ซึ่งแตกต่างอย่างสิ้นเชิง

@Roger ขอบคุณแก้ไขข้อความ ฉันอยากรู้ว่ามีวิธีที่ดีกว่าการทำเช่นนี้: ตัวผมเองได้รับการมองหา "วาง" -key สำหรับค่อนข้างบางเวลา ...
คาร์โด้ Murri

ฉันขอขอบคุณความพยายาม แต่ก็ยังใช้งานไม่ได้ หากฉันต้องการกังวลเกี่ยวกับตำแหน่งของเมาส์ฉันจะใช้เมาส์ตั้งแต่แรก :)

@Roger: ได้รับการแก้ไขครั้งที่สองในรอบ: xdotool + xsel ทำมัน (อย่างน้อยก็ใช้ได้ผลกับฉัน)
Riccardo Murri

2
ต้องการ - ตัวเลือกล้างตัวกรองมิฉะนั้นจะมีเงื่อนไขการแย่งระหว่างการปล่อยแป้นพิมพ์ลัดและ xdotool ในการดำเนินการ xdotool ใน repos ของ 10.04 ไม่ได้รับการปรับปรุงสำหรับตัวเลือกนี้ฉันต้องดาวน์โหลดและสร้างด้วยตัวเอง อย่างไรก็ตาม - ตัวล้างสนามบินดูเหมือนจะมีผลกับตัวดัดแปลงแปลก ๆ และฉันก็ไม่เห็นว่าในท้ายที่สุดแล้วการทำให้ xdotool ทำงานได้ดีกับแป้นพิมพ์ลัดของฉัน

5

ฉันกำลังหาคำตอบสำหรับคำถามเดียวกันนี้และฉันพบคำตอบที่ระบุว่าShift+ Insertกำลังทำงานเพื่อวางการเลือกหลัก ฉันทำงานให้ฉัน ที่เรียบง่าย


บน Ubuntu โดยค่าเริ่มต้นShift + Insert วางคลิปบอร์ดปกติเช่นเดียวกับ Ctrl + vไม่ใช่ตัวเลือกหลัก คุณใช้ distro แบบใด
ปาโบล

2

การโทรxdotool click --clearmodifiers 2จำลองคลิกปุ่มกลางของเมาส์ มันใช้งานได้ดีกว่าการใช้ xsel (อย่างน้อยสำหรับฉัน) คุณต้องวางตำแหน่งเมาส์ก่อนพิมพ์ ...


2

ข้อเสนอแนะอื่น ๆ ของ xdotool ที่ทำงานใน Debian Jessie 8.7 (ม.ค. 2017):

xdotool click --delay 0 --clearmodifiers 2
  • xdotool จัดการกับสตริงแบบหลายไบต์ (pe UTF-8) ซึ่งแตกต่างจาก xvkbd
  • xdotool clickจำลองการคลิกจริงดังนั้นคุณไม่ต้องคลิกด้วยตัวคุณเองเพื่อวางที่ตำแหน่งของเมาส์อย่างที่คุณต้องการถ้าคุณใช้xdotool typeหรือ xvkbd

ปัญหาเดียวคือว่า--clearmodifiersจะ "กด" ย้อนกลับตัวแก้ไขใด ๆ (Ctrl / Alt / Shift / Meta) ที่คุณใช้หลังจากจำลองการคลิก ถึงแม้จะมี--delay 0(แทนที่จะเป็น 12ms) คำสั่งก็ยังใช้เวลาเล็กน้อย หากคุณปล่อยปุ่มก่อนที่มันจะจบลงตัวดัดแปลงของคุณจะ "กด" อีกครั้งและติดอยู่ที่นั่นจนกว่าคุณจะกดและปล่อยปุ่มจริงอีกครั้ง

ดังนั้นด้วยสิ่งนี้คุณต้องเป็นบิต "ช้า" (50ms?) เพื่อปล่อยตัวดัดแปลงของคุณหากคุณกำลังใช้ใด ๆ

คุณสามารถทดสอบสิ่งนี้ได้โดยตั้งค่าแป้นพิมพ์ลัดของคุณใช้เป็นตัวแก้ไขข้อความจากนั้นกดแป้น (เช่นaหรือลูกศร) จดหมายควรปรากฏเป็นตัวพิมพ์เล็ก หากมีสิ่งอื่นเกิดขึ้นแสดงว่าคุณเร็วเกินไปและตัวแก้ไขติดอยู่ (pe Shift ถ้าอยู่ในรูปตัวพิมพ์ใหญ่, Ctrl หากคุณเลือกข้อความทั้งหมด, Alt หากคุณเปิดเมนู) กดและปล่อยโมดิฟายเออร์ของคุณอีกครั้งเพื่อรีเซ็ต

หากคุณเร็วเกินไปคุณสามารถใช้คำแนะนำของ ilkerk:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

จากนั้นคุณต้องปล่อยมันในเวลาน้อยกว่า 300ms และรอครึ่งวินาทีก่อนที่ข้อความจะปรากฏ

นอกจากนี้การใช้xdotool typeหมายความว่าคุณแทรกข้อความราวกับว่าคุณพิมพ์อยู่ที่ตำแหน่งเคอร์เซอร์ข้อความและไม่ใช่ตัวชี้เมาส์ คุณสามารถเปลี่ยนเป็นclickหากคุณต้องการพฤติกรรมการคลิกกลางปกติ

(ทำให้โพสต์นี้เพื่อให้ผู้มาใหม่ไม่ต้องชิ้นส่วนปริศนาแพร่กระจายในความคิดเห็นอีกครั้ง)


ทำงานให้ฉันใน Arch Linux ได้แล้วตอนนี้
MountainX

1

ฉันมีปัญหากับการแก้ปัญหาที่จำลองวางPRIMARYเลือกเพื่อแทนฉันเพิ่มทางลัดที่สำเนาPRIMARYCLIPBOARDเลือกไป หลังจากที่ใช้ทางลัดของฉันฉันวางCLIPBOARDในทางปกติด้วยCtrl+V, Ctrl+Shift+VหรือShift+Insertขึ้นอยู่กับการใช้งาน

คำสั่งเพื่อคัดลอกส่วนที่PRIMARYเลือกไปยังCLIPBOARDคือ

sh -c 'xsel --output --primary | xsel --input --cliboard'

ซึ่งฉันผูกกับCtrl+Insert(ตัวเลือกโดยพลการ) ในการตั้งค่าทางลัด Gnome ใต้System Settings -> Devices -> Keyboard

บทสรุปของปัญหาเกี่ยวกับการแก้ปัญหาอื่น ๆ :ฉันพยายามxsel | xvkbd ...และxsel | xdotool ...การแก้ปัญหา แต่ก็พบว่าพวกเขาไม่ได้เป็นอย่างดีเพราะพวกเขาจำลองการพิมพ์PRIMARYตัวละครที่เลือกตัวละครที่ไม่ได้เช่นเดียวกับการวางได้ด้วยการคลิกกลาง ปัญหารวมถึง: มีความล่าช้าเป็นเวลานานในขณะที่ตัวเลือกขนาดใหญ่แทรกตัวอักษรทีละตัว หากคุณต้องการเลิกทำการ "วาง" คุณต้องเลิกทำการอักขระทีละตัวอักษรซึ่งช้า หากคุณกำลังใช้คีย์ "ตาย" แล้วทุกอย่างได้รับ messed ขึ้นเช่น "วาง" "eผลิตë; xvkdbไม่ได้จัดการกับตัวอักษร Unicode ได้อย่างถูกต้อง

คำเตือน:วิธีนี้จะเขียนทับCLIPBOARDเนื้อหาที่มีอยู่แต่ OP ขอวิธีแก้ไขที่รักษาCLIPBOARDเนื้อหาที่มีอยู่


สิ่งนี้บันทึกเนื้อหาคลิปบอร์ดดั้งเดิม & ตั้งอีกครั้งในภายหลังหรือไม่ หรือมันทำให้เนื้อหาของคลิปบอร์ดเดิมไม่เป็นส่วนหนึ่งดังนั้นจึงทำให้ส่วน "ที่จะวางโดยไม่ trashing เนื้อหาคลิปบอร์ดของฉัน " ล้มเหลว?
Xen2050

@ Xen2050 ใช่สิ่งนี้ทำให้ CLIPBOARD ล้มเหลว ฉันจะเพิ่มบันทึกย่อให้กับคำตอบ
ntc2

0

ฉันมีปัญหาเดียวกันและการค้นหาทางอินเทอร์เน็ตไม่ได้ช่วยอะไรฉันมาก ปัญหาในการจำลองการคลิก 2 นั้นน่ารำคาญตามที่ OP อธิบายไว้

ปัญหาของข้อเสนอข้างต้นxdotoolและ xsel คือเมื่อxdotoolเริ่ม "พิมพ์" คุณยังคงกดปุ่มอื่น นั่นไม่ได้เกิดขึ้นกับผลลัพธ์ใด ๆ ตัวอย่างเช่นหากคุณผูกมันไว้ที่ปุ่ม "insert" ดังนั้นxdotoolการส่งคีย์ในขณะที่นิ้วของคุณกำลังกดปุ่ม "insert" ซึ่งไม่มีอะไรเกิดขึ้น

ด้านล่างนี้เป็นวิธีแก้ปัญหาเมื่อต้องการผูกเข้ากับการกดปุ่ม:

sh -c 'sleep 0.3 && xdotool type --clearmodifiers --delay 0  "`xsel`"'

มันไม่สมบูรณ์แบบ แต่ทำงานได้ ตอนนี้คุณมีเวลา 0.3 วินาทีในการกดปุ่ม (และคีย์ขึ้น) จนเสร็จ

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