More work on mouse selections

This commit is contained in:
Kovid Goyal 2023-03-27 17:56:00 +05:30
parent a22933afbc
commit d33b83e6ea
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 79 additions and 11 deletions

View File

@ -506,10 +506,11 @@ var DocTitleMap = map[string]string{serialize_go_dict(ref_map['doc'])}
var AllowedShellIntegrationValues = []string{{ {str(sorted(allowed_shell_integration_values))[1:-1].replace("'", '"')} }} var AllowedShellIntegrationValues = []string{{ {str(sorted(allowed_shell_integration_values))[1:-1].replace("'", '"')} }}
var KittyConfigDefaults = struct {{ var KittyConfigDefaults = struct {{
Term, Shell_integration, Select_by_word_characters string Term, Shell_integration, Select_by_word_characters string
Wheel_scroll_multiplier int
Url_prefixes []string Url_prefixes []string
}}{{ }}{{
Term: "{Options.term}", Shell_integration: "{' '.join(Options.shell_integration)}", Url_prefixes: []string{{ {url_prefixes} }}, Term: "{Options.term}", Shell_integration: "{' '.join(Options.shell_integration)}", Url_prefixes: []string{{ {url_prefixes} }},
Select_by_word_characters: `{Options.select_by_word_characters}`, Select_by_word_characters: `{Options.select_by_word_characters}`, Wheel_scroll_multiplier: {Options.wheel_scroll_multiplier},
}} }}
''' # }}} ''' # }}}

61
kittens/diff/mouse.go Normal file
View File

@ -0,0 +1,61 @@
// License: GPLv3 Copyright: 2023, Kovid Goyal, <kovid at kovidgoyal.net>
package diff
import (
"fmt"
"kitty"
"kitty/tools/config"
"kitty/tools/tui/loop"
"kitty/tools/utils"
"path/filepath"
"strconv"
)
var _ = fmt.Print
type MouseSelection struct {
start_line, end_line ScrollPos
}
type KittyOpts struct {
Wheel_scroll_multiplier int
}
func read_relevant_kitty_opts(path string) KittyOpts {
ans := KittyOpts{Wheel_scroll_multiplier: kitty.KittyConfigDefaults.Wheel_scroll_multiplier}
handle_line := func(key, val string) error {
switch key {
case "wheel_scroll_multiplier":
v, err := strconv.Atoi(val)
if err == nil {
ans.Wheel_scroll_multiplier = v
}
}
return nil
}
cp := config.ConfigParser{LineHandler: handle_line}
cp.ParseFiles(path)
return ans
}
var RelevantKittyOpts = (&utils.Once[KittyOpts]{Run: func() KittyOpts {
return read_relevant_kitty_opts(filepath.Join(utils.ConfigDir(), "kitty.conf"))
}}).Get
func (self *Handler) handle_wheel_event(up bool) {
amt := RelevantKittyOpts().Wheel_scroll_multiplier
if up {
amt *= -1
}
self.dispatch_action(`scroll_by`, strconv.Itoa(amt))
}
func (self *Handler) start_mouse_selection(ev *loop.MouseEvent) {
}
func (self *Handler) update_mouse_selection(ev *loop.MouseEvent) {
}
func (self *Handler) finish_mouse_selection(ev *loop.MouseEvent) {
}

View File

@ -54,6 +54,7 @@ var image_collection *graphics.ImageCollection
type screen_size struct{ rows, columns, num_lines, cell_width, cell_height int } type screen_size struct{ rows, columns, num_lines, cell_width, cell_height int }
type Handler struct { type Handler struct {
async_results chan AsyncResult async_results chan AsyncResult
mouse_selection MouseSelection
shortcut_tracker config.ShortcutTracker shortcut_tracker config.ShortcutTracker
left, right string left, right string
collection *Collection collection *Collection
@ -628,20 +629,25 @@ func (self *Handler) dispatch_action(name, args string) error {
return nil return nil
} }
func (self *Handler) handle_wheel_event(up bool) {
if self.logical_lines != nil {
amt := 2
if up {
amt *= -1
}
self.dispatch_action(`scroll_by`, strconv.Itoa(amt))
}
}
func (self *Handler) on_mouse_event(ev *loop.MouseEvent) error { func (self *Handler) on_mouse_event(ev *loop.MouseEvent) error {
if self.logical_lines == nil {
return nil
}
if ev.Event_type == loop.MOUSE_PRESS && ev.Buttons&(loop.MOUSE_WHEEL_UP|loop.MOUSE_WHEEL_DOWN) != 0 { if ev.Event_type == loop.MOUSE_PRESS && ev.Buttons&(loop.MOUSE_WHEEL_UP|loop.MOUSE_WHEEL_DOWN) != 0 {
self.handle_wheel_event(ev.Buttons&(loop.MOUSE_WHEEL_UP) != 0) self.handle_wheel_event(ev.Buttons&(loop.MOUSE_WHEEL_UP) != 0)
return nil return nil
} }
if ev.Event_type == loop.MOUSE_PRESS && ev.Buttons&loop.LEFT_MOUSE_BUTTON != 0 {
self.start_mouse_selection(ev)
return nil
}
if ev.Event_type == loop.MOUSE_MOVE {
self.update_mouse_selection(ev)
return nil
}
if ev.Event_type == loop.MOUSE_RELEASE && ev.Buttons&loop.LEFT_MOUSE_BUTTON != 0 {
self.finish_mouse_selection(ev)
return nil
}
return nil return nil
} }