Επίλυση του προβλήματος με την εναλλαγή με χρήση alt+shift σε Linux, σε εφαρμογές Electron

Γεια σας συνάδελφοι!

Θέλω να μοιραστώ τη λύση μου στο πρόβλημα που υποδεικνύεται στον τίτλο. Με ενέπνευσε να γράψω αυτό το άρθρο ένας συνάδελφος brnovk, ο οποίος δεν ήταν τεμπέλης και πρόσφερε μια μερική (για μένα) λύση στο πρόβλημα. Έφτιαξα το δικό μου «δεκανίκι» που με βοήθησε. Μοιράζομαι μαζί σας.

Περιγραφή του προβλήματος

Χρησιμοποίησα το Ubuntu 18.04 για εργασία και πρόσφατα παρατήρησα ότι όταν αλλάζω διατάξεις χρησιμοποιώντας alt+shift σε εφαρμογές όπως το Visual Studio Code, το Skype, το Slack και άλλες που δημιουργήθηκαν με χρήση Electron, παρουσιάζεται το ακόλουθο πρόβλημα: η εστίαση από το πεδίο εισαγωγής πηγαίνει στην κορυφή πάνελ του παραθύρου (μενού). Για άλλους λόγους, μετακόμισα στο Fedora + KDE και συνειδητοποίησα ότι το πρόβλημα δεν είχε λυθεί. Ψάχνοντας για λύση, βρήκα ένα υπέροχο άρθρο Πώς να διορθώσετε μόνοι σας το Skype. Ευχαριστώ πολύ σύντροφε brnovk, ο οποίος μίλησε αναλυτικά για το πρόβλημα και μοιράστηκε τη μέθοδο επίλυσής του. Αλλά η μέθοδος που υποδεικνύεται στο άρθρο έλυσε το πρόβλημα με μία μόνο εφαρμογή, το Skype. Για μένα, ήταν επίσης κρίσιμο να κατανοήσω τον κώδικα του Visual Studio, επειδή η σύνταξη μηνυμάτων με μενού άλμα, αν και ενοχλητικό, δεν είναι τόσο πολύ αν ασχολείσαι με την ανάπτυξη. Επιπλέον, ένας συνάδελφος πρότεινε μια λύση στην οποία το μενού της εφαρμογής εξαφανίζεται εντελώς και δεν θα ήθελα πραγματικά να χάσω το μενού στο VS Code.

Προσπάθησε να καταλάβει τι φταίει

Έτσι, αποφάσισα να αφιερώσω χρόνο για να καταλάβω τι συνέβαινε. Τώρα θα περιγράψω εν συντομία το μονοπάτι που πήρα, ίσως κάποιος πιο γνώστης σε αυτό το θέμα θα βοηθήσει να εξηγήσει τις δυσκολίες που αντιμετώπισα.

Άνοιξα το Visual Studio Code και άρχισα να πατάω διαφορετικούς συνδυασμούς Alt+<%something%> για να δω πώς ανταποκρίνεται η εφαρμογή. Σχεδόν σε όλες τις περιπτώσεις, όλοι οι συνδυασμοί εκτός από το Alt+Shift λειτούργησαν χωρίς να χάσουν την εστίαση. Φαινόταν ότι κάποιος έτρωγε το πατημένο Shift, το οποίο ακολούθησε αφού κρατούσα πατημένο το Alt, και η εφαρμογή σκέφτηκε ότι πάτησα το Alt, μετά δεν πάτησα τίποτα, κυκλοφόρησε το Alt και με χαρά έβαλε την εστίασή μου στο μενού της, κάτι που φαινόταν πολύ λογικό. το.

Άνοιξα τις ρυθμίσεις για την εναλλαγή διατάξεων πληκτρολογίου (ξέρετε, αυτή τη μεγάλη λίστα με πλαίσια ελέγχου και κάθε είδους ρυθμίσεις για πλήκτρα) και την έθεσα να αλλάζει διάταξη χρησιμοποιώντας το κουμπί Alt, χωρίς επιπλέον κλικ.

Επίλυση του προβλήματος με την εναλλαγή με χρήση alt+shift σε Linux, σε εφαρμογές Electron

Μετά από αυτό, το Alt+Tab για εναλλαγή των παραθύρων σταμάτησε να λειτουργεί. Μόνο το Tab λειτούργησε, δηλαδή κάποιος μου «έφαγε» πάλι το Alt. Δεν υπήρχαν ερωτήσεις σχετικά με το ποιος ήταν αυτός ο «κάποιος», αλλά δεν είχα ιδέα τι θα μπορούσα να κάνω μαζί του.

Αλλά επειδή το πρόβλημα έπρεπε να λυθεί με κάποιο τρόπο, τότε ήρθε στο μυαλό μια λύση:

  1. Στις ρυθμίσεις, απενεργοποιήστε το πλήκτρο πρόσβασης για εναλλαγή διατάξεων πληκτρολογίου (αποεπιλέξτε όλα τα πλαίσια ελέγχου στην ενότητα Εναλλαγή σε άλλη διάταξη).
  2. Δημιουργήστε το δικό σας πλήκτρο πρόσβασης που θα άλλαζε τη διάταξη για μένα

Περιγραφή της λύσης

Αρχικά, ας εγκαταστήσουμε ένα πρόγραμμα που σας επιτρέπει να εκχωρείτε εντολές στα πλήκτρα Xbindkeys. Δυστυχώς, τα τυπικά εργαλεία δεν μου επέτρεψαν να δημιουργήσω ένα πλήκτρο πρόσβασης για έναν συνδυασμό όπως το Alt+Shift μέσω μιας όμορφης διεπαφής. Μπορεί να γίνει για Alt+S, Alt+1, Alt+shift+Y κ.λπ. κ.λπ., αλλά αυτό δεν είναι κατάλληλο για το έργο μας.

sudo dnf install xbindkeysrc

Περισσότερες λεπτομέρειες σχετικά είναι διαθέσιμες στο ArchWiki
Στη συνέχεια, θα δημιουργήσουμε ένα δείγμα αρχείου ρυθμίσεων για το πρόγραμμα. Το δείγμα είναι αρκετά σύντομο, με μερικές εντολές, ακριβώς αυτό που χρειάζεστε για να καταλάβετε πώς να εργαστείτε με αυτό:

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

Θα ανοίξει ένα μικρό παράθυρο "Χ". Χρειάζεται να πατήσετε πλήκτρα μόνο όταν η εστίαση είναι σε αυτό το παράθυρο! Μόνο σε αυτήν την περίπτωση θα δείτε κάτι σαν αυτό στο τερματικό:


[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. Και έτσι θέλω να λειτουργεί. Εάν συμμερίζεστε τη γνώμη μου και αντιμετωπίζετε αυτό το πρόβλημα, αυτό το άρθρο θα σας βοηθήσει.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο