Wenn ich nur einen auf eine unbewohnte Insel bringen könnte, würde ich [keyhac] mitbringen (https://sites.google.com/site/craftware/keyhac-ja).
Bearbeiten Sie die Funktion configure ()
in config.py
im selben Verzeichnis wie exe.
config.py
import sys
import os
import datetime
import re #hinzufügen
import time #hinzufügen
import urllib.parse #hinzufügen
import pyauto
from keyhac import *
def configure(keymap):
#Bearbeiten Sie mit vscode von scoop (oder Notepad, wenn nicht)
EDITOR_PATH = r"C:\Users\{}\scoop\apps\vscode\current\Code.exe".format(os.environ.get("USERNAME"))
if not os.path.exists(EDITOR_PATH):
EDITOR_PATH = "notepad.exe"
keymap.editor = EDITOR_PATH
# theme
keymap.setFont("HackGen Console", 16)
keymap.setTheme("black")
#Legen Sie den Konvertierungs- / Nichtkonvertierungsschlüssel als Benutzermodifikator fest
keymap.replaceKey("(29)", 235) #Sei nicht konvertiert (29) 235
keymap.defineModifier(235, "User0") #Verwenden Sie keine Konvertierung als U0-qualifizierten Schlüssel
keymap.replaceKey("(28)", 236) #Die Umwandlung (28) sei 236
keymap.defineModifier(236, "User1") #Verwenden Sie die Transformation als U1-qualifizierten Schlüssel
#Clip Clip-Verlauf aktiviert
keymap.clipboard_history.enableHook(True)
#Maximale Größe des Verlaufs
keymap.clipboard_history.maxnum = 200
keymap.clipboard_history.quota = 10*1024*1024
#Strg aus der Geschichte+Symbol beim Einfügen eines Zitats mit Enter
keymap.quote_mark = "> "
Ich mag die Schriftart HackGen.
Im Folgenden werden alle Anpassungsdetails in configure ()
geschrieben. Bitte schließen Sie die Augen, dass es keine Regeln für Variablennamen und Funktionsnamen gibt.
config.py
#Schlüsselzuordnung, die immer gültig ist
keymap_global = keymap.defineWindowKeymap()
for modifier in ("", "S-", "C-", "A-", "C-S-", "C-A-", "S-A-", "C-A-S-"):
#Rauf runter links rechts
keymap_global[modifier + "U0-H"] = modifier + "Left"
keymap_global[modifier + "U0-J"] = modifier + "Down"
keymap_global[modifier + "U0-K"] = modifier + "Up"
keymap_global[modifier + "U0-L"] = modifier + "Right"
# Home / End
keymap_global[modifier + "U0-A"] = modifier + "Home"
keymap_global[modifier + "U0-E"] = modifier + "End"
# Enter
keymap_global[modifier + "U0-Space"] = modifier + "Enter"
#Ignorieren Sie den Schlüssel "Katakana Hiragana Rome" gründlich
keymap_global["D-" + modifier + "(240)"] = lambda: None
keymap_global["U-" + modifier + "(240)"] = lambda: None
keymap_global["D-" + modifier + "(241)"] = lambda: None
keymap_global["U-" + modifier + "(241)"] = lambda: None
keymap_global["D-" + modifier + "(242)"] = lambda: None
keymap_global["U-" + modifier + "(242)"] = lambda: None
# [B]ackSpace / [D]elete
keymap_global["U0-D"] = "Delete"
keymap_global["U0-B"] = "Back"
keymap_global["C-U0-D"] = "C-Delete"
keymap_global["C-U0-B"] = "C-Back"
keymap_global["S-U0-B"] = "S-Home", "C-X" #Schnitt zum Anfang
keymap_global["S-U0-D"] = "S-End", "C-X" #Bis zum Ende schneiden
keymap_global["C-S-U0-B"] = "Home", "Back", "End" #Mit vorheriger Zeile verketten
keymap_global["C-S-U0-D"] = "End", "Delete", "End" #Mit der nächsten Zeile verketten
Unter diese Site erfahren Sie, wie Sie die Cursorbewegung gemeinsam mit den Modifizierertasten definieren. In Autohotkey können Sie den Modifikatorschlüssel transparent machen, indem Sie "{blind}" hinzufügen.
IME On / Off wird durch Konvertierung + J und keine Konvertierung + F gesteuert. Wenn ich an Japanisch und Ausländisch dachte, war es nützlich, weil der Schlüssel einen Vorsprung für die Ausgangsposition hatte.
config.py
# [J]apanese / [F]oreign
keymap_global["U1-J"] = lambda: keymap.getWindow().setImeStatus(1)
keymap_global["U0-F"] = lambda: keymap.getWindow().setImeStatus(0)
config.py
#1 Zeilenauswahl
keymap_global["U1-A"] = "End", "S-Home"
#Ursprüngliche Umstellung
keymap_global["U0-R"] = "LWin-Slash"
#Die, die ich auf Emacs gesehen habe
keymap_global["LC-H"] = "Back"
#Konzentrieren Sie sich auf die Taskleiste
keymap_global["C-U0-W"] = "W-T"
#Fügen Sie eine Zeile nach oben und unten ein
keymap_global["U0-I"] = "End", "Enter"
keymap_global["S-U0-I"] = "Home", "Enter", "Up"
# escape
keymap_global["O-(235)"] = "Esc"
keymap_global["U0-X"] = "Esc"
#Liste der geöffneten Fenster
keymap_global["U0-W"] = "LCtrl-LAlt-Tab", "U-LAlt" #Erhöhen Sie Alt explizit, um ein Niederhalten zu vermeiden
#Bestätigt durch alphanumerische Zeichen
keymap_global["U1-N"] = "F10", "(243)"
keymap_global["S-U1-N"] = "F10", "Enter"
#Kontextmenü
keymap_global["U0-C"] = "S-F10"
#umbenennen
keymap_global["U0-N"] = "F2", "Right"
keymap_global["S-U0-N"] = "F2", "C-Home"
keymap_global["C-U0-N"] = "F2"
Erstellen Sie die folgenden Funktionen, um häufig verwendete Hotkey-Funktionen zu verwenden.
config.py
def delay(sec = 0.05):
time.sleep(sec)
def get_clippedText():
return (getClipboardText() or "")
def paste_string(s):
setClipboardText(s)
delay()
keymap.InputKeyCommand("C-V")()
def copy_string(sec = 0.05):
keymap.InputKeyCommand("C-C")()
delay(sec)
return get_clippedText()
def send_input(ime_mode, keys, sleep = 0.01):
if ime_mode is not None:
if keymap.getWindow().getImeStatus() != ime_mode:
keymap.InputKeyCommand("(243)")()
for key in keys:
delay(sleep)
try:
keymap.InputKeyCommand(key)()
except:
keymap.InputTextCommand(key)()
keyhac behandelt die Schlüsseleingabe "InputKeyCommand ()" und die Zeichenfolgeneingabe "InputTextCommand ()" separat. Ich habe die letzte Funktion "send_input ()" erstellt, um Eingabespezifikationen wie "Send, ABC {Enter}" in Autohotkey zu implementieren. IME kann auch angegeben werden ((243)
ist ein Schlüssel mit halber Breite / voller Breite).
Verwenden Sie das obige "send_input ()", um den Aufwand für die Eingabe von Zeichen so gering wie möglich zu halten.
config.py
#Geben Sie Klammern ein und bewegen Sie den Cursor dazwischen
def wrap_with_brackets(pair, after_ime_mode):
keys = [pair, "Left"]
if after_ime_mode == 1:
keys.append("(243)")
return lambda: send_input(0, keys, 0.05)
brackets = [
("U0-2" , '""' , 0),
("U0-7" , "''" , 0),
("U0-8" , "\u300E\u300F", 1), # WHITE CORNER BRACKET 『』
("U0-9" , "\u3010\u3011", 1), # BLACK LENTICULAR BRACKET 【】
("U0-AtMark" , "``" , 0),
("U1-2" , "\u201C\u201D", 1), # DOUBLE QUOTATION MARK “”
("U1-7" , "\u3014\u3015", 1), # TORTOISE SHELL BRACKET 〔〕
("U1-8" , "\uFF08\uFF09", 1), # FULLWIDTH PARENTHESIS ()
("U1-9" , "()" , 0),
("U0-OpenBracket" , "\u300c\u300d", 1), # CORNER BRACKET 「」
("U1-OpenBracket" , "\uFF3B\uFF3D", 1), # FULLWIDTH SQUARE BRACKET []
("U0-CloseBracket" , "[]" , 0),
("U1-CloseBracket" , "{}" , 0),
("C-U0-Comma" , "<>" , 0),
("C-U0-Period" , "</>" , 0),
("U0-Y" , "\u3008\u3009", 1), # Angle Bracket 〈〉
("U1-Y" , "\u300A\u300B", 1), # Double Angle Bracket 《》
]
for brc in brackets:
keymap_global[brc[0]] = wrap_with_brackets(brc[1], brc[2])
Das Angeben spezieller Klammern mit Unicode-Codepunkten ist eine Frage des Erscheinungsbilds im Editor. Es gibt kein Problem mit direktem "send_input (0, [" U0-8 "," "", "(243)"]) ".
Da es selten vorkommt, dass Satzzeichen, Lesepunkte, Doppelpunkte usw. mit Schlüsseln eingegeben und dann weiter konvertiert werden, können sie direkt eingegeben werden.
Der Mechanismus ist einfach. Wenn Sie sich den IME-Status zum Zeitpunkt der Eingabe ansehen und dieser aktiviert ist, drücken Sie zusätzlich zusätzlich Strg + M (Verknüpfung zur Bestätigung in den meisten IME). IME kann automatisch deaktiviert werden, nachdem Zeichen wie "@" eingegeben wurden, die auf Japanisch selten eingegeben werden.
Es gibt einen Grund, warum die Eingabetaste nicht bestätigt wird, und es ist ein Gerät, das verhindert, dass versehentlich die Eingabetaste gedrückt wird, wenn es sich bereits im direkten Eingabezustand befindet, z. B. ein Passworteingabeformular. Beachten Sie jedoch, dass einigen Browsern eine Funktion zugewiesen ist, die Strg + M zugewiesen ist (Stummschaltung der Funktion in Firefox). Bei Eingaben von Google Japan bestätigt das erneute Drücken der Taste für die halbe / volle Breite (243) den Eingabeinhalt zu diesem Zeitpunkt. Diese Methode wird jedoch unter Berücksichtigung der Vielseitigkeit angewendet.
config.py
#Geben Sie direkt ein, unabhängig davon, ob IME aktiviert oder deaktiviert ist
def direct_input(key, turnoff_ime_later = False):
key_list = [key]
if keymap.getWindow().getImeStatus() == 1:
key_list.append("C-M")
if turnoff_ime_later:
key_list.append("(243)")
send_input(None, key_list)
for key in [
("AtMark" , True),
("Caret" , False),
("CloseBracket", False),
("Colon" , False),
("Comma" , False),
("LS-AtMark" , True),
("LS-Caret" , False),
("LS-Colon" , False),
("LS-Comma" , False),
("LS-Minus" , False),
("LS-Period" , False),
("LS-SemiColon", False),
("LS-Slash" , False),
("LS-Yen" , True),
("OpenBracket" , False),
("Period" , False),
("SemiColon" , False),
("Slash" , False),
("Yen" , True),
]:
def _wrapper(k, i):
return lambda: direct_input(k, i)
keymap_global[key[0]] = _wrapper(key[0], key[1])
#Linksverschiebung+Symbol mit Zifferntasten
for n in "123456789":
def _wrapper(k, i):
return lambda: direct_input(k, i)
key = "LS-" + n
if n in ("2", "3", "4"):
keymap_global[key] = _wrapper(key, True)
else:
keymap_global[key] = _wrapper(key, False)
#Deaktivieren Sie nachfolgende IMEs, wenn Sie ein oberes Alphabet mit einer Linksverschiebung eingegeben haben
for alphabet in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
def _wrapper(k):
return lambda: direct_input(k, True)
key = "LS-" + alphabet
keymap_global[key] = _wrapper(key)
Ich habe gelernt, wie man "_wrapper ()" erstellt, wenn man einen Lambda-Ausdruck in einer Schleife unter [dieser Site] zuweist (http://www.freia.jp/taka/blog/737/index.html).
Wir werden es ermöglichen, andere Symbole direkt einzugeben (das Folgende ist ein Beispiel). Da der IME-Status mit dem ersten Argument von "send_input ()" oben angegeben werden kann, wird die Zeichenfolge direkt pseudo eingegeben, indem "IME off-> Zeicheneingabe-> Tastendruck mit halber Breite / voller Breite" ausgewählt wird. ..
config.py
keymap_global["BackSlash"] = lambda: direct_input("S-BackSlash", False)
keymap_global["U0-Minus"] = lambda: send_input(0, ["\u2015\u2015", "(243)"]) # HORIZONTAL BAR * 2
keymap_global["U1-Minus"] = lambda: send_input(0, ["Minus"])
keymap_global["U0-U"] = lambda: send_input(0, "_")
keymap_global["U0-Colon"] = lambda: send_input(0, ["Colon"])
keymap_global["U0-Comma"] = lambda: send_input(0, ["\uFF0C", "(243)"]) # FULLWIDTH COMMA ,
keymap_global["U0-Period"] = lambda: send_input(0, ["Period"])
keymap_global["U0-Slash"] = lambda: send_input(0, ["Slash"])
config.py
def input_date(fmt):
d = datetime.datetime.today()
if fmt == "jp":
date_str = "{}Jahr{}Mond{}Tag".format(d.year, d.month, d.day)
send_input(0, [date_str, "(243)"])
else:
date_str = d.strftime(fmt)
send_input(0, date_str, 0)
keymap_global["U1-D"] = keymap.defineMultiStrokeKeymap("date format: 1=>YYYYMMDD, 2=>YYYY/MM/DD, 3=>YYYY.MM.DD, 4=>YYYY-MM-DD, 5=>JJJJ MM Monat TT Tag")
keymap_global["U1-D"]["1"] = lambda: input_date(r"%Y%m%d")
keymap_global["U1-D"]["2"] = lambda: input_date(r"%Y/%m/%d")
keymap_global["U1-D"]["3"] = lambda: input_date(r"%Y.%m.%d")
keymap_global["U1-D"]["4"] = lambda: input_date(r"%Y-%m-%d")
keymap_global["U1-D"]["5"] = lambda: input_date("jp")
config.py
#Als Klartext einfügen
keymap_global["U0-V"] = lambda: paste_string(get_clippedText())
#Entfernen Sie Leerzeichen und fügen Sie sie als einfachen Text ein
keymap_global["U1-V"] = lambda: paste_string(re.sub(r"\s", "", get_clippedText()))
#IME aus Mutter Wenn Sie tippen, wählen Sie das letzte Wort und IME ein
keymap_global["U1-Space"] = lambda: send_input(1, ["C-S-Left"])
#Öffnen Sie die ausgewählte URL
def open_url():
url = (copy_string()).strip()
if url.startswith("http"):
run_url = url
elif url.startswith("file:///"):
local_path = url.replace("file:///", "")
local_path = urllib.parse.unquote(local_path)
if not os.path.exists(local_path):
return None
run_url = local_path
else:
return None
keymap.ShellExecuteCommand("open", run_url, None, None)()
keymap_global["D-U0-O"] = open_url
#Geben Sie die ausgewählte alphanumerische Halbwertsbreite bei aktiviertem IME erneut ein
def re_input_as_kana():
origin = get_clippedText()
if origin:
setClipboardText("")
selection = copy_string(0.1)
if selection:
key_list = []
noblank = re.sub(r"\s", "", selection)
for k in noblank:
if k == "-":
key_list.append("Minus")
else:
key_list.append(k)
send_input(1, key_list, 0)
if origin:
setClipboardText(origin)
keymap_global["U1-I"] = re_input_as_kana
Wenn Sie die Taste nach keiner Konvertierung + S im ausgewählten Status drücken, wird sie von verschiedenen Suchmaschinen durchsucht (wenn sie nicht korrekt kopiert wird, wird sie von der Zeichenfolge durchsucht, die sich unmittelbar zuvor im Clip befand).
Halten Sie die Umschalttaste gedrückt, während Sie die zweite Taste drücken, um nach Schlüsselwörtern zu suchen, indem Sie jedes Wort in doppelte Anführungszeichen setzen. Halten Sie die Strg-Taste gedrückt, um nach Hiragana zu suchen.
Sofern Sie nicht mit Shift nach Schlüsselwörtern suchen, versuchen wir, Verträge wie Kommas in Leerzeichen umzuwandeln. Daher ist es in Ordnung, wenn die Auswahl der Zeichenfolgen ein wenig angemessen ist.
config.py
def quote_each_word(s):
ret = []
for w in re.split(r"\s+", s):
ret.append('"{}"'.format(w))
return " ".join(ret)
def punctuation_to_space(s):
ret = re.sub(r"[\W_]+", " ", s)
return ret.strip()
def search_on_web(URLstr, mode = None):
selection = copy_string(0.1)
if len(selection) < 200:
single_spaced = (re.sub(r"\s+", " ", selection)).strip()
if mode == "strict":
search_str = quote_each_word(single_spaced)
else:
search_str = punctuation_to_space(single_spaced)
if mode == "without_hira":
search_str = re.sub(r"[Ah-Hmm]+", " ", search_str)
search_str = re.sub(r"\s+", " ", search_str)
search_str = search_str.strip()
encoded = urllib.parse.quote(search_str)
keymap.ShellExecuteCommand("open", URLstr + encoded, None, None)()
engine_url = [
("A", r"https://www.amazon.co.jp/s?i=stripbooks&k="),
("C", r"https://ci.nii.ac.jp/books/search?q="),
("E", r"http://webcatplus.nii.ac.jp/pro/?q="),
("G", r"http://www.google.co.jp/search?q="),
("I", r"https://www.google.com/search?tbm=isch&q="),
("M", r"https://www.google.co.jp/maps/search/"),
("N", r"https://iss.ndl.go.jp/books?any="),
("O", r"https://map.goo.ne.jp/search/q/"),
("S", r"https://scholar.google.co.jp/scholar?q="),
("T", r"https://twitter.com/search?f=live&q="),
("Y", r"http://www.google.co.jp/search?tbs=li:1&q=site%3Ayuhikaku.co.jp%20intitle%3A"),
("W", r"https://www.worldcat.org/search?q="),
]
mode_modifier = [
("" , None),
("S-", "strict"),
("C-", "without_hira"),
]
keymap_global["U0-S"] = keymap.defineMultiStrokeKeymap('S-:quote-each, C-:without-hiragana')
for e in engine_url:
for m in mode_modifier:
search_key = m[0] + e[0]
engine_url = e[1]
mode = m[1]
def _wrapper(url, md):
return lambda: search_on_web(url, md)
keymap_global["U0-S"][search_key] = _wrapper(engine_url, mode)
Aktivieren Sie das Chrome-Fenster ohne Konvertierung + Q, wenn es geöffnet ist, und öffnen Sie eine neue Registerkarte. Andernfalls starten Sie Chrome.
def find_window(arg_exe, arg_class):
wnd = pyauto.Window.getDesktop().getFirstChild()
last_found = None
while wnd:
if wnd.isVisible() and not wnd.getOwner():
if wnd.getClassName() == arg_class and wnd.getProcessName() == arg_exe:
last_found = wnd
wnd = wnd.getNext()
return last_found
def google_search():
if keymap.getWindow().getProcessName() == "chrome.exe":
send_input(1, ["C-T", "C-K"])
else:
wnd = find_window("chrome.exe", "Chrome_WidgetWin_1")
if wnd:
send_input(1, ["C-LWin-1", "C-T", "C-K"], 0.05)
else:
send_input(1, ["LWin-1"])
keymap_global["U0-Q"] = google_search
Als ich versuchte, das Fenster mit dem bereitgestellten "ActivateWindowCommand ()" zu aktivieren, trat das Phänomen, dass "die Taskleiste nur blinkt und nicht in den Vordergrund tritt", mit einer Häufigkeit auf, die nicht ignoriert werden kann. Rufen Sie daher das in der Taskleiste registrierte Chrom mit der Win + -Nummer auf. Ich mache es. (Wenn das Fenster vom Programm gewaltsam und sicher nach vorne gebracht werden kann, kann es für böswillige Viren verwendet werden, sodass es aus Sicherheitsgründen unvermeidbar ist.)
Es gibt auch eine Methode namens "pyauto.Window.find ()", die das Fenster identifiziert, aber nur der Klassenname kann als Argument angegeben werden. Chromium-Apps wie Slack und Vscode mit der Fensterklasse "Chrome_WidgetWin_1" können nicht anhand von Chrome identifiziert werden. Daher habe ich versucht, das geöffnete Fenster zu durchlaufen und zu suchen.
Das Hinzufügen eines Kommentars zum Inhalt des Alltags hat es ziemlich lang gemacht ...
Darüber hinaus passe ich verschiedene Dinge an, z. B. das Verarbeiten und Einfügen der Zeichenfolge in der Zwischenablage, das Aktivieren eines bestimmten Fensters, das Ändern der Fenstergröße usw., aber wenn es eine Antwort gibt (und diese für immer anschwillt) Ich werde es in einem anderen Artikel zusammenfassen (wenn ich motiviert bin).
Recommended Posts