Commit Graph

70 Commits

Author SHA1 Message Date
Can Celik b76adc155d fix(input): preserve native key lifecycle across routing (#2142)
refs #2077

Co-authored-by: Jonathan Liebig <jonathan.liebig@gmail.com>
2026-08-01 04:27:50 +03:00
Matt Coles b4112743cf fix(client): restore terminal on sighup and sigterm
Enable termination-signal handling so SIGHUP and SIGTERM follow the graceful
quit path and restore terminal state. Log handler registration failures and
add PTY coverage for direct SIGHUP and server EOF restoration

Co-authored-by: Matt Coles <macols@amazon.com>
2026-07-31 00:46:01 +03:00
Ogulcan Celik 61f6400675 fix: repaint after transient terminal resizes 2026-07-26 15:05:28 +03:00
joonhwan 6cfaa079a9 feat: switch IME to ASCII in prefix mode on Windows (Korean IME) (#1823)
* feat: switch IME to ASCII in prefix mode on Windows

Extend switch_ascii_input_source_in_prefix to Windows: detect IME state
via WM_IME_CONTROL and toggle to ASCII with SendInput for the Korean IME.
Other IME languages are detected and left unchanged.

refs #1802

* docs: clarify Windows (Korean IME) support for prefix ASCII switching

Follow-up to the Windows prefix ASCII switch, which extended
switch_ascii_input_source_in_prefix to Windows but left the surrounding
text describing macOS only.

- Settings row label: "(macOS)" -> "(macOS/Windows)", plus its test.
- Generalize the Windows behavior wording to "switches the IME to
  English (ASCII) input" in the config-reference.json entry and the
  model.rs doc comment, and state that Windows support is currently
  limited to the Korean IME.
- Add a :::caution aside noting the Korean-IME-only limitation to the
  en/ja/zh preview docs, keeping the three translations in sync.

refs #1802

* fix: warn when prefix IME toggle injection is incomplete

SendInput can queue fewer events than requested (for example when blocked
by UIPI), which would otherwise leave the IME silently stuck in ASCII or
native mode. Log a warning with the sent and expected counts so the failure
is diagnosable.

refs #1802

* fix: guard prefix IME restore and correct open-status naming

Address maintainer review on the Windows prefix ASCII switch:

- Restore only when safe: store the foreground window at switch time and,
  before toggling back, require that the same window is still focused and
  the IME is still in English. This stops restore from toggling another
  application or overriding a manual return to Hangul during prefix mode.
- Report injection success from send_vk_tap and only arm restoration when
  the initial toggle landed; on a partial injection retry the dropped
  key-up so a key is not left logically held down. The injection policy is
  split into send_vk_tap_with(inject) so the success, partial, and failure
  branches are unit-tested without the real SendInput.
- Correct the WM_IME_CONTROL sub-command naming: 0x0005 is IMC_GETOPENSTATUS
  (IME open state), not IMC_GETCONVERSIONMODE. Behavior is unchanged; the
  constant, comments, and tests now describe the open-status read.

refs #1802

* fix: bound IME open-status read with a timeout

The prefix IME switch reads IMC_GETOPENSTATUS via WM_IME_CONTROL, which
crosses into the terminal-emulator process. A plain SendMessageW would block
herdr's client thread until that process responds, indefinitely if it hangs.
Read through SendMessageTimeoutW with SMTO_ABORTIFHUNG and a short timeout
instead; on timeout the switch is skipped and restore does nothing, so a hung
host process can no longer freeze prefix-mode entry or exit.

refs #1802

* fix: preserve windows ime restoration after partial injection

refs #1802

---------

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-25 20:52:45 +03:00
Ogulcan Celik 36de78dd4f fix: preserve kitty graphics during host repaints
refs #1628
2026-07-24 01:31:06 +03:00
akbash 503613c8ec fix: inherit host palette in pane queries (#1759)
refs #1752

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-24 01:28:35 +03:00
Ogulcan Celik e7fc85bfdb fix: preserve kitty printable key releases
refs #1746
2026-07-23 03:47:44 +03:00
Ogulcan Celik 2a20e90a02 fix: preserve physical escape on windows
refs #1736
2026-07-23 01:49:54 +03:00
Ogulcan Celik 02a6e874f6 perf: batch contiguous terminal diff writes
refs #283
2026-07-18 03:56:51 +03:00
Ogulcan Celik c1f7b6f331 fix: preserve lone escape input boundaries
refs #541
2026-07-18 02:51:29 +03:00
Ogulcan Celik 464c658fdd fix: reassemble split sgr mouse input
refs #1382
2026-07-14 23:26:02 +03:00
Ogulcan Celik 36b2e2f546 fix: use drawn cursor by default in wsl
refs #930
2026-07-09 03:35:35 +03:00
akbash ed31632ebf fix: bridge remote image file drops (#1085)
refs #828

Co-authored-by: akbash-bot <300245827+akbash-bot@users.noreply.github.com>
2026-07-06 19:51:28 +03:00
ppggff 2bc1724c2d fix: switch prefix ASCII input source on the foreground client (#1016)
* fix: switch prefix ASCII input source on the foreground client

The macOS prefix ASCII-switch ran in the headless server, whose
TISCopyCurrentKeyboardInputSource read is a stale per-process cache
(refreshed only via a main-run-loop notification the server never pumps),
so prefix could leave the terminal on the wrong input source.

Forward it to the foreground client, like clipboard: sync_prefix_input_source
emits AppEvent::PrefixInputSource as an intent; the server forwards it to the
foreground client and the monolithic app applies it in-process via
RealPrefixInputSource, which pumps its main run loop before the stale TIS read.
Key it on Mode::wants_ascii_input so multi-level prefix commands keep ASCII
until returning to the terminal, and restore the IME for rename text entry.

Adds ServerMessage::PrefixInputSource to the already-unreleased protocol 15.

refs #774

* fix: keep prefix input-source switch out of the headless server process

An App-internal drain (the exhaustive drain at the top of
handle_api_request, reachable from prefix-key runtime mutations) can
consume a queued PrefixInputSource intent before the server's
forwarding drain sees it, applying the TIS switch in the headless
server process and stranding the restore state. Gate the in-process
switch on App.local_input_source_switch, disabled by the headless
server alongside the other local side effects, so a swallowed intent
degrades to a skipped switch. Widen the forwarding-bypass maintenance
test to the handle_internal_event_with_prefix_sync wrapper.

refs #774

* docs: clarify prefix input-source comments and flag docs

refs #774

* fix: bump protocol for prefix input source

refs #774

---------

Co-authored-by: Ogulcan Celik <ogulcancelik@gmail.com>
2026-07-05 03:25:47 +03:00
Ogulcan Celik 6f148588dd fix: scope empty image paste bridge to remote
refs #986
2026-07-03 22:19:47 +03:00
Ogulcan Celik aa0768b734 fix: stop sgr mouse sequences leaking into panes
refs #939
2026-07-03 02:49:27 +03:00
Ogulcan Celik d1471e6483 fix: draw host cursor on windows
refs #930
2026-07-02 21:59:06 +03:00
Ogulcan Celik f4d216b63d fix: preserve windows backspace input
refs #907

refs #920
2026-07-02 16:22:11 +03:00
Ogulcan Celik 26db26e416 fix: keep remote sessions alive across disconnects 2026-06-30 19:49:55 +03:00
Ogulcan Celik 0fa6440d41 feat: add terminal session control stream 2026-06-30 02:48:02 +03:00
Ogulcan Celik f3da280ccc fix: preserve windows win32 bracketed paste
refs #670
2026-06-30 02:17:20 +03:00
Ogulcan Celik bffc4a82c8 feat: add terminal session observe stream 2026-06-30 01:10:28 +03:00
Ogulcan Celik 7811d84f15 fix: ignore modifier-only windows input
refs #795
2026-06-25 17:23:01 +03:00
Ogulcan Celik c792f2fd53 fix: preserve alacritty input on windows
refs #792
2026-06-25 16:32:00 +03:00
Ogulcan Celik a720367889 fix: extend remote client handshake timeout for high-latency links
refs #753
2026-06-24 15:39:29 +03:00
Ogulcan Celik 052f20214b fix: preserve windows terminal multiline paste
refs #670
2026-06-19 22:24:20 +03:00
Ogulcan Celik 36b4001f45 feat: sync theme with host appearance
refs #675
2026-06-18 02:53:31 +03:00
Ogulcan Celik aca35ea76f fix: scope image paste shortcut to remote
refs #647
2026-06-18 01:56:26 +03:00
Ogulcan Celik cc802c8f9c fix: satisfy windows clippy 2026-06-16 15:33:36 +03:00
Ogulcan Celik 6f9ca0ea66 fix: hold lone escape while awaiting host color reply
refs #549
2026-06-16 15:19:06 +03:00
Ogulcan Celik fbd20ad6e4 feat: add plugin v1 system
Add manifest-driven plugin actions, event hooks, pane entrypoints, link handlers, and host APIs.

Support plugin link, GitHub install, build commands, installed plugin registry, pane movement, runtime context, and plugin docs.
2026-06-14 03:47:07 +03:00
Ogulcan Celik 7ba4bfe90e fix: stabilize windows pane cursor rendering
refs #556
2026-06-12 03:37:03 +03:00
Ogulcan Celik fb56e64537 fix: improve windows pane behavior 2026-06-08 01:36:51 +03:00
Ogulcan Celik c01b947d0b fix: support windows agent hooks and input paths 2026-06-07 19:45:16 +03:00
Ogulcan Celik f61ed48eff fix: preserve unix socket error semantics 2026-06-07 16:29:45 +03:00
Ogulcan Celik 3c2b46d24a feat: add native windows beta support 2026-06-07 16:29:44 +03:00
Ogulcan Celik 4001fd2ec8 feat: improve toast ergonomics
refs #486
2026-06-06 17:42:38 +03:00
Ogulcan Celik fc4e1bbf6b perf: reduce sidebar git polling overhead
refs #353
2026-05-30 23:58:34 +03:00
Ogulcan Celik 77242943ba fix: keep split host color replies out of panes
refs #344

refs #279
2026-05-29 19:48:55 +03:00
Ogulcan Celik 58bcd76bfd feat: make focus-gain redraw configurable
refs #282
2026-05-25 18:42:33 +03:00
Ogulcan Celik 420925d141 fix: support scrolling direct agent attaches 2026-05-24 21:30:04 +03:00
Golden-Pigeon 1daf54ecbf feat: show named session command hints
refs #199
2026-05-22 02:43:30 +03:00
Ogulcan Celik 866aaf740e refactor: separate server client boundaries 2026-05-21 20:22:57 +03:00
Ogulcan Celik 06bcd06a17 feat: use local keybindings for remote attach 2026-05-21 15:17:37 +03:00
Ogulcan Celik ed478be983 fix: bridge remote clipboard image paste
refs #205
2026-05-20 02:51:59 +03:00
Ogulcan Celik d616bcd6b8 fix: preserve modified enter input
refs #168
2026-05-19 14:24:30 +03:00
Ogulcan Celik 3ecacfddae feat: add direct terminal attach stream 2026-05-17 01:41:17 +03:00
Ogulcan Celik e1a84a8e34 fix: force redraw on terminal focus gain 2026-05-15 21:17:55 +03:00
Ogulcan Celik 73dba97521 fix: forward pane cursor shape
fixes #116
2026-05-15 20:53:55 +03:00
Ogulcan Celik 4bfc3a89c5 config: split experimental settings from advanced 2026-05-15 15:14:19 +03:00