Dont request release events for most kittens

They are not needed and there is always a small risk that a release
event could be delivered after the kitten has stopped reading from the
tty, thereby leaking into the environment.
This commit is contained in:
Kovid Goyal 2023-03-17 10:50:10 +05:30
parent de74b93b16
commit 509a45b579
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 23 additions and 20 deletions

View File

@ -72,7 +72,6 @@ type handler struct {
colors_set_once bool colors_set_once bool
tabs []string tabs []string
rl *readline.Readline rl *readline.Readline
quit_on_next_key_release int
} }
// fetching {{{ // fetching {{{
@ -85,7 +84,7 @@ func (self *handler) fetch_themes() {
func (self *handler) on_fetching_key_event(ev *loop.KeyEvent) error { func (self *handler) on_fetching_key_event(ev *loop.KeyEvent) error {
if ev.MatchesPressOrRepeat("esc") { if ev.MatchesPressOrRepeat("esc") {
self.quit_on_next_key_release = 0 self.lp.Quit(0)
ev.Handled = true ev.Handled = true
} }
return nil return nil
@ -118,7 +117,6 @@ func (self *handler) finalize() {
} }
func (self *handler) initialize() { func (self *handler) initialize() {
self.quit_on_next_key_release = -1
self.tabs = strings.Split("all dark light recent user", " ") self.tabs = strings.Split("all dark light recent user", " ")
self.rl = readline.New(self.lp, readline.RlInit{DontMarkPrompts: true, Prompt: "/"}) self.rl = readline.New(self.lp, readline.RlInit{DontMarkPrompts: true, Prompt: "/"})
self.themes_list = &ThemesList{} self.themes_list = &ThemesList{}
@ -203,10 +201,6 @@ func (self *handler) redraw_after_category_change() {
} }
func (self *handler) on_key_event(ev *loop.KeyEvent) error { func (self *handler) on_key_event(ev *loop.KeyEvent) error {
if self.quit_on_next_key_release > -1 && ev.Type == loop.RELEASE {
self.lp.Quit(self.quit_on_next_key_release)
return nil
}
switch self.state { switch self.state {
case FETCHING: case FETCHING:
return self.on_fetching_key_event(ev) return self.on_fetching_key_event(ev)
@ -239,7 +233,7 @@ func (self *handler) next(delta int, allow_wrapping bool) {
func (self *handler) on_browsing_key_event(ev *loop.KeyEvent) error { func (self *handler) on_browsing_key_event(ev *loop.KeyEvent) error {
if ev.MatchesPressOrRepeat("esc") || ev.MatchesPressOrRepeat("q") { if ev.MatchesPressOrRepeat("esc") || ev.MatchesPressOrRepeat("q") {
self.quit_on_next_key_release = 0 self.lp.Quit(0)
ev.Handled = true ev.Handled = true
return nil return nil
} }
@ -499,7 +493,7 @@ func (self *handler) draw_theme_demo() {
func (self *handler) on_accepting_key_event(ev *loop.KeyEvent) error { func (self *handler) on_accepting_key_event(ev *loop.KeyEvent) error {
if ev.MatchesPressOrRepeat("q") || ev.MatchesPressOrRepeat("esc") { if ev.MatchesPressOrRepeat("q") || ev.MatchesPressOrRepeat("esc") {
ev.Handled = true ev.Handled = true
self.quit_on_next_key_release = 0 self.lp.Quit(0)
return nil return nil
} }
if ev.MatchesPressOrRepeat("a") { if ev.MatchesPressOrRepeat("a") {

View File

@ -151,6 +151,15 @@ func FullKeyboardProtocol(self *Loop) {
self.terminal_options.kitty_keyboard_mode = 0b11111 self.terminal_options.kitty_keyboard_mode = 0b11111
} }
func (self *Loop) FullKeyboardProtocolWithoutReleaseEvents() *Loop {
self.terminal_options.kitty_keyboard_mode = 0b11101
return self
}
func FullKeyboardProtocolWithoutReleaseEvents(self *Loop) {
self.terminal_options.kitty_keyboard_mode = 0b11101
}
func (self *Loop) MouseTrackingMode(mt MouseTracking) *Loop { func (self *Loop) MouseTrackingMode(mt MouseTracking) *Loop {
self.terminal_options.mouse_tracking = mt self.terminal_options.mouse_tracking = mt
return self return self

View File

@ -24,7 +24,7 @@ func new_loop() *Loop {
l := Loop{controlling_term: nil, timers_temp: make([]*timer, 4)} l := Loop{controlling_term: nil, timers_temp: make([]*timer, 4)}
l.terminal_options.alternate_screen = true l.terminal_options.alternate_screen = true
l.terminal_options.restore_colors = true l.terminal_options.restore_colors = true
l.terminal_options.kitty_keyboard_mode = 0b11111 l.terminal_options.kitty_keyboard_mode = 0b11101 // full protocol without release and repeat events
l.escape_code_parser.HandleCSI = l.handle_csi l.escape_code_parser.HandleCSI = l.handle_csi
l.escape_code_parser.HandleOSC = l.handle_osc l.escape_code_parser.HandleOSC = l.handle_osc
l.escape_code_parser.HandleDCS = l.handle_dcs l.escape_code_parser.HandleDCS = l.handle_dcs

View File

@ -21,7 +21,7 @@ func (self *KilledBySignal) Error() string { return self.Msg }
var Canceled = errors.New("Canceled by user") var Canceled = errors.New("Canceled by user")
func ReadPassword(prompt string, kill_if_signaled bool) (password string, err error) { func ReadPassword(prompt string, kill_if_signaled bool) (password string, err error) {
lp, err := loop.New(loop.NoAlternateScreen, loop.NoRestoreColors) lp, err := loop.New(loop.NoAlternateScreen, loop.NoRestoreColors, loop.FullKeyboardProtocol)
shadow := "" shadow := ""
if err != nil { if err != nil {
return return