kitten @ send-key: Fix some keys being sent in kitty keyboard protocol encoding when not using socket for remote control
The @ kitten no longer changes keyboard mode unless actually needed.
This commit is contained in:
parent
5e12c0b144
commit
814412b8ac
4 changed files with 30 additions and 11 deletions
|
|
@ -64,6 +64,8 @@ Detailed list of changes
|
|||
|
||||
- Improve rendering of Unicode shade character to avoid Moire patterns (:pull:`7401`)
|
||||
|
||||
- kitten @ send-key: Fix some keys being sent in kitty keyboard protocol encoding when not using socket for remote control
|
||||
|
||||
0.34.1 [2024-04-19]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
|||
|
|
@ -26,9 +26,11 @@ func is_stream_response(serialized_response []byte) bool {
|
|||
|
||||
func do_chunked_io(io_data *rc_io_data) (serialized_response []byte, err error) {
|
||||
serialized_response = make([]byte, 0)
|
||||
lp, err := loop.New(loop.NoAlternateScreen, loop.NoRestoreColors, loop.OnlyDisambiguateKeys)
|
||||
lp, err := loop.New(loop.NoAlternateScreen, loop.NoRestoreColors)
|
||||
if io_data.on_key_event != nil {
|
||||
lp.FullKeyboardProtocol()
|
||||
} else {
|
||||
lp.NoKeyboardStateChange()
|
||||
}
|
||||
if err != nil {
|
||||
return
|
||||
|
|
|
|||
|
|
@ -146,6 +146,15 @@ func OnlyDisambiguateKeys(self *Loop) {
|
|||
self.terminal_options.kitty_keyboard_mode = DISAMBIGUATE_KEYS
|
||||
}
|
||||
|
||||
func (self *Loop) NoKeyboardStateChange() *Loop {
|
||||
self.terminal_options.kitty_keyboard_mode = NO_KEYBOARD_STATE_CHANGE
|
||||
return self
|
||||
}
|
||||
|
||||
func NoKeyboardStateChange(self *Loop) {
|
||||
self.terminal_options.kitty_keyboard_mode = NO_KEYBOARD_STATE_CHANGE
|
||||
}
|
||||
|
||||
func (self *Loop) FullKeyboardProtocol() *Loop {
|
||||
self.terminal_options.kitty_keyboard_mode = FULL_KEYBOARD_PROTOCOL
|
||||
return self
|
||||
|
|
|
|||
|
|
@ -12,12 +12,14 @@ import (
|
|||
type KeyboardStateBits uint8
|
||||
|
||||
const (
|
||||
DISAMBIGUATE_KEYS KeyboardStateBits = 1 << iota
|
||||
REPORT_KEY_EVENT_TYPES
|
||||
REPORT_ALTERNATE_KEYS
|
||||
REPORT_ALL_KEYS_AS_ESCAPE_CODES
|
||||
REPORT_TEXT_WITH_KEYS
|
||||
FULL_KEYBOARD_PROTOCOL = DISAMBIGUATE_KEYS | REPORT_ALTERNATE_KEYS | REPORT_ALL_KEYS_AS_ESCAPE_CODES | REPORT_TEXT_WITH_KEYS | REPORT_KEY_EVENT_TYPES
|
||||
LEGACY_KEYS KeyboardStateBits = 0
|
||||
DISAMBIGUATE_KEYS = 1
|
||||
REPORT_KEY_EVENT_TYPES = 2
|
||||
REPORT_ALTERNATE_KEYS = 4
|
||||
REPORT_ALL_KEYS_AS_ESCAPE_CODES = 8
|
||||
REPORT_TEXT_WITH_KEYS = 16
|
||||
FULL_KEYBOARD_PROTOCOL = DISAMBIGUATE_KEYS | REPORT_ALTERNATE_KEYS | REPORT_ALL_KEYS_AS_ESCAPE_CODES | REPORT_TEXT_WITH_KEYS | REPORT_KEY_EVENT_TYPES
|
||||
NO_KEYBOARD_STATE_CHANGE = 32
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -130,10 +132,12 @@ func (self *TerminalStateOptions) SetStateEscapeCodes() string {
|
|||
set_modes(&sb, ALTERNATE_SCREEN)
|
||||
sb.WriteString(CLEAR_SCREEN)
|
||||
}
|
||||
if self.kitty_keyboard_mode > 0 {
|
||||
sb.WriteString(fmt.Sprintf("\033[>%du", self.kitty_keyboard_mode))
|
||||
} else {
|
||||
switch self.kitty_keyboard_mode {
|
||||
case LEGACY_KEYS:
|
||||
sb.WriteString("\033[>u")
|
||||
case NO_KEYBOARD_STATE_CHANGE:
|
||||
default:
|
||||
sb.WriteString(fmt.Sprintf("\033[>%du", self.kitty_keyboard_mode))
|
||||
}
|
||||
if self.mouse_tracking != NO_MOUSE_TRACKING {
|
||||
sb.WriteString(MOUSE_SGR_PIXEL_MODE.EscapeCodeToSet())
|
||||
|
|
@ -152,7 +156,9 @@ func (self *TerminalStateOptions) SetStateEscapeCodes() string {
|
|||
func (self *TerminalStateOptions) ResetStateEscapeCodes() string {
|
||||
var sb strings.Builder
|
||||
sb.Grow(64)
|
||||
sb.WriteString("\033[<u")
|
||||
if self.kitty_keyboard_mode != NO_KEYBOARD_STATE_CHANGE {
|
||||
sb.WriteString("\033[<u")
|
||||
}
|
||||
if self.Alternate_screen {
|
||||
sb.WriteString(ALTERNATE_SCREEN.EscapeCodeToReset())
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in a new issue