การแก้ปัญหาการสลับโดยใช้ Alt+Shift ใน Linuxในแอปพลิเคชันอิเล็กตรอน

สวัสดีเพื่อนร่วมงาน!

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

คำอธิบายของปัญหา

Использовал Ubuntu 18.04 для работы и в последнее время заметил, что при переключении раскладки по alt+shift в таких приложениях, как Visual Studio Code, Skype, Slack и прочих, которые созданы с помощью Electron возникает следующая проблема: фокус с поля ввода, переходит к верхней панели окна (меню). По иным причинам переехал в Fedora + KDE и понял, что проблема никуда не делась. В поисках решения нашёл замечательную статью ซ่อม Skype ด้วยตัวเองขอบคุณมากครับ สหาย บรนอฟก์ซึ่งได้อธิบายปัญหาอย่างละเอียดและแบ่งปันวิธีแก้ปัญหาของเขา อย่างไรก็ตาม วิธีแก้ปัญหาที่อธิบายไว้ในบทความนั้นใช้ได้กับแอปพลิเคชันเดียวเท่านั้น คือ Skype นอกจากนี้ การหาวิธีแก้ปัญหาใน Visual Studio Code ก็มีความสำคัญสำหรับผมเช่นกัน เพราะถึงแม้การส่งข้อความด้วยเมนูที่กระโดดไปมาจะน่ารำคาญ แต่ก็ไม่แย่มากนักหากคุณกำลังพัฒนาโปรแกรมอยู่ ยิ่งไปกว่านั้น เพื่อนร่วมงานคนหนึ่งแนะนำวิธีแก้ปัญหาที่ทำให้เมนูของแอปพลิเคชันหายไปอย่างสมบูรณ์ และผมไม่อยากให้เมนูใน VS Code หายไปเลย

ฉันพยายามทำความเข้าใจว่าเกิดอะไรขึ้น

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

ฉันเปิด Visual Studio Code และเริ่มกดปุ่ม Alt+<%something%> ต่างๆ พร้อมสังเกตการตอบสนองของแอป ในเกือบทุกกรณี การกดปุ่มทุกแบบยกเว้น Alt+Shift ทำงานได้โดยไม่เสียโฟกัส รู้สึกเหมือนมีอะไรบางอย่างกำลังกินปุ่ม Shift ที่ฉันกดหลังจากกด Alt ค้างไว้ และแอปคิดว่าฉันกด Alt จากนั้นฉันไม่ได้กดอะไรเลย ปล่อย Alt แล้วมันก็ย้ายโฟกัสของฉันไปยังเมนูของมันอย่างราบรื่น ซึ่งดูสมเหตุสมผลสำหรับมัน

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

การแก้ปัญหาการสลับโดยใช้ Alt+Shift ใน Linuxในแอปพลิเคชันอิเล็กตรอน

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

แต่เนื่องจากปัญหานี้จำเป็นต้องได้รับการแก้ไข จึงทำให้ความคิดหนึ่งผุดขึ้นมา:

  1. ในการตั้งค่า ให้ปิดใช้งานปุ่มลัดสำหรับการเปลี่ยนรูปแบบแป้นพิมพ์ (ยกเลิกการเลือกช่องทำเครื่องหมายทั้งหมดในส่วน "เปลี่ยนไปใช้รูปแบบอื่น")
  2. สร้างปุ่มลัดของตัวเองเพื่อสลับเค้าโครงแป้นพิมพ์

คำอธิบายของโซลูชัน

ขั้นแรก เรามาติดตั้ง Xbindkeys กันก่อน โปรแกรมที่ช่วยให้คุณกำหนดคำสั่งให้กับปุ่มต่างๆ ได้ น่าเสียดายที่เครื่องมือในตัวของโปรแกรมไม่สามารถสร้างปุ่มลัดสำหรับชุดปุ่มอย่าง Alt+Shift ได้โดยใช้ส่วนติดต่อผู้ใช้ที่สวยงาม คุณสามารถสร้างปุ่มลัดสำหรับ Alt+S, Alt+1, Alt+Shift+Y และอื่นๆ ได้ แต่ก็ไม่เหมาะสมกับวัตถุประสงค์ของเรา

sudo dnf install xbindkeysrc

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

