@@ -84,8 +84,8 @@ func (self *handler) fetch_themes() {
8484}
8585
8686func (self * handler ) on_fetching_key_event (ev * loop.KeyEvent ) error {
87- if ev .MatchesRelease ("esc" ) {
88- self .lp . Quit ( 0 )
87+ if ev .MatchesPressOrRepeat ("esc" ) {
88+ self .quit_on_next_key_release = 0
8989 ev .Handled = true
9090 }
9191 return nil
@@ -120,7 +120,7 @@ func (self *handler) finalize() {
120120func (self * handler ) initialize () {
121121 self .quit_on_next_key_release = - 1
122122 self .tabs = strings .Split ("all dark light recent user" , " " )
123- self .rl = readline .New (self .lp , readline.RlInit {DontMarkPrompts : true , Prompt : "/ " })
123+ self .rl = readline .New (self .lp , readline.RlInit {DontMarkPrompts : true , Prompt : "/" })
124124 self .themes_list = & ThemesList {}
125125 self .fetch_result = make (chan fetch_data )
126126 self .category_filters = make (map [string ]func (* themes.Theme ) bool , len (category_filters )+ 1 )
@@ -238,13 +238,13 @@ func (self *handler) next(delta int, allow_wrapping bool) {
238238}
239239
240240func (self * handler ) on_browsing_key_event (ev * loop.KeyEvent ) error {
241- if ev .MatchesRelease ("esc" ) || ev .MatchesRelease ("q" ) {
242- self .lp . Quit ( 0 )
241+ if ev .MatchesPressOrRepeat ("esc" ) || ev .MatchesPressOrRepeat ("q" ) {
242+ self .quit_on_next_key_release = 0
243243 ev .Handled = true
244244 return nil
245245 }
246246 for _ , cat := range self .tabs {
247- if ev .MatchesRelease (cat [0 :1 ]) || ev .MatchesRelease ("alt+" + cat [0 :1 ]) {
247+ if ev .MatchesPressOrRepeat (cat [0 :1 ]) || ev .MatchesPressOrRepeat ("alt+" + cat [0 :1 ]) {
248248 ev .Handled = true
249249 if cat != self .current_category () {
250250 self .set_current_category (cat )
@@ -253,47 +253,56 @@ func (self *handler) on_browsing_key_event(ev *loop.KeyEvent) error {
253253 }
254254 }
255255 }
256- if ev .MatchesRelease ("left" ) || ev .MatchesRelease ("shift+tab" ) {
256+ if ev .MatchesPressOrRepeat ("left" ) || ev .MatchesPressOrRepeat ("shift+tab" ) {
257257 self .next_category (- 1 )
258258 ev .Handled = true
259259 return nil
260260 }
261- if ev .MatchesRelease ("right" ) || ev .MatchesRelease ("tab" ) {
261+ if ev .MatchesPressOrRepeat ("right" ) || ev .MatchesPressOrRepeat ("tab" ) {
262262 self .next_category (1 )
263263 ev .Handled = true
264264 return nil
265265 }
266- if ev .MatchesRelease ("j" ) || ev .MatchesRelease ("down" ) {
266+ if ev .MatchesPressOrRepeat ("j" ) || ev .MatchesPressOrRepeat ("down" ) {
267267 self .next (1 , true )
268268 ev .Handled = true
269269 return nil
270270 }
271- if ev .MatchesRelease ("k" ) || ev .MatchesRelease ("up" ) {
271+ if ev .MatchesPressOrRepeat ("k" ) || ev .MatchesPressOrRepeat ("up" ) {
272272 self .next (- 1 , true )
273273 ev .Handled = true
274274 return nil
275275 }
276- if ev .MatchesRelease ("page_down" ) {
276+ if ev .MatchesPressOrRepeat ("page_down" ) {
277277 ev .Handled = true
278278 sz , err := self .lp .ScreenSize ()
279279 if err == nil {
280280 self .next (int (sz .HeightCells )- 3 , false )
281281 }
282282 return nil
283283 }
284- if ev .MatchesRelease ("page_up" ) {
284+ if ev .MatchesPressOrRepeat ("page_up" ) {
285285 ev .Handled = true
286286 sz , err := self .lp .ScreenSize ()
287287 if err == nil {
288288 self .next (3 - int (sz .HeightCells ), false )
289289 }
290290 return nil
291291 }
292- if ev .MatchesRelease ("s" ) || ev .MatchesRelease ("/" ) {
292+ if ev .MatchesPressOrRepeat ("s" ) || ev .MatchesPressOrRepeat ("/" ) {
293293 ev .Handled = true
294294 self .start_search ()
295295 return nil
296296 }
297+ if ev .MatchesPressOrRepeat ("c" ) || ev .MatchesPressOrRepeat ("enter" ) {
298+ ev .Handled = true
299+ if self .themes_list == nil || self .themes_list .Len () == 0 {
300+ self .lp .Beep ()
301+ } else {
302+ self .state = ACCEPTING
303+ self .draw_screen ()
304+ }
305+ }
297306 return nil
298307}
299308
@@ -311,21 +320,19 @@ func (self *handler) draw_browsing_screen() {
311320 }
312321 num_rows := int (sz .HeightCells ) - 2
313322 mw := self .themes_list .max_width + 1
323+ green_fg , _ , _ := strings .Cut (self .lp .SprintStyled ("fg=green" , "|" ), "|" )
314324 for _ , l := range self .themes_list .Lines (num_rows ) {
315- num_rows --
316325 line := l .text
317326 if l .is_current {
318- line = strings .ReplaceAll (line , themes .MARK_BEFORE , self .lp .SprintStyled ("fg=green" ))
319- if l .is_current {
320- self .lp .PrintStyled ("fg=green" , ">" )
321- self .lp .PrintStyled ("fg=green bold" , line )
322- } else {
323- self .lp .PrintStyled ("fg=green" , " " )
324- self .lp .QueueWriteString (line )
325- }
326- self .lp .MoveCursorHorizontally (mw - l .width )
327- self .lp .Println (SEPARATOR )
327+ line = strings .ReplaceAll (line , themes .MARK_AFTER , green_fg )
328+ self .lp .PrintStyled ("fg=green" , ">" )
329+ self .lp .PrintStyled ("fg=green bold" , line )
330+ } else {
331+ self .lp .PrintStyled ("fg=green" , " " )
332+ self .lp .QueueWriteString (line )
328333 }
334+ self .lp .MoveCursorHorizontally (mw - l .width )
335+ self .lp .Println (SEPARATOR )
329336 }
330337 if self .themes_list != nil && self .themes_list .Len () > 0 {
331338 self .draw_theme_demo ()
@@ -446,7 +453,10 @@ func (self *handler) draw_theme_demo() {
446453 if intense {
447454 s = "bright-" + s
448455 }
449- buf .WriteString (self .lp .SprintStyled ("fg=" + c , c [:trunc ]))
456+ if len (c ) > trunc {
457+ c = c [:trunc ]
458+ }
459+ buf .WriteString (self .lp .SprintStyled ("fg=" + c , c ))
450460 buf .WriteString (" " )
451461 }
452462 text := strings .TrimSpace (buf .String ())
@@ -487,25 +497,25 @@ func (self *handler) draw_theme_demo() {
487497// accepting {{{
488498
489499func (self * handler ) on_accepting_key_event (ev * loop.KeyEvent ) error {
490- if ev .MatchesRelease ("q" ) || ev .MatchesRelease ("esc" ) {
500+ if ev .MatchesPressOrRepeat ("q" ) || ev .MatchesPressOrRepeat ("esc" ) {
491501 ev .Handled = true
492- self .lp . Quit ( 0 )
502+ self .quit_on_next_key_release = 0
493503 return nil
494504 }
495- if ev .MatchesRelease ("a" ) {
505+ if ev .MatchesPressOrRepeat ("a" ) {
496506 ev .Handled = true
497507 self .state = BROWSING
498508 self .draw_screen ()
499509 return nil
500510 }
501- if ev .MatchesRelease ("p" ) {
511+ if ev .MatchesPressOrRepeat ("p" ) {
502512 ev .Handled = true
503513 self .themes_list .CurrentTheme ().SaveInDir (utils .ConfigDir ())
504514 self .update_recent ()
505515 self .lp .Quit (0 )
506516 return nil
507517 }
508- if ev .MatchesRelease ("m" ) {
518+ if ev .MatchesPressOrRepeat ("m" ) {
509519 ev .Handled = true
510520 self .themes_list .CurrentTheme ().SaveInConf (utils .ConfigDir (), self .opts .ReloadIn , self .opts .ConfigFileName )
511521 self .update_recent ()
@@ -556,18 +566,36 @@ func (self *handler) draw_accepting_screen() {
556566// }}}
557567
558568// searching {{{
569+
570+ func (self * handler ) update_search () {
571+ text := self .rl .AllText ()
572+ if self .themes_list .UpdateSearch (text ) {
573+ self .set_colors_to_current_theme ()
574+ self .draw_screen ()
575+ } else {
576+ self .draw_search_bar ()
577+ }
578+ }
579+
580+ func (self * handler ) on_text (text string , a , b bool ) error {
581+ if self .state == SEARCHING {
582+ err := self .rl .OnText (text , a , b )
583+ if err != nil {
584+ return err
585+ }
586+ self .update_search ()
587+ }
588+ return nil
589+ }
590+
559591func (self * handler ) on_searching_key_event (ev * loop.KeyEvent ) error {
560- if ev .MatchesRelease ("enter" ) {
592+ if ev .MatchesPressOrRepeat ("enter" ) {
561593 ev .Handled = true
562594 self .state = BROWSING
563595 self .draw_bottom_bar ()
564596 return nil
565597 }
566- if ev .MatchesPressOrRepeat ("enter" ) || ev .MatchesPressOrRepeat ("esc" ) {
567- ev .Handled = true
568- return nil
569- }
570- if ev .MatchesRelease ("esc" ) {
598+ if ev .MatchesPressOrRepeat ("esc" ) {
571599 ev .Handled = true
572600 self .state = BROWSING
573601 self .themes_list .UpdateSearch ("" )
@@ -579,12 +607,8 @@ func (self *handler) on_searching_key_event(ev *loop.KeyEvent) error {
579607 if err != nil {
580608 return err
581609 }
582- text := self .rl .AllText ()
583- if self .themes_list .UpdateSearch (text ) {
584- self .set_colors_to_current_theme ()
585- self .draw_screen ()
586- } else {
587- self .draw_search_bar ()
610+ if ev .Handled {
611+ self .update_search ()
588612 }
589613 return nil
590614}
0 commit comments