- if not xvkbd_hacked:
- subprocess.call([xvkbd_exe, "-xsendevent", "-window", lyx_window_name,
- "-delay", actual_delay, "-text", keystr], stdout = FNULL, stderr = FNULL)
+ xvpar = [xvkbd_exe]
+ if qt_frontend == 'QT5':
+ xvpar.extend(["-jump-pointer", "-no-back-pointer"])
+ else:
+ xvpar.extend(["-xsendevent"])
+ if lyx_other_window_name is None:
+ xvpar.extend(["-window", lyx_window_name])
+ else:
+ xvpar.extend(["-window", lyx_other_window_name])
+ xvpar.extend(["-delay", actual_delay, "-text", keystr])
+ print("Sending \"" + keystr + "\"")
+ subprocess.call(xvpar, stdout = FNULL, stderr = FNULL)
+ sys.stdout.flush()
+
+Axreg = re.compile(r'^(.*)\\Ax([^\\]*)(.*)$')
+returnreg = re.compile(r'(\\\[[A-Z][a-z]+\])(.*)$')
+
+# recursive wrapper around sendKeystringLocal()
+# handling \Ax-entries
+def sendKeystringAx(line, LYX_PID):
+ global key_delay
+ saved_delay = key_delay
+ m = Axreg.match(line)
+ if m:
+ prefix = m.group(1)
+ content = m.group(2)
+ rest = m.group(3);
+ if prefix != "":
+ # since (.*) is greedy, check prefix for '\Ax' again
+ sendKeystringAx(prefix, LYX_PID)
+ sendKeystringLocal('\Ax', LYX_PID)
+ time.sleep(0.1)
+ m2 = returnreg.match(rest)
+ if m2:
+ line = m2.group(2)
+ ctrlk = m2.group(1)
+ key_delay = "1"
+ sendKeystringLocal(content + ctrlk, LYX_PID)
+ key_delay = saved_delay
+ time.sleep(controlkey_delay)
+ if line != "":
+ sendKeystringLocal(line, LYX_PID)
+ else:
+ if content != "":
+ sendKeystringLocal(content, LYX_PID)
+ if rest != "":
+ sendKeystringLocal(rest, LYX_PID)