From: John Benediktsson Date: Wed, 24 Mar 2021 23:12:02 +0000 (-0700) Subject: ui: standard readline style keybindings. X-Git-Tag: 0.99~2365 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=c6e4a8e387fc30d503d03b061040ab523571d22c ui: standard readline style keybindings. This results in some awkward ui.tools keybindings that now are Ctrl-Shift, but perhaps we can make those better. Using A+ for ui.tools would be nice but Cmd-H, Cmd-W, Cmd-M conflict on MacOS. --- diff --git a/basis/ui/gadgets/editors/editors.factor b/basis/ui/gadgets/editors/editors.factor index 6a2405bd6e..39eb30b562 100644 --- a/basis/ui/gadgets/editors/editors.factor +++ b/basis/ui/gadgets/editors/editors.factor @@ -435,6 +435,11 @@ editor "editing" f { { T{ key-down f { C+ } "BACKSPACE" } delete-previous-word } { T{ key-down f { A+ } "DELETE" } delete-to-end-of-line } { T{ key-down f { A+ } "BACKSPACE" } delete-to-start-of-line } + { T{ key-down f { C+ } "d" } delete-next-character } + { T{ key-down f { C+ } "h" } delete-previous-character } + { T{ key-down f { C+ } "u" } delete-to-start-of-line } + { T{ key-down f { C+ } "k" } delete-to-end-of-line } + { T{ key-down f { C+ } "w" } delete-previous-word } } define-command-map : com-paste ( editor -- ) clipboard get paste-clipboard ; @@ -485,6 +490,10 @@ editor "caret-motion" f { { T{ key-down f f "END" } end-of-line } { T{ key-down f { C+ } "HOME" } start-of-document } { T{ key-down f { C+ } "END" } end-of-document } + { T{ key-down f { C+ } "b" } previous-character } + { T{ key-down f { C+ } "f" } next-character } + { T{ key-down f { C+ } "a" } start-of-line } + { T{ key-down f { C+ } "e" } end-of-line } } define-command-map : clear-editor ( editor -- ) @@ -651,6 +660,8 @@ multiline-editor "multiline" f { { T{ key-down f { S+ } "RET" } insert-newline } { T{ key-down f f "ENTER" } insert-newline } { T{ key-down f { C+ } "j" } com-join-lines } + { T{ key-down f { C+ } "p" } previous-line } + { T{ key-down f { C+ } "n" } next-line } } define-command-map TUPLE: source-editor < multiline-editor ; diff --git a/basis/ui/tools/debugger/debugger.factor b/basis/ui/tools/debugger/debugger.factor index 8425b9249f..349e91ed6d 100644 --- a/basis/ui/tools/debugger/debugger.factor +++ b/basis/ui/tools/debugger/debugger.factor @@ -88,8 +88,8 @@ debugger "gestures" f { \ com-edit H{ { +listener+ t } } define-command debugger "toolbar" f { - { T{ key-down f { C+ } "i" } com-inspect } - { T{ key-down f { C+ } "t" } com-traceback } - { T{ key-down f { C+ } "h" } com-help } - { T{ key-down f { C+ } "e" } com-edit } + { T{ key-down f f "i" } com-inspect } + { T{ key-down f f "t" } com-traceback } + { T{ key-down f f "h" } com-help } + { T{ key-down f f "e" } com-edit } } define-command-map diff --git a/basis/ui/tools/listener/listener-docs.factor b/basis/ui/tools/listener/listener-docs.factor index 68d12f0a23..7535771fa1 100644 --- a/basis/ui/tools/listener/listener-docs.factor +++ b/basis/ui/tools/listener/listener-docs.factor @@ -49,45 +49,7 @@ $nl { $operations T{ vocab-link f "kernel" } } { $command-map interactor "quotation" } { $heading "Editing commands" } -"The text editing commands are standard; see " { $link "gadgets-editors-commands" } "." -$nl -"If you want to add support for Emacs-style text entry, specifically the following:" -$nl -{ $table - { "Ctrl-b" "Move cursor to previous character" } - { "Ctrl-f" "Move cursor to next character" } - { "Ctrl-a" "Move cursor to start of line" } - { "Ctrl-e" "Move cursor to end of line" } - { "Ctrl-u" "Delete to start of line" } - { "Ctrl-k" "Delete to end of line" } - { "Ctrl-p" "Move cursor to previous line" } - { "Ctrl-n" "Move cursor to next line" } -} -$nl -"Then you can run the following code, or add it to your " { $link ".factor-rc" } "." -$nl -{ $code - "USING: accessors assocs kernel sequences sets ui.commands -ui.gadgets.editors ui.gestures ui.tools.listener ; - -editor \"emacs\" f { - { T{ key-down f { C+ } \"b\" } previous-character } - { T{ key-down f { C+ } \"f\" } next-character } - { T{ key-down f { C+ } \"a\" } start-of-line } - { T{ key-down f { C+ } \"e\" } end-of-line } - { T{ key-down f { C+ } \"u\" } delete-to-start-of-line } - { T{ key-down f { C+ } \"k\" } delete-to-end-of-line } -} define-command-map - -multiline-editor \"emacs\" f { - { T{ key-down f { C+ } \"p\" } previous-line } - { T{ key-down f { C+ } \"n\" } next-line } -} define-command-map - -\"interactor\" interactor get-command-at [ - [ drop T{ key-down f { C+ } \"k\" } = ] assoc-reject -] change-commands drop interactor update-gestures" -} +"The text editing commands are standard; see " { $link "gadgets-editors-commands" } ", which include Readline style keybindings." $nl { $heading "Implementation" } "Listeners are instances of " { $link listener-gadget } ". The listener consists of an output area (instance of " { $link pane } ") and an input area (instance of " { $link interactor } "). Clickable presentations can also be printed to the listener; see " { $link "ui-presentations" } "." ; diff --git a/basis/ui/tools/listener/listener.factor b/basis/ui/tools/listener/listener.factor index 7b735ecee7..917467a0be 100644 --- a/basis/ui/tools/listener/listener.factor +++ b/basis/ui/tools/listener/listener.factor @@ -384,9 +384,13 @@ M: interactor handle-gesture [ call-next-method ] } cond ; +: delete-next-character/eof ( interactor -- ) + dup model>> doc-string empty? + [ interactor-eof ] [ delete-next-character ] if ; + interactor "interactor" f { { T{ key-down f f "RET" } evaluate-input } - { T{ key-down f { C+ } "k" } clear-editor } + { T{ key-down f { C+ } "d" } delete-next-character/eof } } define-command-map interactor "completion" f { @@ -394,6 +398,7 @@ interactor "completion" f { { T{ key-down f { C+ } "p" } recall-previous } { T{ key-down f { C+ } "n" } recall-next } { T{ key-down f { C+ } "r" } history-completion-popup } + { T{ key-down f { C+ } "s" } history-completion-popup } } define-command-map : introduction. ( -- ) @@ -453,7 +458,6 @@ listener-gadget "toolbar" f { { T{ key-down f { A+ } "u" } com-auto-use } { T{ key-down f { A+ } "k" } clear-output } { T{ key-down f { A+ } "K" } clear-stack } - { T{ key-down f { C+ } "d" } com-end } { T{ key-down f f "F1" } com-help } } define-command-map diff --git a/basis/ui/tools/operations/operations.factor b/basis/ui/tools/operations/operations.factor index 5738baafb4..da0d19e5d4 100644 --- a/basis/ui/tools/operations/operations.factor +++ b/basis/ui/tools/operations/operations.factor @@ -68,14 +68,14 @@ IN: ui.tools.operations } define-operation [ pathname? ] \ edit-file H{ - { +keyboard+ T{ key-down f { C+ } "e" } } + { +keyboard+ T{ key-down f { C+ } "E" } } { +primary+ t } { +secondary+ t } { +listener+ t } } define-operation [ definition-mixin? ] \ edit H{ - { +keyboard+ T{ key-down f { C+ } "e" } } + { +keyboard+ T{ key-down f { C+ } "E" } } { +listener+ t } } define-operation @@ -100,17 +100,17 @@ IN: ui.tools.operations [ definition-mixin? ] \ com-forget H{ } define-operation [ topic? ] \ com-browse H{ - { +keyboard+ T{ key-down f { C+ } "h" } } + { +keyboard+ T{ key-down f { C+ } "H" } } { +primary+ t } } define-operation [ word? ] \ usage. H{ - { +keyboard+ T{ key-down f { C+ } "u" } } + { +keyboard+ T{ key-down f { C+ } "U" } } { +listener+ t } } define-operation [ word? ] \ fix H{ - { +keyboard+ T{ key-down f { C+ } "f" } } + { +keyboard+ T{ key-down f { C+ } "F" } } { +listener+ t } } define-operation @@ -155,24 +155,24 @@ M: word com-stack-effect 1quotation com-stack-effect ; ! Quotations [ quotation? ] \ com-stack-effect H{ - { +keyboard+ T{ key-down f { C+ } "i" } } + { +keyboard+ T{ key-down f { C+ } "I" } } { +listener+ t } } define-operation [ quotation? ] \ walk H{ - { +keyboard+ T{ key-down f { C+ } "w" } } + { +keyboard+ T{ key-down f { C+ } "W" } } { +listener+ t } } define-operation [ quotation? ] \ time H{ - { +keyboard+ T{ key-down f { C+ } "t" } } + { +keyboard+ T{ key-down f { C+ } "T" } } { +listener+ t } } define-operation : com-expand-macros ( quot -- ) expand-macros . ; [ quotation? ] \ com-expand-macros H{ - { +keyboard+ T{ key-down f { C+ } "m" } } + { +keyboard+ T{ key-down f { C+ } "M" } } { +listener+ t } } define-operation @@ -189,8 +189,13 @@ PREDICATE: tracked-malloc-ptr < malloc-ptr : com-creation-traceback ( disposable -- ) continuation>> traceback-window ; -[ tracked-disposable? ] \ com-creation-traceback H{ { +primary+ t } } define-operation -[ tracked-malloc-ptr? ] \ com-creation-traceback H{ { +primary+ t } } define-operation +[ tracked-disposable? ] \ com-creation-traceback H{ + { +primary+ t } +} define-operation + +[ tracked-malloc-ptr? ] \ com-creation-traceback H{ + { +primary+ t } +} define-operation ! Operations -> commands interactor