web-dev-qa-db-ja.com

キーが2回押されたときにキーを再マップする方法は?

キーボードのキーの一部がなくなったため、破損しているキーを2回押すと、まだ機能している他のキーをプログラムしようとしています。それは可能ですか?それを行うのに役立つプログラムはありますか?

キーを再マップしたい J 2回押すと「m」が表示されます。

NB:私のラップトップはMacBook Pro 13 "Unibody Mid 2012です

7
demashqi

文字、文字列、または完全な行のエイリアスを設定します

を除き、ウェイランドを使用している場合(Ubuntu 17.10、Ubuntu Budgie 18.04でテスト済みですが、Ubuntu Gnome 18.04でも問題ありません)、以下のスニペットが役立ちます。

実際の仕組み

  • 押す Ctrl + J (または設定した他のショートカット)
  • ボックスが表示されます

    enter image description here

  • 「エイリアス」(例:mのjj)を入力すると、結果に(m)が表示され、テキストがすぐにカーソル位置に挿入されます(または、必要に応じてタップした後) Ctrl)。

このスクリプトは、文字、文字列、または完全な行のエイリアスを設定するための単一のソリューションを提供し、行に「エイリアス」を設定するだけです。

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

後者の場合、「mb」と入力すると「monkey eats banana」が貼り付けられます。

enter image description here

設定中

  1. いくつかの依存関係を満たす必要があります。

    • pyautogui:

      pip3 install pyautogui
      
    • pyperclip:

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

      Sudo apt install python3-xlib
      

    ログアウトして再度ログインします。

  2. 以下のスクリプトを空のファイルにコピーし、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. セクションでエイリアスを設定します(インデントを保持してください!):

    replacements = [
        ["jj", "m"],
        ["aa", "q"],
        ["zz", "e"],
        ["mb", "monkey eats banana"],
    ]
    
  4. 必要に応じて、変更します

    act_on_firstmatch = False
    

    act_on_firstmatch = True
    

    タップせずにすぐに挿入したい場合 Ctrl

  5. ショートカットキーを設定するwith Ctrl 修飾子として。使った Ctrl + J 私のテストでは、コマンドでスクリプトを実行します:

    python3 /path/to/replace_keys.py
    

これで完了です!

6
Jacob Vlijm

キーの磨耗/破損の問題があるマシンが2台あります。私は2つの解決策を見つけました:

  1. WiFi USBキーボードに10ドルを費やしてください(Logitechには良いキーボードがあります)。通常、BIOSはそれを認識し、OSの前に取得します。

  2. リモートコントロールソフトウェアをロードします(RealVNCは小規模なセットアップには無料で、異なるOSを横断します)

どちらも、必要なアクセスに応じて機能します。

0
T'Pol Surak

@jacobvlijmの答えはより具体的ですが、別の選択肢は AutoKey のようなプログラムを使用することです。トリガーフレーズとホットキーの押下からキーボードとマウスの入力を生成することにより、デスクトップを自動化する多くのことを行います。

特に、壊れたキーのそれぞれにフレーズを定義し、実際のタイピングでは発生しそうにない動作中のキー押下の任意の組み合わせであるトリガーフレーズによってトリガーさせることができます。これらのフレーズは、Word内からすぐにトリガーするように設定できます。

トリガー文字がそのまま必要な場合にすぐにバックスペースキーを押すと、入力したばかりのトリガーテキストを戻すオプションもあります。

これらはすべて、実際のコーディングを必要とせずに、AutoKey GUIインターフェースを使用して構成できます。

より複雑な要件の場合、AutoKeyは、ユーザーの想像力とPythonの知識によってのみ制限されるフレーズまたはホットキーによってトリガーされる完全なPythonスクリプトを実行できます。

0
Joe