web-dev-qa-db-fra.com

Comment remapper une touche lorsqu'elle est enfoncée deux fois?

Certaines de mes touches du clavier ont disparu, j'essaie donc de programmer les autres touches qui fonctionnent encore pour appuyer sur les touches endommagées lorsque je les appuie deux fois. Est-ce possible? Y at-il un programme qui peut m'aider à faire cela?

Je veux remapper la clé J donner 'm' quand j'appuie deux fois dessus.

NB: Mon ordinateur portable est un MacBook Pro 13 "Unibody Mi 2012

7
demashqi

Définir des alias pour des caractères, des chaînes ou des lignes complètes

SAUF SI vous utilisez wayland (Ubuntu 17.10, testé sur Ubuntu Budgie 18.04, mais Ubuntu Gnome Le 18.04 devrait également convenir), l’extrait ci-dessous vous aidera.

Comment ça marche en pratique

  • Presse Ctrl + J (ou tout autre raccourci que vous avez défini)
  • Une boîte apparaît

    enter image description here

  • Tapez votre "alias" (par exemple, jj pour m), le résultat indique (m) et le texte sera immédiatement inséré à la position du curseur (ou, si vous préférez, après avoir appuyé sur Ctrl).

Ce script fournit une solution unique pour définir des aliasses pour un caractère, une chaîne ou même des lignes complètes, il suffit de définir le "alias" dans les lignes:

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

Dans ce dernier cas, taper "mb" collera "le singe mange la banane":

enter image description here

Mise en place

  1. Vous devez satisfaire quelques dépendances:

    • pyautogui:

      pip3 install pyautogui
      
    • pyperclip:

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

      Sudo apt install python3-xlib
      

    Déconnexion et retour dans.

  2. Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom 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. Configurez vos aliasses (GARDEZ L’INDENTATION!) Dans la section:

    replacements = [
        ["jj", "m"],
        ["aa", "q"],
        ["zz", "e"],
        ["mb", "monkey eats banana"],
    ]
    
  4. Si tu veux, change

    act_on_firstmatch = False
    

    dans

    act_on_firstmatch = True
    

    si vous aimez insérer immédiatement sans tapoter Ctrl

  5. Mettre en place une touche de raccourci avec  Ctrl  en tant que modificateur . j'ai utilisé Ctrl + J dans mon test pour exécuter le script par la commande:

    python3 /path/to/replace_keys.py
    

Et tu as fini!

6
Jacob Vlijm

J'ai deux machines qui ont ce problème de clés usées/cassées. J'ai trouvé deux solutions:

  1. Dépensez dix dollars pour un clavier USB WiFi (Logitech en a un bon). Généralement, le BIOS le verra et le récupérera avant le système d'exploitation.

  2. Chargez un logiciel de contrôle à distance (RealVNC est gratuit pour les petites installations et traverse différents systèmes d’exploitation)

Les deux fonctionnent en fonction de l'accès requis.

0
T'Pol Surak

Bien que la réponse de @jacobvlijm soit plus spécifique, une autre solution consiste à utiliser un programme tel que AutoKey . Automatiser votre bureau en générant des entrées au clavier et à la souris à partir de phrases de déclenchement et de touches de raccourci permet de nombreuses tâches.

En particulier, vous pouvez définir une phrase pour chacune des clés brisées et la faire déclencher par une phrase de déclenchement qui consiste en une combinaison de pressions de touches qui ne risquent pas de se produire lors de la frappe. Ces expressions peuvent être définies pour se déclencher immédiatement à partir d'un mot.

Il existe également une option qui réintègre le texte du déclencheur si vous appuyez immédiatement sur la touche de retour arrière si vous avez besoin des caractères du déclencheur tels quels.

Tout cela peut être configuré à l'aide de l'interface graphique AutoKey sans nécessiter de codage.

Pour les exigences plus complexes, AutoKey peut exécuter des scripts complets Python déclenchés par des phrases ou des touches de raccourci uniquement limitées par l'imagination et la connaissance de Python de l'utilisateur.

0
Joe