Score:0

ตั้งค่า Alt + ซ้าย/ขวา เป็นสคริปต์สำหรับการสลับแท็บ

ธง br

ฉันชอบ Alt + ซ้าย/ขวา เพื่อเปลี่ยนแท็บขณะอยู่ในเบราว์เซอร์ แต่เพื่อทำสิ่งที่ทำตามปกติในโปรแกรมอื่นๆเบราว์เซอร์ส่วนใหญ่ไม่อนุญาตให้คุณมีการเชื่อมโยงคีย์แบบกำหนดเอง (พวกเขามักจะใช้ Ctrl + PgUp/PgDn ซึ่งบนแป้นพิมพ์ของฉันคือ Ctrl + Fn + ขึ้น/ลง) ดังนั้นฉันจึงติดอยู่กับวิธีแก้ปัญหาระดับระบบปฏิบัติการ: ผูก Alt + ซ้าย/ สิทธิ์ในการกด Ctrl + PgUp/PgDn หากหน้าต่างปัจจุบันเป็นเบราว์เซอร์และเป็นตัวของตัวเอง ใน X11 ฉันทำสิ่งนี้สำเร็จด้วย AutoKey แต่ฉันต้องการโซลูชันที่ใช้งานได้ใน Wayland ที่นี่ที่ฉันอยู่ คีย์แมป ไม่อนุญาตให้ใช้คำสั่งทุบตี ฮอว์ค อาจใช้งานได้ (ฉันยังไม่ได้ลอง) กม ไม่ยืดหยุ่นเพียงพอกับสคริปต์ Bash พิมพ์ และ ydotool ไม่ได้ผลสำหรับฉัน แต่ evemu-event ทำ (ฉันพบแล้ว ที่นี่) ฉันสามารถรับชื่อหน้าต่างปัจจุบันโดยใช้

โทร gdbus \
  --การประชุม \
  --dest org.gnome.Shell \
  --object-path /org/gnome/Shell \
  --เมธอด org.gnome.Shell.Eval "
    ทั่วโลก
      .get_window_actors()
      .map(a=>a.meta_window)
      .find(w=>w.has_focus())
      .get_wm_class()" \
  | ตัด -d'"' -f 2

ที่ฉันค้นพบจาก ที่นี่. นั่นหมายความว่าฉันสามารถสร้างสคริปต์นี้ได้

#!/bin/bash
# setid --fork คำพังเพย-terminal
# ตรวจสอบว่าหน้าต่างปัจจุบันเป็น Google Chrome หรือไม่ (สามารถปรับใช้กับ Firefox ได้)
# และถ้าเป็นเช่นนั้นให้ส่งปุ่ม Ctrl + PgUp (เลื่อนแท็บโฟกัสไปทางซ้ายหนึ่งแท็บ)
# ตั้งใจให้เรียกโดยการจัดการคีย์ (เช่น KMonad) เมื่อกด Alt + Left

# นี่คือวิธีที่ฉันจำลองการกดปุ่ม
# นำมาจากที่นี่: https://unix.stackexchange.com/questions/381831/keyboard-emulation-in-wayland
# ต้องการ sudo apt install evemu-tools
ฟังก์ชัน type_key () {
    EVDEVICE=/dev/input/event4
    #กดแป้นลงไปตามลำดับ
    สำหรับใส่ $@; ทำ
        evemu-event $EVDEVICE --type EV_KEY --code KEY_$key --value 1 --sync
    เสร็จแล้ว


    #ยกกุญแจขึ้นตามลำดับ
    สำหรับ (( idx=${#@}; idx>0; idx-- )); ทำ
        evemu-event $EVDEVICE --type EV_KEY --code KEY_${!idx} --value 0 --sync
    เสร็จแล้ว
}
# ดูที่ https://github.com/sezanzeb/key-mapper ด้วย มันไม่สามารถทำคำสั่งทุบตีได้ แต่อย่างอื่น
#ดูดีสำหรับสิ่งนี้


# ฉันรู้ว่าไม่มีทางได้รับชื่อหน้าต่างใน Wayland โดยทั่วไป ฉันทำได้ถ้าเราอยู่ใน Gnome
# นำมาจากที่นี่: https://unix.stackexchange.com/questions/399753/how-to-get-a-list-of-active-windows-when-using-wayland
WINDOW_CLASS=$(gdbus โทร \
  --การประชุม \
  --dest org.gnome.Shell \
  --object-path /org/gnome/Shell \
  --เมธอด org.gnome.Shell.Eval "
    ทั่วโลก
      .get_window_actors()
      .map(a=>a.meta_window)
      .find(w=>w.has_focus())
      .get_wm_class()" \
  | ตัด -d'"' -f 2)

# ใช้ "Google-chrome" สำหรับ Chrome และ "firefox" สำหรับ Firefox
ถ้า [[ "$WINDOW_CLASS" = "gnome-terminal-server" ]] || [[ "$WINDOW_CLASS" = "Google-chrome" ]] || [[ "$WINDOW_CLASS" = "ไฟร์ฟอกซ์" ]]
แล้ว
  type_key ขวาCTRL PAGEUP
อื่น
  type_key ขวา ซ้าย
ไฟ

# ตรวจสอบตัวจัดการเว็บแอป
# https://ubuntuhandbook.org/index.php/2021/01/install-linux-mints-web-app-manager-ubuntu-20-04/

และใช้การตั้งค่า Gnome -> ทางลัดแป้นพิมพ์ -> ทางลัดที่กำหนดเอง -> + เพื่อผูก Alt + ทางซ้ายกับสคริปต์ด้านบน (ต้องให้สคริปต์เป็น "sudo pass" เมื่อเสร็จแล้ว ที่นี่). อย่างไรก็ตาม แม้ว่าสคริปต์จะสลับแท็บเมื่อเรียกใช้งานจาก Gnome Terminal แต่จะไม่สลับแท็บใน Google Chrome (บางทีนี่อาจเป็นปัญหาของอีมูมูอีเวนต์ บางทีทางเลือกนี้อาจใช้ได้ผล คำอธิบาย?) และจะไม่สลับแท็บเมื่อเรียกโดยใช้ Gnome ตั้งค่าการผูกปุ่มทั่วโลก Alt + Left

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

รุ่นของ Gnome: GNOME Shell 3.38.4 ฉันใช้ Material Shell ในกรณีที่เกี่ยวข้อง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา