Commit Graph

363 Commits

Author SHA1 Message Date
Ryan Prichard
992cfcb363 Remove a copy of OsModule from ConsoleFont
This exact same class exists in src/shared.  It only compiles because the
copy in ConsoleFont is in an anonymous namespace.
2016-01-05 06:43:27 -06:00
Ryan Prichard
9086097c5c Fix a typo: this constant should have been unsigned.
Should have no effect at runtime.
2016-01-04 19:09:51 -06:00
Ryan Prichard
8292a8ef4f Flush winpty-agent --show-input output
This is useful when winpty-agent is invoked from the Win32-OpenSSH server,
which uses a proper console for STDIN, but sockets(!) for STDOUT and
STDERR.  The C++ runtime uses block buffering on the socket output, so
flush explicitly.
2016-01-04 19:09:50 -06:00
Ryan Prichard
eebc10bf36 gyp file: Remove the ".lib" suffix from "-luser32.lib" and document.
gyp tolerates all of:

  'user32'
  'user32.lib'
  '-luser32'
  '-luser32.lib'

With the --format=make generator, the exact string value is passed to gcc,
which only accepts the '-luser32' syntax.  The MSVC generator is also
happy with this format, so that's what I'll use.

With this change, it's possible to use the gyp file to build the C++
components.  I'm not sure if that's useful, but why not?  The resulting
Makefile can be configured by passing settings like CXX and LDFLAGS on the
make command-line.

Also: document use of gyp a bit.
2016-01-03 17:29:09 -06:00
Ryan Prichard
b45220b00d Mark *.gypi as text 2015-12-29 18:40:08 -06:00
Ryan Prichard
2ae966521e gyp improvements:
* Add a src/configurations.gypi file that can be included on the gyp
   command-line to enable 32-bit and 64-bit builds in the generated project
   files.

 * Make winpty.gyp work if gyp is run with Cygwin python.  It still works
   with normal python.
2015-12-29 18:33:55 -06:00
Ryan Prichard
f5e8b4cd28 Fix a possible concurrency issue with CancelIo and winpty shutdown.
CancelIo requests that the I/O operation end, but the I/O operation may
still be going when the function returns.

https://blogs.msdn.microsoft.com/oldnewthing/20110202-00/?p=11613/
2015-12-28 21:57:12 -06:00
Ryan Prichard
0fb98c03fa Recompile everything if VERSION.txt changes
The contents of that file are included on the compiler command-line for
every file.
2015-12-28 21:57:11 -06:00
Ryan Prichard
1c3f54caf4 Bump the version 2015-12-28 21:57:10 -06:00
Ryan Prichard
6720daa07a Avoid a possible buffer overflow in winpty-debugserver.exe
Also: use fwrite directly instead of printf; maybe it's a bit faster.
2015-12-24 21:25:06 -06:00
Ryan Prichard
6c8b7effe5 Add a TimeMeasurement class useful for measuring the run-time of code 2015-12-21 00:43:26 -06:00
Ryan Prichard
12935a722b Minor code fixup:
* Explicitly call the Unicode versions of various APIs

 * Add const in a couple of places

 * Improve a few assert error messages

 * Either initialize BackgroundDesktop fully or leave all its fields NULL
2015-12-20 23:56:24 -06:00
Ryan Prichard
83b6e9281d 0.2.1 -- update VERSION and changelog 2015-12-20 00:02:45 -08:00
Ryan Prichard
2cc2480b38 For --mouse: start by disabling mode 1005.
AFAIK, this change doesn't affect any actual terminals, but in theory, it
could matter.
2015-12-19 23:58:13 -08:00
Ryan Prichard
75fe19ae96 Respect the console's Quick Edit mode -- it suppresses mouse events
* winpty-agent: Respect the ENABLE_QUICK_EDIT_MODE flag.  If it's set,
   then mouse events are not generated (because they're supposed to control
   selection).

 * winpty-agent: Because of the above, turn ENABLE_QUICK_EDIT_MODE off at
   startup.

 * winpty-agent --show-input: Enable ENABLE_WINDOW_INPUT so we can see
   buffer resize events.

 * winpty-agent --show-input: Disable ENABLE_QUICK_EDIT_MODE with
   --with-mouse.  When Quick Edit mode is enabled, the mouse controls
   selection and does not produce mouse events in the input queue.
2015-12-16 19:52:45 -06:00
Ryan Prichard
f7e5e1f69a Update the release notes 2015-12-16 06:30:58 -06:00
Ryan Prichard
63ed815319 Get build/trivial_test.exe building again. 2015-12-16 06:22:25 -06:00
Ryan Prichard
4e6f0c852f Update the release notes for mouse support 2015-12-16 06:22:25 -06:00
Ryan Prichard
09735e220a Add a --mouse argument to unix-adapter that enables terminal mouse input.
Fixes https://github.com/rprichard/winpty/issues/57
2015-12-16 06:22:25 -06:00
Ryan Prichard
48ddc93ed9 Recognize terminal mouse input and generate MOUSE_EVENT records.
Tracked by https://github.com/rprichard/winpty/issues/57
2015-12-16 06:22:25 -06:00
Ryan Prichard
d4b4cb6bcc Expand the agent's input dumping; change --showkey to --show-input
Details:

 * Rename --showkey to --show-input and dump everything *except* mouse
   input.

 * Add a mode, --show-input --with-mouse, that also dumps the mouse
   input.
2015-12-16 06:22:25 -06:00
Ryan Prichard
c857ae1dea Add mouse input mode tracking in the agent. 2015-12-16 06:22:25 -06:00
Ryan Prichard
05a01ab4b5 Add mouse input notes 2015-12-16 06:22:25 -06:00
Ryan Prichard
08e86e2f3e Work around a bug in MSYS's select call.
Now that the InputHandler thread blocks with select, in addition to the
main thread that also blocks with select, winpty has hit a bug in the
original MSYS where select returns EAGAIN.  select is not supposed to fail
with that error (EAGAIN doesn't make much sense as a select error).  Add
a workaround just for the original MSYS.
2015-12-16 06:22:25 -06:00
Ryan Prichard
e4d9295cba Use the appropriate MSYS1-vs-MSYS2-specific g++ compiler 2015-12-16 06:22:25 -06:00
Ryan Prichard
230ae4fdf9 unix-adapter: Accommodate partial write calls, if it happens somehow.
Maybe this can happen?  I don't know.
2015-12-16 06:22:25 -06:00
Ryan Prichard
80f0e87dc1 unix-adapter: Shut down gracefully; refactor a lot of code.
Explicitly shut down the I/O handling threads before restoring the terminal
state.  Start calling winpty_close.

This change doesn't fix any bug, AFAIK.  It's nice to test/demonstrate the
use of winpty_close.

The InputHandler now uses select to wait on both the blocking stdin tty and
a wakeup fd.  This is the same behavior I saw in OpenSSH.  OpenSSH sets
its select FDs to O_NONBLOCK *except* FDs for which isatty returns true.
It puts tty FDs into raw mode, but it does not set VMIN/VTIME to 0/0, so
the terminal driver blocks.  (In any case, I tested the 0/0 values, and
IIRC they prevented blocking only with a Cygwin emulated pty -- console FDs
in Cygwin blocked; as did both consoles and emulated ptys in the original,
old MSYS.  O_NONBLOCK prevented blocking in all cases, though.)
2015-12-16 06:22:25 -06:00
Ryan Prichard
966328214d Reject unrecognized options in the unix-adapter 2015-12-16 06:22:25 -06:00
Ryan Prichard
2ca31b4de0 Refactor: rename lastWriteTick field to m_lastWriteTick 2015-12-16 06:22:25 -06:00
Ryan Prichard
3ad4dc4530 Clarification about the wow64dup bug 2015-12-15 21:01:49 -06:00
Ryan Prichard
c2ffc0c4a6 Fix a typo: There is no Windows 7 SP2; I actually tested Windows 7 SP1. 2015-12-15 19:55:25 -06:00
Ryan Prichard
48b0ec1425 Fix a typo: There is no Windows 7 SP2; I actually tested Windows 7 SP1. 2015-12-15 19:46:29 -06:00
Ryan Prichard
7814da4dd3 Miscellaneous edits to console-handles.md. 2015-12-15 19:14:10 -06:00
Ryan Prichard
6f2a481b6b Add a table of contents to console-handles.md. 2015-12-15 18:54:01 -06:00
Ryan Prichard
876836b824 Add a missing stdio.h include.
The code happened to compile without this include on Cygwin and MSYS2,
the original MSYS/MinGW toolchain rejects it.
2015-12-14 19:05:13 -06:00
Ryan Prichard
fa84d20933 Update the release notes 2015-12-03 23:41:11 -06:00
Ryan Prichard
439759af40 Mask bytes to 0-255 for unix-adapter --showkey 2015-12-03 23:28:45 -06:00
Ryan Prichard
d4bd76ff47 Replace VK_NUMPAD5 with VK_CLEAR.
Windows uses VK_NUMPAD5 when typing '5', which only happens with NumLock
on.  With NumLock off, the button sends VK_CLEAR.
2015-12-03 23:28:23 -06:00
Ryan Prichard
da6bf1f159 Add "application numpad" escape sequences.
Terminals output these codes under various circumstances:
 * rxvt-unicode: numpad, hold down SHIFT
 * rxvt: numpad, by default
 * xterm: numpad, after enabling app-mode using DECPAM (`ESC =`).  xterm
   generates `ESC O <mod> <letter>` for modified numpad presses,
   necessitating kBareMod.
 * mintty: by combining Ctrl with various keys such as '1' or ','.
   Handling those keys is difficult, because mintty is generating the
   same sequence for Ctrl-1 and Ctrl-NumPadEnd -- should the virtualKey
   be '1' or VK_HOME?
2015-12-03 22:51:17 -06:00
Ryan Prichard
f1e3b092ba Add a --showkey option to winpty-agent.
The intent is to make it easier to determine how Windows creates KEY_EVENT
records.  The code lives in winpty-agent because (1) it's very small, and
(2) I can't test all the interesting keyboards/locales/etc, so if
someone hits a bug, placing it in winpty-agent.exe ensures that they'll
have access to the tools needed to debug it.
2015-12-03 22:48:43 -06:00
Ryan Prichard
850eb9ff3f Micro-optimize the InputMap class a little.
* Cuts the DefaultInputMap setup time.  It was about a millisecond; now
   it's about a quarter of a millisecond.
2015-12-02 23:08:00 -06:00
Ryan Prichard
6795a6ee49 Add WINPTY_DEBUG=dump_input_map for dumping the InputMap. 2015-12-02 01:42:53 -06:00
Ryan Prichard
cf4a99e63b Stop relying on NUL string termination in the InputMap.
* I don't anticipate caring about this, but in principle, there's nothing
   wrong with a NUL character in the input map, so fix this while the code
   is fresh in my mind.
2015-12-02 01:07:28 -06:00
Ryan Prichard
3fc4b88b39 Refactor: create a InputMap::Key::toString method. 2015-12-02 01:07:27 -06:00
Ryan Prichard
9922a0ab19 Recognize Alt-{F1-F4} for TERM=cygwin. 2015-12-02 01:07:26 -06:00
Ryan Prichard
4b254ff015 Refactoring: handle ESC / Alt-Shift-O / Alt-[ implicitly
* Remove these characters from the input map and handle them via the
   ordinary <Char> and Alt-<Char> code paths.

 * Refactor lookupKey to remove the isEof parameter.
2015-12-02 01:07:25 -06:00
Ryan Prichard
8d8506d489 Handle many more keypress escape sequences, particularly for putty/rxvt
* Factor out the tables from ConsoleInput.cc to DefaultInputMap.cc.

Fixes https://github.com/rprichard/winpty/issues/40
2015-12-02 01:07:24 -06:00
Ryan Prichard
b416a4a7c1 Tolerate embedded NULs when scanning for a keypress
* Ctrl-2 (^@) is encoded as a NUL byte.

 * Instead of looking for a NUL byte, we need to check the input size.
   Places affected: scanKeyPress, matchDsr, lookupKey

 * N.B.: putty and rxvt encode Ctrl-Alt-2 as `ESC NUL`.

Previously, after inputting a NUL using Ctrl-2, one could type an arbitrary
amount of input into the input buffer, and winpty wouldn't do anything
until 1-second inactivity timeout had expired.  (i.e. It thought it was
seeing an incomplete DSR, so it kept waiting for the DSR to complete.)
2015-12-01 23:03:43 -06:00
Ryan Prichard
08a14e7ddd Fix Shift-Alt-O and Alt-[.
* ^[O is Shift-Alt-O, not Alt-O.  Alt-O is ^[o

 * '[' is not a valid virtualkey.  It's typically VK_OEM_4 on a US
   keyboard, but it needs to be looked up dynamically.

 * The unicodeChar fields should be 'O' and '[', not NUL.
2015-12-01 05:03:58 -06:00
Ryan Prichard
c60f748fb3 Factor out an InputMap class for doing keypress decoding. 2015-12-01 04:57:56 -06:00