Skip to content

Instantly share code, notes, and snippets.

@kaigouthro
Created January 11, 2024 07:20
Show Gist options
  • Save kaigouthro/1d2a7576b446886c4ff31ccfd72bbfdf to your computer and use it in GitHub Desktop.
Save kaigouthro/1d2a7576b446886c4ff31ccfd72bbfdf to your computer and use it in GitHub Desktop.
logitech_lua_python.py
class LuaScriptGenerator:
def __init__(self):
self.function_templates = {
"PressAndReleaseKey": "PressAndReleaseKey({key})",
"PressKey": "PressKey({key})",
"ReleaseKey": "ReleaseKey({key})",
"PressAndReleaseMouseButton": "PressAndReleaseMouseButton({button})",
"PressMouseButton": "PressMouseButton({button})",
"ReleaseMouseButton": "ReleaseMouseButton({button})",
# Add more function templates as needed
# AbortMacro()
# ClearLog()
# EnablePrimaryMouseButtonEvent()
# OnEvent()
# GetDate()
# GetKeyState()
# GetMKeyState()
# GetMousePosition()
# GetRunningTime()
# IsKeyLockOn()
# IsModifierPressed()
# IsMouseButtonPressed()
# MoveMouseRelative()
# MoveMouseTo()
# MoveMouseToVirtual()
# MoveMouseWheel()
# OnEvent()
# OutputDebugMessage()
# OutputLCDMessage()
# OutputLogMessage()
# PlayMacro()
# PressAndReleaseKey()
# PressAndReleaseMouseButton()
# PressKey()
# PressMouseButton()
# ReleaseKey()
# ReleaseMouseButton()
# SetBacklightColor(
# SetMKeyState()
# SetMouseDPITable()
# SetMouseDPITableIndex()
# Sleep()
}
self.key_templates = {
"minus": "minus",
"equal": "equal",
"enter": "enter",
"escape": "escape",
"insert": "insert",
"delete": "delete",
"pause": "pause",
"printscreen": "printscreen",
"backspace": "backspace",
"spacebar": "spacebar",
"tab": "tab",
"scrolllock": "scrolllock",
"capslock": "capslock",
"numlock": "numlock",
"appkey": "appkey",
"up": "up",
"down": "down",
"home": "home",
"end": "end",
"lgui": "lgui",
"rgui": "rgui",
"left": "left",
"right": "right",
"pagedown": "pagedown",
"pageup": "pageup",
"lbracket": "lbracket",
"rbracket": "rbracket",
"comma": "comma",
"tilde": "tilde",
"period": "period",
"quote": "quote",
"semicolon": "semicolon",
"slash": "slash",
"backslash": "backslash",
"non_us_slash": "non_us_slash",
"lshift": "lshift",
"rshift": "rshift",
"lctrl": "lctrl",
"rctrl": "rctrl",
"lalt": "lalt",
"ralt": "ralt",
"numenter": "numenter",
"numperiod": "numperiod",
"numplus": "numplus",
"numminus": "numminus",
"numslash": "numslash",
"num0": "num0",
"num1": "num1",
"num2": "num2",
"num3": "num3",
"num4": "num4",
"num5": "num5",
"num6": "num6",
"num7": "num7",
"num8": "num8",
"num9": "num9",
"f1": "f1",
"f2": "f2",
"f3": "f3",
"f4": "f4",
"f5": "f5",
"f6": "f6",
"f7": "f7",
"f8": "f8",
"f9": "f9",
"f10": "f10",
"f11": "f11",
"f12": "f12",
"f13": "f13",
"f14": "f14",
"f15": "f15",
"f16": "f16",
"f17": "f17",
"f18": "f18",
"f19": "f19",
"f20": "f20",
"f21": "f21",
"f22": "f22",
"f23": "f23",
"f24": "f24",
"a": "a",
"b": "b",
"c": "c",
"d": "d",
"e": "e",
"f": "f",
"g": "g",
"h": "h",
"i": "i",
"j": "j",
"k": "k",
"l": "l",
"m": "m",
"n": "n",
"o": "o",
"p": "p",
"q": "q",
"r": "r",
"s": "s",
"t": "t",
"v": "v",
"w": "w",
"x": "x",
"y": "y",
"z": "z",
"1": "1",
"2": "2",
"3": "3",
"4": "4",
"5": "5",
"6": "6",
"7": "7",
"8": "8",
"9": "9",
"0": "0",
# Add more key templates as needed
}
self.button_templates = {
1: "LB",
2: "MB",
3: "RB",
4: "XB1",
5: "XB2",
# Add more button templates as needed
}
self.lua_script = ""
self.lua_functions = {
"AbortMacro": self.abort_macro,
"ClearLog": self.clear_log,
"EnablePrimaryMouseButtonEvent": self.enable_primary_mouse_button_event,
"OnEvent": self.on_event,
"GetDate": self.get_date,
"GetKeyState": self.get_key_state,
"GetMKeyState": self.get_m_key_state,
"GetMousePosition": self.get_mouse_position,
"GetRunningTime": self.get_running_time,
"IsKeyLockOn": self.is_key_lock_on,
"IsModifierPressed": self.is_modifier_pressed,
"IsMouseButtonPressed": self.is_mouse_button_pressed,
"MoveMouseRelative": self.move_mouse_relative,
"MoveMouseTo": self.move_mouse_to,
"MoveMouseToVirtual": self.move_mouse_to_virtual,
"MoveMouseWheel": self.move_mouse_wheel,
"OutputDebugMessage": self.output_debug_message,
"OutputLCDMessage": self.output_lcd_message,
"OutputLogMessage": self.output_log_message,
"PlayMacro": self.play_macro,
"PressAndReleaseKey": self.press_and_release_key,
"PressAndReleaseMouseButton": self.press_and_release_mouse_button,
"PressKey": self.press_key,
"PressMouseButton": self.press_mouse_button,
"ReleaseKey": self.release_key,
"ReleaseMouseButton": self.release_mouse_button,
"SetBacklightColor": self.set_backlight_color,
"SetMKeyState": self.set_m_key_state,
"SetMouseDPITable": self.set_mouse_dpi_table,
"SetMouseDPITableIndex": self.set_mouse_dpi_table_index,
"Sleep": self.sleep,
# Add more Lua functions and their corresponding methods here
}
def press_and_release_key(self, key):
if key in self.key_templates:
key_name = self.key_templates[key]
function = self.function_templates["PressAndReleaseKey"].format(key=key_name)
self.lua_script += function + "\n"
else:
raise ValueError(f"Invalid key: {key}")
def press_key(self, key):
if key in self.key_templates:
key_name = self.key_templates[key]
function = self.function_templates["PressKey"].format(key=key_name)
self.lua_script += function + "\n"
else:
raise ValueError(f"Invalid key: {key}")
def release_key(self, key):
if key in self.key_templates:
key_name = self.key_templates[key]
function = self.function_templates["ReleaseKey"].format(key=key_name)
self.lua_script += function + "\n"
else:
raise ValueError(f"Invalid key: {key}")
def press_and_release_mouse_button(self, button):
if button in self.button_templates:
button_name = self.button_templates[button]
function = self.function_templates["PressAndReleaseMouseButton"].format(button=button_name)
self.lua_script += function + "\n"
else:
raise ValueError(f"Invalid button: {button}")
def press_mouse_button(self, button):
if button in self.button_templates:
button_name = self.button_templates[button]
function = self.function_templates["PressMouseButton"].format(button=button_name)
self.lua_script += function + "\n"
else:
raise ValueError(f"Invalid button: {button}")
def release_mouse_button(self, button):
if button in self.button_templates:
button_name = self.button_templates[button]
function = self.function_templates["ReleaseMouseButton"].format(button=button_name)
self.lua_script += function + "\n"
else:
raise ValueError(f"Invalid button: {button}")
def generate_if_statement(self, condition, action):
self.lua_script += f"if {condition} then\n"
self.lua_script += f" {action}\n"
self.lua_script += "end\n"
def generate_for_loop(self, variable, start, end, step, action):
self.lua_script += f"for {variable} = {start}, {end}, {step} do\n"
self.lua_script += f" {action}\n"
self.lua_script += "end\n"
def generate_while_loop(self, condition, action):
self.lua_script += f"while {condition} do\n"
self.lua_script += f" {action}\n"
self.lua_script += "end\n"
def generate_lua_script(self):
return self.lua_script
def reset_lua_script(self):
self.lua_script = ""
# Define methods for each Lua function
def abort_macro(self):
self.lua_script += "AbortMacro()\n"
def clear_log(self):
self.lua_script += "ClearLog()\n"
def enable_primary_mouse_button_event(self, value):
self.lua_script += f"EnablePrimaryMouseButtonEvent({value})\n"
def on_event(self, event, arg, family=None):
function = "OnEvent()"
if family:
function = f"{function}, {family}"
self.lua_script += f"{function}\n"
def get_date(self, format=None, time=None):
function = "GetDate()"
if format:
function = f"{function}, {format}"
if time:
function = f"{function}, {time}"
self.lua_script += f"date = {function}\n"
def get_key_state(self):
self.lua_script += "key_state = GetKeyState()\n"
def get_m_key_state(self, kb_or_lhc=None):
function = "GetMKeyState()"
if kb_or_lhc:
function = f"{function}, {kb_or_lhc}"
self.lua_script += f"m_key_state = {function}\n"
def get_mouse_position(self):
self.lua_script += "x, y = GetMousePosition()\n"
def get_running_time(self):
self.lua_script += "t_ms = GetRunningTime()\n"
def is_key_lock_on(self):
self.lua_script += "is_lock_on = IsKeyLockOn()\n"
def is_modifier_pressed(self, modifier):
function = "IsModifierPressed()"
if modifier:
function = f"{function}, {modifier}"
self.lua_script += f"is_modifier_pressed = {function}\n"
def is_mouse_button_pressed(self, button):
function = "IsMouseButtonPressed()"
if button:
function = f"{function}, {button}"
self.lua_script += f"is_button_pressed = {function}\n"
def move_mouse_relative(self, dx, dy):
function = "MoveMouseRelative()"
if dx and dy:
function = f"{function}, {dx}, {dy}"
self.lua_script += f"{function}\n"
def move_mouse_to(self, x, y):
function = "MoveMouseTo()"
if x and y:
function = f"{function}, {x}, {y}"
self.lua_script += f"{function}\n"
def move_mouse_to_virtual(self, x, y):
function = "MoveMouseToVirtual()"
if x and y:
function = f"{function}, {x}, {y}"
self.lua_script += f"{function}\n"
def move_mouse_wheel(self, value):
function = "MoveMouseWheel()"
if value:
function = f"{function}, {value}"
self.lua_script += f"{function}\n"
def output_debug_message(self, message):
self.lua_script += f'OutputDebugMessage("{message}")\n'
def output_lcd_message(self, message):
self.lua_script += f'OutputLCDMessage("{message}")\n'
def output_log_message(self, message):
self.lua_script += f'OutputLogMessage("{message}")\n'
def play_macro(self, macro_name):
self.lua_script += f'PlayMacro("{macro_name}")\n'
def set_backlight_color(self, red, green, blue, family=None):
function = "SetBacklightColor()"
if family:
function = f"{function}, {family}"
self.lua_script += f"{function}\n"
def set_m_key_state(self, m_key, family=None):
function = "SetMKeyState()"
if family:
function = f"{function}, {family}"
self.lua_script += f"{function}\n"
def set_mouse_dpi_table(self, dpi_values, index=None):
function = "SetMouseDPITable()"
if index:
function = f"{function}, {index}"
self.lua_script += f"{function}\n"
def set_mouse_dpi_table_index(self, index):
function = "SetMouseDPITableIndex()"
if index:
function = f"{function}, {index}"
self.lua_script += f"{function}\n"
def sleep(self, time):
self.lua_script += f"Sleep({time})\n"
def call_lua_function(self, function_name, *args):
if function_name in self.lua_functions:
self.lua_functions[function_name](*args)
def set_script(self, script):
self.lua_script = script
def get_key_template(self, key):
if key in self.key_templates:
return self.key_templates[key]
else:
return None
def add_key_template(self, key, template):
self.key_templates[key] = template
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment