From 55d3280529e6869162b4013d0b64460cc8cb3900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20Axel=20S=C3=B8gaard?= Date: Sat, 27 Mar 2021 18:38:12 +0100 Subject: [PATCH] Add option in that controls Home and End. Default unchanged. --- gui-lib/framework/private/keymap-global.rkt | 45 ++++++++++++++++++--- gui-lib/framework/private/main.rkt | 1 + gui-lib/framework/private/preferences.rkt | 2 + 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/gui-lib/framework/private/keymap-global.rkt b/gui-lib/framework/private/keymap-global.rkt index 0a13e82a5..48ceb0bc3 100644 --- a/gui-lib/framework/private/keymap-global.rkt +++ b/gui-lib/framework/private/keymap-global.rkt @@ -520,7 +520,38 @@ "delete-next-character" "delete-previous-character") edit event #t)))] - + [home-key + (λ (edit event) + (let ([kmap (send edit get-keymap)]) + (send kmap call-function + (if (preferences:get 'framework:home/end-to-beginning/end-of-document?) + "beginning-of-file" + "beginning-of-line") + edit event #t)))] + [end-key + (λ (edit event) + (let ([kmap (send edit get-keymap)]) + (send kmap call-function + (if (preferences:get 'framework:home/end-to-beginning/end-of-document?) + "end-of-file" + "end-of-line") + edit event #t)))] + [shift-home-key + (λ (edit event) + (let ([kmap (send edit get-keymap)]) + (send kmap call-function + (if (preferences:get 'framework:home/end-to-beginning/end-of-document?) + "select-to-beginning-of-file" + "select-to-beginning-of-line") + edit event #t)))] + [shift-end-key + (λ (edit event) + (let ([kmap (send edit get-keymap)]) + (send kmap call-function + (if (preferences:get 'framework:home/end-to-beginning/end-of-document?) + "select-to-end-of-file" + "select-to-end-of-line") + edit event #t)))] [toggle-overwrite (λ (edit event) (when (preferences:get 'framework:overwrite-mode-keybindings) @@ -813,6 +844,10 @@ (add-m "select-click-line" select-click-line) (add "delete-key" delete-key) + (add "home-key" home-key) + (add "end-key" end-key) + (add "shift-home-key" shift-home-key) + (add "shift-end-key" shift-end-key) (add "mouse-popup-menu" mouse-popup-menu) @@ -883,15 +918,15 @@ (map "c:e" "end-of-line") (map "d:right" "end-of-line") - (map "end" "end-of-line") - (map "s:end" "select-to-end-of-line") + (map "end" "end-key") + (map "s:end" "shift-end-key") (map "s:c:e" "select-to-end-of-line") (map "s:d:right" "select-to-end-of-line") (map "c:a" "beginning-of-line") (map "d:left" "beginning-of-line") - (map "home" "beginning-of-line") - (map "s:home" "select-to-beginning-of-line") + (map "home" "home-key") + (map "s:home" "shift-home-key") (map "s:c:a" "select-to-beginning-of-line") (map "s:d:left" "select-to-beginning-of-line") diff --git a/gui-lib/framework/private/main.rkt b/gui-lib/framework/private/main.rkt index 7a40bef86..e97c57c1f 100644 --- a/gui-lib/framework/private/main.rkt +++ b/gui-lib/framework/private/main.rkt @@ -560,6 +560,7 @@ (preferences:set-default 'framework:verify-exit #t boolean?) (preferences:set-default 'framework:delete-forward? #t boolean?) +(preferences:set-default 'framework:home/end-to-beginning/end-of-document? #f boolean?) (preferences:set-default 'framework:show-periods-in-dirlist #f boolean?) (preferences:set-default 'framework:file-dialogs 'std (λ (x) (and (memq x '(common std)) #t))) diff --git a/gui-lib/framework/private/preferences.rkt b/gui-lib/framework/private/preferences.rkt index c2c6d42a0..56a73fdb9 100644 --- a/gui-lib/framework/private/preferences.rkt +++ b/gui-lib/framework/private/preferences.rkt @@ -465,6 +465,8 @@ the state transitions / contracts are: (add-check editor-panel 'framework:delete-forward? (string-constant map-delete-to-backspace) not not) + (add-check editor-panel 'framework:home/end-to-beginning/end-of-document? + (string-constant home/end-is-go-to-beginning/end-of-document)) (add-check editor-panel 'framework:auto-set-wrap? (string-constant wrap-words-in-editor-buffers))