Claude: Improve support for key inputs
This commit is contained in:
parent
ff5019e779
commit
8256807697
@ -341,17 +341,21 @@
|
||||
}
|
||||
return null;
|
||||
}
|
||||
async function yieldHelper()
|
||||
{
|
||||
return new Promise(function(f2, r2)
|
||||
{
|
||||
setTimeout(f2, 0);
|
||||
});
|
||||
}
|
||||
async function kmsSendChar(textArea, charStr)
|
||||
{
|
||||
textArea.value = "_" + charStr;
|
||||
return new Promise(function(f2, r2)
|
||||
{
|
||||
var ke = new KeyboardEvent("keydown");
|
||||
textArea.dispatchEvent(ke);
|
||||
var ke = new KeyboardEvent("keyup");
|
||||
textArea.dispatchEvent(ke);
|
||||
setTimeout(f2, 0);
|
||||
});
|
||||
await yieldHelper();
|
||||
}
|
||||
async function handleTool(tool)
|
||||
{
|
||||
@ -474,15 +478,79 @@
|
||||
case "key":
|
||||
{
|
||||
var textArea = getKmsInputElement();
|
||||
var key = tool.text;
|
||||
// Support arbitrary order of modifiers
|
||||
var isCtrl = false;
|
||||
var isAlt = false;
|
||||
var isShift = false;
|
||||
while(1)
|
||||
{
|
||||
if(key.startsWith("shift+"))
|
||||
{
|
||||
isShift = true;
|
||||
key = key.substr("shift+".length);
|
||||
var ke = new KeyboardEvent("keydown", {keyCode: 0x10});
|
||||
textArea.dispatchEvent(ke);
|
||||
await yieldHelper();
|
||||
continue;
|
||||
}
|
||||
else if(key.startsWith("ctrl+"))
|
||||
{
|
||||
isCtrl = true;
|
||||
key = key.substr("ctrl+".length);
|
||||
var ke = new KeyboardEvent("keydown", {keyCode: 0x11});
|
||||
textArea.dispatchEvent(ke);
|
||||
await yieldHelper();
|
||||
continue;
|
||||
}
|
||||
else if(key.startsWith("alt+"))
|
||||
{
|
||||
isAlt = true;
|
||||
key = key.substr("alt+".length);
|
||||
var ke = new KeyboardEvent("keydown", {keyCode: 0x12});
|
||||
textArea.dispatchEvent(ke);
|
||||
await yieldHelper();
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
var ret = null;
|
||||
// Dispatch single chars directly and parse the rest
|
||||
if(key.length == 1)
|
||||
{
|
||||
await kmsSendChar(textArea, key);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(tool.text)
|
||||
{
|
||||
case "Return":
|
||||
await kmsSendChar(textArea, "\n");
|
||||
break;
|
||||
default:
|
||||
debugger;
|
||||
// TODO: Support more key combinations
|
||||
ret = new Error(`Error: Invalid key '${tool.text}'`);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
if(isShift)
|
||||
{
|
||||
var ke = new KeyboardEvent("keyup", {keyCode: 0x10});
|
||||
textArea.dispatchEvent(ke);
|
||||
await yieldHelper();
|
||||
}
|
||||
if(isCtrl)
|
||||
{
|
||||
var ke = new KeyboardEvent("keyup", {keyCode: 0x11});
|
||||
textArea.dispatchEvent(ke);
|
||||
await yieldHelper();
|
||||
}
|
||||
if(isAlt)
|
||||
{
|
||||
var ke = new KeyboardEvent("keyup", {keyCode: 0x12});
|
||||
textArea.dispatchEvent(ke);
|
||||
await yieldHelper();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
default:
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user