]> gitweb.factorcode.org Git - factor.git/commitdiff
ui: standard readline style keybindings.
authorJohn Benediktsson <mrjbq7@gmail.com>
Wed, 24 Mar 2021 23:12:02 +0000 (16:12 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 24 Mar 2021 23:12:02 +0000 (16:12 -0700)
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.

basis/ui/gadgets/editors/editors.factor
basis/ui/tools/debugger/debugger.factor
basis/ui/tools/listener/listener-docs.factor
basis/ui/tools/listener/listener.factor
basis/ui/tools/operations/operations.factor

index 6a2405bd6e1fb6e59fa5d6d7a9e3078212acb54d..39eb30b562500582284ea45441b7ccaa713263f8 100644 (file)
@@ -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 ;
index 8425b9249fc3c3b5856831f354fe3dccb595799f..349e91ed6df34dfa09c47d2027c3e79875d93d5a 100644 (file)
@@ -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
index 68d12f0a235550f304787de163da28aab7efdecd..7535771fa144036c01b81c11aecd9ff5a431a84d 100644 (file)
@@ -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" } "." ;
index 7b735ecee7fcf98e8f4a45c3b67f948d597a9d8f..917467a0be030c41cc77571a95117b0c734f31da 100644 (file)
@@ -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
 
index 5738baafb47e6abd42e2fec8e438b47ab25589af..da0d19e5d4b3c7ae35e4ac6f301a79e37e17cc22 100644 (file)
@@ -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