]> gitweb.factorcode.org Git - factor.git/commitdiff
ui: better platform-specific keybindings.
authorJohn Benediktsson <mrjbq7@gmail.com>
Mon, 29 Mar 2021 21:35:41 +0000 (14:35 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 29 Mar 2021 21:35:41 +0000 (14:35 -0700)
Some major changes include on macOS we pass M+ for Command and A+ for
Option, which matches some of the documentation, but now requires us to
have some OS-specific code in the define-command-map usage.

basis/ui/backend/cocoa/views/views.factor
basis/ui/commands/commands-tests.factor
basis/ui/gadgets/editors/editors.factor
basis/ui/gestures/gestures-docs.factor
basis/ui/gestures/gestures.factor
basis/ui/tools/browser/browser.factor
basis/ui/tools/listener/listener.factor
basis/ui/tools/tools.factor

index 820b4831dd377d753b398b35e7375c4e72441169..fb33261b3280118dcd27d83938a2b7b99df8bb6d 100644 (file)
@@ -43,8 +43,8 @@ CONSTANT: NSFunctionKeyMask   0x800000
 CONSTANT: modifiers {
         { S+ $ NSShiftKeyMask }
         { C+ $ NSControlKeyMask }
-        { A+ $ NSCommandKeyMask }
-        { M+ $ NSAlternateKeyMask }
+        { M+ $ NSCommandKeyMask }
+        { A+ $ NSAlternateKeyMask }
     }
 
 CONSTANT: key-codes
index 48009fb7b4ec6f086b20752479a082e4f4d27743..4d62339bd121d855b1431209f7eb65148f27982f 100644 (file)
@@ -23,19 +23,19 @@ testing "testing" "hey" {
 } define-command-map
 
 os macosx? [
-    [ "⌘A" ] [ T{ key-down f { A+ } "a" } gesture>string ] unit-test
-    [ "B" ] [ T{ key-down f f "b" } gesture>string ] unit-test
+    { "⌘A" } [ T{ key-down f { M+ } "a" } gesture>string ] unit-test
+    { "B" } [ T{ key-down f f "b" } gesture>string ] unit-test
 
-    [ "⌃X" ] [
+    { "⌃X" } [
         [
             { $command testing "testing" com-test-1 } print-element
         ] with-string-writer
     ] unit-test
 ] [
-    [ "A+a" ] [ T{ key-down f { A+ } "a" } gesture>string ] unit-test
-    [ "b" ] [ T{ key-down f f "b" } gesture>string ] unit-test
+    { "A+a" } [ T{ key-down f { A+ } "a" } gesture>string ] unit-test
+    { "b" } [ T{ key-down f f "b" } gesture>string ] unit-test
 
-    [ "C+x" ] [
+    { "C+x" } [
         [
             { $command testing "testing" com-test-1 } print-element
         ] with-string-writer
index ddde9d5a6f37c3884f0c87293ac1458a6e506845..9bdc25b529bac7d2840b164524931ee2ac480db3 100644 (file)
@@ -2,14 +2,13 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: accessors arrays assocs calendar colors.constants
 combinators combinators.short-circuit documents
-documents.elements fonts fry grouping kernel locals make math
-math.functions math.order math.ranges math.rectangles
-math.vectors models models.arrow namespaces opengl sequences
-sorting splitting system timers ui.baseline-alignment
+documents.elements fonts fry grouping kernel literals locals
+make math math.functions math.order math.ranges math.rectangles
+math.vectors models models.arrow namespaces opengl opengl.gl
+sequences sorting splitting system timers ui.baseline-alignment
 ui.clipboards ui.commands ui.gadgets ui.gadgets.borders
 ui.gadgets.line-support ui.gadgets.menus ui.gadgets.scrollers
-ui.gestures ui.pens.solid ui.render ui.text ui.theme unicode
-opengl.gl ;
+ui.gestures ui.pens.solid ui.render ui.text ui.theme unicode ;
 IN: ui.gadgets.editors
 
 TUPLE: editor < line-gadget
@@ -432,12 +431,17 @@ editor "editing" f {
     { redo-action com-redo }
     { T{ key-down f f "DELETE" } delete-next-character }
     { T{ key-down f f "BACKSPACE" } delete-previous-character }
+    { T{ key-down f { S+ } "DELETE" } delete-next-character }
     { T{ key-down f { S+ } "BACKSPACE" } delete-previous-character }
-    { T{ key-down f { C+ } "DELETE" } delete-next-word }
-    { 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 }
-} os unix? [ {
+    { T{ key-down f ${ os macosx? A+ C+ ? } "DELETE" } delete-next-word }
+    { T{ key-down f ${ os macosx? A+ C+ ? } "BACKSPACE" } delete-previous-word }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "DELETE" } delete-to-end-of-line }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "BACKSPACE" } delete-to-start-of-line }
+} os macosx? [ {
+    { T{ key-down f { C+ } "DELETE" } delete-next-character }
+    { T{ key-down f { C+ } "BACKSPACE" } delete-previous-character }
+} append ] when os unix? [ {
+    ! { T{ key-down f { C+ } "t" } transpose-character }
     { 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 }
@@ -487,13 +491,22 @@ editor "caret-motion" f {
     { T{ button-down } position-caret }
     { T{ key-down f f "LEFT" } previous-character }
     { T{ key-down f f "RIGHT" } next-character }
-    { T{ key-down f { C+ } "LEFT" } previous-word }
-    { T{ key-down f { C+ } "RIGHT" } next-word }
+    { T{ key-down f ${ os macosx? A+ C+ ? } "LEFT" } previous-word }
+    { T{ key-down f ${ os macosx? A+ C+ ? } "RIGHT" } next-word }
     { T{ key-down f f "HOME" } start-of-line }
     { 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 }
-} os unix? [ {
+    ! { T{ key-down f ${ os macosx? A+ C+ ? } "UP" } start-of-paragraph }
+    ! { T{ key-down f ${ os macosx? A+ C+ ? } "DOWN" } end-of-paragraph }
+    { T{ key-down f ${ os macosx? A+ C+ ? } "HOME" } start-of-document }
+    { T{ key-down f ${ os macosx? A+ C+ ? } "END" } end-of-document }
+} os macosx? [ {
+    { T{ key-down f { M+ } "LEFT" } start-of-line }
+    { T{ key-down f { M+ } "RIGHT" } end-of-line }
+    ! { T{ key-down f { M+ } "UP" } start-of-paragraph }
+    ! { T{ key-down f { M+ } "DOWN" } end-of-paragraph }
+    { T{ key-down f { M+ } "HOME" } start-of-document }
+    { T{ key-down f { M+ } "END" } end-of-document }
+} append ] when os unix? [ {
     { 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 }
@@ -549,13 +562,22 @@ editor "selection" f {
     { T{ key-down f { C+ } "l" } select-line }
     { T{ key-down f { S+ } "LEFT" } select-previous-character }
     { T{ key-down f { S+ } "RIGHT" } select-next-character }
-    { T{ key-down f { S+ C+ } "LEFT" } select-previous-word }
-    { T{ key-down f { S+ C+ } "RIGHT" } select-next-word }
+    { T{ key-down f ${ S+ os macosx? A+ C+ ? } "LEFT" } select-previous-word }
+    { T{ key-down f ${ S+ os macosx? A+ C+ ? } "RIGHT" } select-next-word }
     { T{ key-down f { S+ } "HOME" } select-start-of-line }
     { T{ key-down f { S+ } "END" } select-end-of-line }
-    { T{ key-down f { S+ C+ } "HOME" } select-start-of-document }
-    { T{ key-down f { S+ C+ } "END" } select-end-of-document }
-} define-command-map
+    ! { T{ key-down f ${ S+ os macosx? A+ C+ ? } "UP" } select-start-of-paragraph }
+    ! { T{ key-down f ${ S+ os macosx? A+ C+ ? } "DOWN" } select-end-of-paragraph }
+    { T{ key-down f ${ S+ os macosx? A+ C+ ? } "HOME" } select-start-of-document }
+    { T{ key-down f ${ S+ os macosx? A+ C+ ? } "END" } select-end-of-document }
+} os macosx? [ {
+    { T{ key-down f { S+ M+ } "LEFT" } select-start-of-line }
+    { T{ key-down f { S+ M+ } "RIGHT" } select-end-of-line }
+    ! { T{ key-down f ${ S+ M+ } "UP" } select-start-of-paragraph }
+    ! { T{ key-down f ${ S+ M+ } "DOWN" } select-end-of-paragraph }
+    { T{ key-down f { S+ M+ } "HOME" } select-start-of-document }
+    { T{ key-down f { S+ M+ } "END" } select-end-of-document }
+} append ] when define-command-map
 
 : editor-menu ( editor -- )
     {
index ed8ef8d3332d339bc47415bceb32785035deca60..5577d906cf67bf9ec8ac6418c4b0af3ae0c0a64f 100644 (file)
@@ -125,10 +125,10 @@ HELP: C+
 { $description "Control key modifier." } ;
 
 HELP: A+
-{ $description "Alt key modifier." } ;
+{ $description "Alt key modifier. This is the Option key on Mac OS X." } ;
 
 HELP: M+
-{ $description "Meta key modifier. This is the Command key on Mac OS X and the Windows key on other Unices and Windows." } ;
+{ $description "Meta key modifier. This is the Command key on Mac OS X and the Windows key on other Unix and Windows platforms." } ;
 
 HELP: S+
 { $description "Shift key modifier." } ;
@@ -248,9 +248,9 @@ ARTICLE: "gesture-differences" "Gesture handling differences between platforms"
 "On Mac OS X, the modifier keys map as follows:"
 { $table
     { { $link S+ } "Shift" }
-    { { $link A+ } "Command (Apple)" }
+    { { $link A+ } "Option" }
     { { $link C+ } "Control" }
-    { { $link M+ } "Option" }
+    { { $link M+ } "Command (Apple)" }
 }
 "On Windows and X11:"
 { $table
index bcb56c5cb0543c9bf12a3d47ad57f2584a94212b..98b8d2f4eee083dee757cf722efff9de24c0b18e 100644 (file)
@@ -323,8 +323,8 @@ HOOK: modifiers>string os ( modifiers -- string )
 M: macosx modifiers>string
     [
         {
-            { A+ [ "\u002318" ] }
-            { M+ [ "\u002325" ] }
+            { M+ [ "\u002318" ] }
+            { A+ [ "\u002325" ] }
             { S+ [ "\u0021e7" ] }
             { C+ [ "\u002303" ] }
         } case
index 9eca133cc075696a18362d9658728bf69e5cb337..0abc1af2e02d3066aac10d02c4fd444b6ad26b57 100644 (file)
@@ -3,13 +3,14 @@
 USING: accessors arrays assocs classes combinators
 combinators.short-circuit compiler.units debugger fonts fry help
 help.apropos help.crossref help.home help.markup help.stylesheet
-help.topics io.styles kernel locals make math.vectors models
-namespaces sequences sets ui ui.commands ui.gadgets ui.gadgets.borders
-ui.gadgets.editors ui.gadgets.glass ui.gadgets.panes
-ui.gadgets.scrollers ui.gadgets.status-bar ui.gadgets.toolbar
-ui.gadgets.tracks ui.gadgets.viewports ui.gadgets.worlds ui.gestures
-ui.pens.solid ui.theme ui.tools.browser.history
-ui.tools.browser.popups ui.tools.common unicode vocabs ;
+help.topics io.styles kernel literals locals make math math.vectors
+models namespaces sequences sets system ui ui.commands
+ui.gadgets ui.gadgets.borders ui.gadgets.editors
+ui.gadgets.glass ui.gadgets.panes ui.gadgets.scrollers
+ui.gadgets.status-bar ui.gadgets.toolbar ui.gadgets.tracks
+ui.gadgets.viewports ui.gadgets.worlds ui.gestures ui.pens.solid
+ui.theme ui.tools.browser.history ui.tools.browser.popups
+ui.tools.common unicode vocabs ;
 IN: ui.tools.browser
 
 TUPLE: browser-gadget < tool history scroller search-field popup ;
@@ -188,11 +189,11 @@ M: browser-gadget focusable-child* search-field>> ;
 \ glossary H{ { +nullary+ t } } define-command
 
 browser-gadget "toolbar" f {
-    { T{ key-down f { A+ } "LEFT" } com-back }
-    { T{ key-down f { A+ } "RIGHT" } com-forward }
-    { T{ key-down f { A+ } "H" } com-home }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "LEFT" } com-back }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "RIGHT" } com-forward }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "HOME" } com-home }
     { T{ key-down f f "F1" } browser-help }
-    { T{ key-down f { A+ } "F1" } glossary }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "F1" } glossary }
 } define-command-map
 
 : ?show-help ( link browser -- )
@@ -208,12 +209,15 @@ browser-gadget "toolbar" f {
 : com-next ( browser -- ) [ next-article ] navigate ;
 
 browser-gadget "navigation" "Commands for navigating in the article hierarchy" {
-    { T{ key-down f { A+ } "u" } com-up }
-    { T{ key-down f { A+ } "p" } com-prev }
-    { T{ key-down f { A+ } "n" } com-next }
-    { T{ key-down f { A+ } "k" } com-show-outgoing-links }
-    { T{ key-down f { A+ } "K" } com-show-incoming-links }
-} define-command-map
+    { T{ key-down f ${ os macosx? M+ A+ ? } "UP" } com-up }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "p" } com-prev }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "n" } com-next }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "k" } com-show-outgoing-links }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "K" } com-show-incoming-links }
+} os macosx? [ {
+    { T{ key-down f { M+ } "[" } com-back }
+    { T{ key-down f { M+ } "]" } com-forward }
+} append ] when define-command-map
 
 browser-gadget "multi-touch" f {
     { left-action com-back }
@@ -243,11 +247,16 @@ browser-gadget "scrolling"
 : com-font-size-minus ( browser -- )
     -2 adjust-help-font-size model>> notify-connections ;
 
+: com-font-size-normal ( browser -- )
+    font-size-span default-style get font-size of -
+    adjust-help-font-size model>> notify-connections ;
+
 browser-gadget "fonts" f {
-    { T{ key-down f { A+ } "+" } com-font-size-plus }
-    { T{ key-down f { A+ } "=" } com-font-size-plus }
-    { T{ key-down f { A+ } "_" } com-font-size-minus }
-    { T{ key-down f { A+ } "-" } com-font-size-minus }
+    { T{ key-down f ${ os macosx? M+ C+ ? } "+" } com-font-size-plus }
+    { T{ key-down f ${ os macosx? M+ C+ ? } "=" } com-font-size-plus }
+    { T{ key-down f ${ os macosx? M+ C+ ? } "_" } com-font-size-minus }
+    { T{ key-down f ${ os macosx? M+ C+ ? } "-" } com-font-size-minus }
+    { T{ key-down f ${ os macosx? M+ C+ ? } "0" } com-font-size-normal }
 } define-command-map
 
 MAIN: browser-window
index 917467a0be030c41cc77571a95117b0c734f31da..bfcfe4d8403e53198ef1b92a0826f9d0db391a78 100644 (file)
@@ -455,19 +455,19 @@ interactor "completion" f {
 
 listener-gadget "toolbar" f {
     { f restart-listener }
-    { 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 ${ os macosx? M+ A+ ? } "u" } com-auto-use }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "k" } clear-output }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "K" } clear-stack }
     { T{ key-down f f "F1" } com-help }
 } define-command-map
 
 listener-gadget "scrolling"
 "The listener's scroller can be scrolled from the keyboard."
 {
-    { T{ key-down f { A+ } "UP" } com-scroll-up }
-    { T{ key-down f { A+ } "DOWN" } com-scroll-down }
-    { T{ key-down f { A+ } "PAGE_UP" } com-page-up }
-    { T{ key-down f { A+ } "PAGE_DOWN" } com-page-down }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "UP" } com-scroll-up }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "DOWN" } com-scroll-down }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "PAGE_UP" } com-page-up }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "PAGE_DOWN" } com-page-down }
 } define-command-map
 
 listener-gadget "multi-touch" f {
@@ -520,9 +520,14 @@ PRIVATE>
 : com-font-size-minus ( listener -- )
     -2 adjust-listener-font-size ;
 
+: com-font-size-normal ( listener -- )
+    default-font-size over input>> font>> size>> -
+    adjust-listener-font-size ;
+
 listener-gadget "fonts" f {
-    { T{ key-down f { A+ } "+" } com-font-size-plus }
-    { T{ key-down f { A+ } "=" } com-font-size-plus }
-    { T{ key-down f { A+ } "_" } com-font-size-minus }
-    { T{ key-down f { A+ } "-" } com-font-size-minus }
+    { T{ key-down f ${ os macosx? M+ C+ ? } "+" } com-font-size-plus }
+    { T{ key-down f ${ os macosx? M+ C+ ? } "=" } com-font-size-plus }
+    { T{ key-down f ${ os macosx? M+ C+ ? } "_" } com-font-size-minus }
+    { T{ key-down f ${ os macosx? M+ C+ ? } "-" } com-font-size-minus }
+    { T{ key-down f ${ os macosx? M+ C+ ? } "0" } com-font-size-normal }
 } define-command-map
index 8f096d0c3d4cb1a43faf16c0acec440964aa100c..85c6eabdd72518a759385625c949dfb272832ec5 100644 (file)
@@ -1,8 +1,9 @@
 ! Copyright (C) 2006, 2009 Slava Pestov.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: memory namespaces system ui ui.backend ui.commands
-ui.gestures ui.tools.browser ui.tools.common ui.tools.error-list
-ui.tools.listener vocabs.refresh ;
+USING: kernel literals memory namespaces sequences system ui
+ui.backend ui.commands ui.gestures ui.tools.browser
+ui.tools.common ui.tools.error-list ui.tools.listener
+vocabs.refresh ;
 IN: ui.tools
 
 \ refresh-all H{ { +nullary+ t } { +listener+ t } } define-command
@@ -14,19 +15,26 @@ IN: ui.tools
 \ com-exit H{ { +nullary+ t } } define-command
 
 tool "tool-switching" f {
-    { T{ key-down f { A+ } "l" } show-listener }
-    { T{ key-down f { A+ } "L" } listener-window }
-    { T{ key-down f { A+ } "b" } show-browser }
-    { T{ key-down f { A+ } "B" } browser-window }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "l" } show-listener }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "L" } listener-window }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "b" } show-browser }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "B" } browser-window }
 } define-command-map
 
 tool "common" f {
-    { T{ key-down f { A+ } "w" } close-window }
-    { T{ key-down f { A+ } "F" } toggle-fullscreen }
-    { T{ key-down f { A+ } "q" } com-exit }
+    { T{ key-down f ${ os macosx? M+ A+ ? } "q" } com-exit }
     { T{ key-down f f "F2" } refresh-all }
     { T{ key-down f f "F3" } show-error-list }
-} define-command-map
+} os macosx? {
+    { T{ key-down f { M+ } "w" } close-window }
+    { T{ key-down f { M+ } "q" } com-exit }
+    { T{ key-down f { C+ M+ } "f" } toggle-fullscreen }
+} {
+    { T{ key-down f { C+ } "w" } close-window }
+    { T{ key-down f { C+ } "F4" } close-window }
+    { T{ key-down f { A+ } "F4" } com-exit }
+    { T{ key-down f f "F11" } ? toggle-fullscreen }
+} ? prepend define-command-map
 
 : ui-tools-main ( -- )
     f ui-stop-after-last-window? set-global