xbindkeys -d > ~/.xbindkeysrc

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


# Examples of commands:
"xbindkeys_show"
  control+shift + q
# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

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

หากต้องการรับรหัส คุณต้องใช้คำสั่ง:

xbindkeys -k

หน้าต่าง "X" ขนาดเล็กจะเปิดขึ้น คุณควรจะกดปุ่มเฉพาะเมื่อหน้าต่างนี้ถูกโฟกัสอยู่เท่านั้น! เมื่อนั้นคุณจะเห็นบางอย่างเช่นนี้ในเทอร์มินัล:


[podkmax@localhost ~]$ xbindkeys -k
Press combination of keys or/and click under the window.
You can use one of the two lines after "NoCommand"
in $HOME/.xbindkeysrc to bind a key.
"(Scheme function)"
    m:0x4 + c:39
    Control + s

ในกรณีของฉัน การกดปุ่ม Alt+Shift จะมีลักษณะดังนี้:

m:0x8 + c:50

ตอนนี้ผมต้องทำให้การกดปุ่มผสมนี้เป็นการเปลี่ยนรูปแบบแป้นพิมพ์จริงๆ ผมเจอคำสั่งที่ใช้ได้เพียงคำสั่งเดียวสำหรับการระบุรูปแบบแป้นพิมพ์:


setxkbmap ru
setxkbmap us

อย่างที่คุณเห็นจากตัวอย่าง มันสามารถเปิดใช้งานได้เพียงเลย์เอาต์ใดเลย์เอาต์หนึ่งเท่านั้น ดังนั้นวิธีอื่นที่นึกออกก็คือการเขียนสคริปต์


vim ~/layout.sh
#!/bin/bash
LAYOUT=$(setxkbmap -print | awk -F + '/xkb_symbols/ {print $2}')
if [ "$LAYOUT" == "ru" ]
        then `/usr/bin/setxkbmap us`
        else `/usr/bin/setxkbmap ru`
fi

หากไฟล์ .xbindkeysrc และ layout.sh อยู่ในไดเร็กทอรีเดียวกัน รูปแบบสุดท้ายของไฟล์ .xbindkeysrc จะมีลักษณะดังนี้:


# Examples of commands:

"xbindkeys_show"
  control+shift + q

# set directly keycode (here control + f with my keyboard)
"xterm"
  c:41 + m:0x4

# specify a mouse button
"xterm"
  control + b:2
#А вот то, что добавил я
"./layout.sh"
  m:0x8 + c:50

หลังจากนั้นเราจะทำการเปลี่ยนแปลง:


xbindkeys -p

และคุณสามารถตรวจสอบได้ อย่าลืมปิดใช้งานตัวเลือกการสลับเค้าโครงใดๆ ในการตั้งค่าเริ่มต้น

ทั้งหมด

เพื่อนร่วมงานทุกท่าน ผมหวังว่าบทความนี้จะช่วยให้ใครบางคนแก้ปัญหาที่น่าหงุดหงิดได้อย่างรวดเร็ว ส่วนตัวผมเองใช้เวลาทั้งสุดสัปดาห์พยายามหาทางแก้ไขปัญหานี้ เพื่อจะได้ไม่ต้องกังวลมันอีกในเวลางาน ผมเขียนบทความนี้ขึ้นมาเพื่อช่วยประหยัดเวลาและความหงุดหงิดให้กับคนอื่นๆ หลายคนอาจใช้วิธีอื่นในการสลับรูปแบบแป้นพิมพ์และไม่เข้าใจปัญหา ส่วนตัวผมชอบใช้ Alt+Shift และผมต้องการให้มันทำงานแบบนั้น ถ้าคุณมีความคิดเห็นเหมือนผมและกำลังประสบปัญหานี้ บทความนี้ควรจะช่วยคุณได้

ที่มา: will.com

ซื้อโฮสติ้งที่เชื่อถือได้สำหรับไซต์ที่มีการป้องกัน DDoS เซิร์ฟเวอร์ VPS VDS 🔥 ซื้อบริการเว็บโฮสติ้งที่เชื่อถือได้ พร้อมระบบป้องกัน DDoS และเซิร์ฟเวอร์ VPS/VDS | ProHoster