diff --git a/web/package.json b/web/package.json index 29959b687a..f3796d7297 100644 --- a/web/package.json +++ b/web/package.json @@ -23,6 +23,7 @@ "diff": "^4.0.2", "dropbox": "^5.2.0", "localforage": "^1.7.3", + "mousetrap": "^1.6.5", "react": "^16.12.0", "react-dom": "^16.12.0", "react-textarea-autosize": "^8.0.1", diff --git a/web/src/main/frontend/components/onboarding.cljs b/web/src/main/frontend/components/onboarding.cljs index 43324766b0..d72f05c665 100644 --- a/web/src/main/frontend/components/onboarding.cljs +++ b/web/src/main/frontend/components/onboarding.cljs @@ -300,9 +300,10 @@ [:tr [:td "Open Link in Sidebar"] [:td "Shift-Click"]] [:tr [:td "Context Menu"] [:td "Right Click"]] [:tr [:td "Fold/Unfold blocks (when not in edit mode)"] [:td "Tab"]] - [:tr [:td "Toggle document mode"] [:td "Ctrl-Alt-d"]] - [:tr [:td "Toggle between dark/light theme"] [:td "Ctrl-Alt-t"]] - [:tr [:td "Toggle right sidebar"] [:td "Ctrl-Alt-r"]] + [:tr [:td "Toggle document mode"] [:td "t d"]] + [:tr [:td "Toggle between dark/light theme"] [:td "t t"]] + [:tr [:td "Toggle right sidebar"] [:td "t r"]] + [:tr [:td "Toggle Enter/Alt+Enter for inserting new block"] [:td "t e"]] [:tr [:td "Jump to Journals"] [:td "Alt-j"]]]] [:table [:thead diff --git a/web/src/main/frontend/components/sidebar.cljs b/web/src/main/frontend/components/sidebar.cljs index 090081987e..66c45ddd50 100644 --- a/web/src/main/frontend/components/sidebar.cljs +++ b/web/src/main/frontend/components/sidebar.cljs @@ -185,8 +185,8 @@ nil)))) {:did-mount (fn [state] (handler/set-save-before-unload!) + (keyboards/bind-shortcuts!) state)} - (mixins/keyboards-mixin keyboards/keyboards) [state route-match main-content] (let [{:keys [open? close-fn open-fn]} state me (state/sub :me) diff --git a/web/src/main/frontend/keyboards.cljs b/web/src/main/frontend/keyboards.cljs index 1aca535fee..2d30034efa 100644 --- a/web/src/main/frontend/keyboards.cljs +++ b/web/src/main/frontend/keyboards.cljs @@ -7,7 +7,9 @@ [frontend.state :as state] [goog.events.KeyCodes :as codes] [frontend.util :as util] - [medley.core :as medley])) + [medley.core :as medley] + ["mousetrap" :as mousetrap] + [goog.object :as gobj])) ;; KeyCodes.QUESTION_MARK @@ -49,17 +51,20 @@ ;; Markdown ;; Block -(defonce keyboards +(defonce shortcuts (->> { "tab" (editor-handler/on-tab :right) "shift+tab" (editor-handler/on-tab :left) - "ctrl+alt+d" state/toggle-document-mode! "ctrl+z" history-handler/undo! "ctrl+y" history-handler/redo! - "ctrl+alt+t" state/toggle-theme! - "ctrl+alt+r" ui-handler/toggle-right-sidebar! - "ctrl+alt+e" state/toggle-new-block-shortcut! + + ;; Toggle + "t d" state/toggle-document-mode! + "t t" state/toggle-theme! + "t r" ui-handler/toggle-right-sidebar! + "t e" state/toggle-new-block-shortcut! + "ctrl+u" route-handler/go-to-search! "alt+j" route-handler/go-to-journals! "alt+right" editor-handler/zoom-in! @@ -74,3 +79,10 @@ "ctrl+k" editor-handler/html-link-format! "ctrl+h" editor-handler/highlight-format!} (medley/map-keys util/->system-modifier))) + +(defonce bind! (gobj/get mousetrap "bind")) + +(defn bind-shortcuts! + [] + (doseq [[k f] shortcuts] + (bind! k f))) diff --git a/web/yarn.lock b/web/yarn.lock index 579df06690..adaf232e5a 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -2006,6 +2006,11 @@ moment@^2.25.3: resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== +mousetrap@^1.6.5: + version "1.6.5" + resolved "https://registry.yarnpkg.com/mousetrap/-/mousetrap-1.6.5.tgz#8a766d8c272b08393d5f56074e0b5ec183485bf9" + integrity sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"