sendtoserver escape key sequence issue

0 votes
asked Nov 15, 2011 by Allan (160 points)
edited Jul 16, 2014

The app I'm working on requires that the last thing it does is sends 2 escape keys. I have tried

 dim myByte as byte = "27"
 terminal.sendtoserver(myByte,0)

and

terminal.SendToServer(New ConsoleKeyInfo("\0", ConsoleKey.Escape, False, False, False))

and

terminal.SendToServer(New ConsoleKeyInfo("", ConsoleKey.Escape, False, False, False))

all 3 with and without

    Do
        state = terminal.Process(500)
    Loop While state = TerminalState.DataReceived

in between the 2 escape keys. Methods 1 and 3 are typing the escape key unicode sequence instead of sending as a key press, depending on the function key mode set (Linux, LinuxAlternative, Common, XtermR6, all work for the F-keys that the app uses) either as "0[21~" or "[21~", after the second escape key is sent. Method 2 is writing "" to the screen for both key presses.

2 Answers

0 votes
answered Nov 16, 2011 by Lukas Matyska (59,010 points)
edited Jul 16, 2014

You were quite near. The code should look like this:

terminal.SendToServer(New ConsoleKeyInfo(Chr(27), ConsoleKey.Escape, False, False, False))

It is because the ConsoleKey.Escape value is not handled by the terminal explicitly, so the ConsoleKeyInfo.KeyChar is used. Actually, it is easy to handle ConsoleKey.Escape in terminal, so I will add this functionality. All your cases will work in the next release.

Basically, you want to send a string which contains two escapes. The easiest way is the following:

VB .NET

terminal.SendToServer(Chr(27) & Chr(27))

C#

terminal.SendToServer("\x1B\x1B");
0 votes
answered Jul 16, 2014 by Pavel Matyska (13,940 points)
edited Jul 16, 2014

Hi, we have just release new Scripting API in 2014-R2 release. You can read more of its features on Scripting features page.

...