Wie ordne ich eine Taste neu zu, wenn sie zweimal gedrückt wird?

7

Einige meiner Tastaturtasten sind weg, daher versuche ich, die anderen Tasten, die noch funktionieren, zu programmieren, um die beschädigten Tasten zu drücken, wenn ich sie zweimal drücke. Ist das möglich? Gibt es ein Programm, das mir dabei helfen kann?

Ich möchte die Taste neu zuordnen J, um 'm' zu geben, wenn ich sie zweimal drücke.

NB: Mein Laptop ist ein MacBook Pro 13 "Unibody Mid 2012

demashqi
quelle
Kurz gesagt, nein. Vielleicht können Sie m eine Tastenkombination zuordnen.
J-Geld
1
Was ist Ihr Fenstermanager? Wenn Sie nicht wissen, was ist Ihre Distribution?
Jacob Vlijm

Antworten:

6

Legen Sie Aliase für Zeichen, Zeichenfolgen oder vollständige Zeilen fest

WENN Sie nicht wayland verwenden (Ubuntu 17.10, getestet auf Ubuntu Budgie 18.04, aber Ubuntu Gnome 18.04 sollte auch in Ordnung sein), hilft Ihnen das folgende Snippet.

Wie es in der Praxis funktioniert

  • Drücken Sie Ctrl+ J(oder eine andere Verknüpfung , die Sie festgelegt)
  • Ein Feld wird angezeigt

    Geben Sie hier die Bildbeschreibung ein

  • Geben Sie Ihren "Alias" ein (z. B. jj für m), das Ergebnis zeigt (m), und der Text wird sofort an der Cursorposition (oder, wenn Sie es vorziehen, nach dem Tippen Ctrl) eingefügt .

Dieses Skript bietet eine einzige Lösung zum Festlegen von Aliasen für ein Zeichen, eine Zeichenfolge oder sogar vollständige Zeilen. Legen Sie einfach den "Alias" in den Zeilen fest:

replacements = [
    ["jj", "m"],
    ["aa", "q"],
    ["zz", "e"],
    ["mb", "monkey eats banana"],
]

Im letzteren Fall wird durch Eingabe von "mb" "Affe isst Banane" eingefügt:

Geben Sie hier die Bildbeschreibung ein

Einrichten

  1. Sie müssen einige Abhängigkeiten erfüllen:

    • pyautogui:

      pip3 install pyautogui
    • Pyperclip:

      sudo apt install python3-pyperclip xsel xclip
    • python3-xlib

      sudo apt install python3-xlib

    Melden Sie sich ab und wieder an.

  2. Kopieren Sie das folgende Skript in eine leere Datei und speichern Sie es unter replace_keys.py

    #!/usr/bin/env python3
    import gi
    gi.require_version("Gtk", "3.0")
    gi.require_version("Wnck", "3.0")
    from gi.repository import Gtk, Gdk, Wnck
    import subprocess
    import pyperclip
    import pyautogui
    import time
    
    
    """
    depends on
    - pyautogui:
      pip3 install pyautogui
    - pyperclip:
      sudo apt install python3-pyperclip xsel xclip
    """
    
    
    act_on_firstmatch = False
    
    
    replacements = [
        ["jj", "m"],
        ["aa", "q"],
        ["zz", "e"],
        ["mb", "monkey eats banana"],
    ]
    
    
    class KeyWin(Gtk.Window):
    
        def __init__(self):
    
            self.screendata = Wnck.Screen.get_default()
            self.screendata.force_update()
            self.curr_subject = self.screendata.get_active_window().get_xid()
            self.currmatch = ""
            Gtk.Window.__init__(self)
            maingrid = Gtk.Grid()
            self.add(maingrid)
            self.set_decorated(False)
            self.set_position(Gtk.WindowPosition.CENTER)
            self.connect("key-release-event", self.check_key)
            self.keyentry = Gtk.Entry()
            self.keyentry.connect("changed", self.update_current)
            self.label = Gtk.Label("")
            self.label.set_width_chars(10)
            maingrid.attach(self.keyentry, 0, 0, 1, 1)
            maingrid.attach(self.label, 1, 0, 1, 1)
            self.show_all()
            self.connect("destroy", Gtk.main_quit)
            Gtk.main()
    
        def update_current(self, widget):
            curr = self.keyentry.get_text()
            self.currmatch = ""
            for s in replacements:
                if curr == s[0]:
                    self.currmatch = s[1]
                    if act_on_firstmatch:
                        self.replace()
            self.label.set_width_chars(len(self.currmatch) + 4)
            self.label.set_text(self.currmatch)
    
    
        def replace(self, *args):
            pyperclip.copy(self.currmatch)
    
            subprocess.call(["wmctrl", "-ia", str(self.curr_subject)])
            Gtk.main_quit()
    
        def check_key(self, button, val):
            typed = Gdk.keyval_name(val.keyval)
            if typed == "Control_L":
                self.replace()
    
    KeyWin()
    time.sleep(0.05)
    pyautogui.hotkey('ctrl', 'v')
  3. Richten Sie Ihre Aliasse (BEHALTEN SIE DIE EINZIEHUNG!) Im Abschnitt ein:

    replacements = [
        ["jj", "m"],
        ["aa", "q"],
        ["zz", "e"],
        ["mb", "monkey eats banana"],
    ]
  4. Wenn Sie möchten, ändern Sie

    act_on_firstmatch = False

    in

    act_on_firstmatch = True

    wenn Sie sofort einfügen möchten, ohne zu tippen Ctrl

  5. Richten Sie eine Tastenkombination mit Ctrl als Modifikator ein . Ich habe in meinem Test Ctrl+ verwendet J, um das Skript mit dem folgenden Befehl auszuführen:

    python3 /path/to/replace_keys.py

Und du bist fertig!

Jacob Vlijm
quelle
Versteht dieses Skript das Zuordnen jjzu mund JJzu M?
αғsнιη
1
@ αғsнιη String-Vergleich unterscheidet zwischen Groß- und Kleinschreibung, also ja, das tut es.
Jacob Vlijm
Für eine solche Lösung (einschließlich meiner Antwort) benötigen Sie natürlich eine funktionierende Tastatur, um den Code zu schreiben. Es wäre auch möglich, die fehlenden Schlüssel anhand ihrer numerischen Werte mit Escape-Sequenzen in der jeweils verwendeten Codierungssprache anzugeben - vorausgesetzt, diese Schlüssel funktionieren.
Joe
0

Ich habe zwei Maschinen, die dieses Problem mit abgenutzten / kaputten Schlüsseln haben. Ich habe zwei Lösungen gefunden:

  1. Geben Sie zehn Dollar für eine WiFi-USB-Tastatur aus (Logitech hat eine gute). Im Allgemeinen wird das BIOS es sehen und vor dem Betriebssystem abrufen.

  2. Laden Sie eine ferngesteuerte Software (RealVNC ist für kleine Setups kostenlos und für verschiedene Betriebssysteme geeignet).

Beide funktionieren je nach benötigtem Zugriff.

T'Pol Surak
quelle
Was macht die Fernbedienungssoftware?
Wjandrea
Realvnc steuert lediglich Tastatur, Maus und Bildschirm fern, sodass ich einfache Wartungsarbeiten von meinem Schreibtisch aus über das Netzwerk durchführen kann. Ich muss mir keine Sorgen um eine kaputte Tastatur, Maus oder einen kaputten Monitor machen, da ich die an meinem Schreibtisch benutze. Linux hat eine Version davon, aber ich muss von einem Betriebssystem zu einem anderen wechseln und das funktioniert für mich.
T'Pol Surak
0

Obwohl die Antwort von @jacobvlijm spezifischer ist, besteht eine andere Alternative darin, ein Programm wie AutoKey zu verwenden . Es macht viele Dinge, um Ihren Desktop zu automatisieren, indem Tastatur- und Mauseingaben aus Triggerphrasen und Hotkey-Drücken generiert werden.

Insbesondere können Sie für jede der defekten Tasten eine Phrase definieren und diese durch eine Triggerphrase auslösen lassen, bei der es sich um eine beliebige Kombination von funktionierenden Tastendrücken handelt, die bei Ihrer tatsächlichen Eingabe wahrscheinlich nicht auftreten. Diese Phrasen können so eingestellt werden, dass sie sofort innerhalb eines Wortes ausgelöst werden.

Es gibt auch eine Option, mit der der gerade eingegebene Triggertext wieder eingefügt wird, wenn Sie sofort die Rücktaste drücken, falls Sie die Triggerzeichen jemals so benötigen, wie sie sind.

All dies kann über die AutoKey-GUI-Oberfläche konfiguriert werden, ohne dass eine tatsächliche Codierung erforderlich ist.

Für komplexere Anforderungen kann AutoKey vollständige Python-Skripte ausführen, die durch Phrasen oder Hotkeys ausgelöst werden, die nur durch die Vorstellungskraft und das Wissen des Benutzers über Python eingeschränkt sind.

Joe
quelle