Skip to content

Commit

Permalink
Added quick access to mode keymaps with ",".
Browse files Browse the repository at this point in the history
Added multimethod to describe mode.
  • Loading branch information
geksilla committed Dec 11, 2015
1 parent 1e8b5c3 commit 9e47be3
Show file tree
Hide file tree
Showing 11 changed files with 51 additions and 20 deletions.
18 changes: 16 additions & 2 deletions src/cljs/proton/core.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@
(defonce command-tree (atom {}))
(defonce current-chain (atom []))

(def mode-key :m)
(def mode-keys [:m (keyword ",")])
(defn is-mode-key? [chain-key]
(not (nil? (some #{mode-key} chain-key))))
(not (nil? (some #{(first chain-key)} mode-keys))))

(defn chain [e]
(let [key-code (helpers/extract-keycode-from-event e)
Expand Down Expand Up @@ -153,6 +153,7 @@
(atom-env/mark-last-step-as-completed!))))

(atom-env/insert-process-step! "All done!" "")
(proton/init-modes-for-layers all-layers)
(mode-manager/activate-mode (atom-env/get-active-editor))
(.setTimeout js/window #(atom-env/hide-modal-panel) 3000))))))

Expand All @@ -161,10 +162,21 @@
(atom-env/update-bottom-panel (helpers/tree->html @command-tree))
(atom-env/activate-proton-mode!))

(defn on-comma []
(reset! current-chain [])
(if-let [mode-keymap (mode-manager/get-mode-keybindings (atom-env/get-active-editor))]
(let [core-mode-key (first mode-keys)]
(swap! current-chain conj core-mode-key)
(swap! command-tree assoc-in [:m] mode-keymap)
(atom-env/update-bottom-panel (helpers/tree->html (get-in @command-tree @current-chain)))
(atom-env/activate-proton-mode!))))

(defn activate [state]
(.setTimeout js/window #(init) 2000)
(let [disposable (.onDidMatchBinding keymaps #(if (= "space" (.-keystrokes %)) (on-space)))]
(swap! disposables conj disposable))
(let [disposable (.onDidMatchBinding keymaps #(if (= "," (.-keystrokes %)) (on-comma)))]
(swap! disposables conj disposable))
(swap! disposables conj (proton/panel-item-subscription))
(.add subscriptions (.add commands "atom-text-editor.proton-mode" "proton:chain" chain)))

Expand All @@ -173,6 +185,8 @@
(doseq [disposable @disposables]
(.log js/console disposable)
(.dispose disposable))
(reset! mode-manager/editors {})
(reset! mode-manager/modes {})
(atom-env/reset-process-steps!))

(defn serialize [] nil)
Expand Down
1 change: 1 addition & 0 deletions src/cljs/proton/layers/base.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@
(defmulti get-packages dispatch)
(defmulti get-keybindings dispatch)
(defmulti get-keymaps dispatch)
(defmulti describe-mode dispatch)
3 changes: 2 additions & 1 deletion src/cljs/proton/layers/core/core.cljs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
(ns proton.layers.core.core
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps]])
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps describe-mode]])
(:require [proton.lib.proton :as proton]
[proton.lib.package_manager :as package]
[proton.layers.core.keybindings :refer [keybindings]]
Expand Down Expand Up @@ -55,3 +55,4 @@
(defmethod get-keybindings :core [] @keybindings)
(defmethod get-keymaps :core [] @keymaps)
(defmethod get-packages :core [] @packages)
(defmethod describe-mode :core [] {})
24 changes: 14 additions & 10 deletions src/cljs/proton/layers/lang/clojure/core.cljs
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
(ns proton.layers.lang.clojure.core
(:require [proton.lib.mode :as mode :refer [define-mode define-keybindings]]
[proton.lib.atom :as atom-env :refer [set-grammar]])
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps]]))
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps describe-mode]]))

(defn- clojure-mode-init []
(atom-env/set-grammar "Clojure"))

(defmethod init-layer! :lang/clojure
[_ config]
()
(mode/define-mode :clojure
:atom-grammars ["Clojure"]
:file-extensions [#"\.proton$"]
:init (fn []
(atom-env/set-grammar "Clojure")))
(mode/define-keybindings :clojure
{:t {:category "toggles"
:p {:action "parinfer:toggleMode" :title "Toggle Parinfer Mode"}}})
(println "init clojure"))

(defmethod get-packages :lang/clojure
[]
[:Parinfer])

(defmethod describe-mode :lang/clojure []
{:mode-name :clojure
:atom-grammars ["Clojure"]
:file-extensions [#"\.proton$"]
:mode-keybindings
{:t {:category "toggles"
:p {:action "parinfer:toggleMode" :title "Toggle Parinfer Mode"}}}
:init clojure-mode-init})


(defmethod get-keymaps :lang/clojure [] [])
(defmethod get-initial-config :lang/clojure [] [])
(defmethod get-keybindings :lang/clojure [] {})
Expand Down
3 changes: 2 additions & 1 deletion src/cljs/proton/layers/lang/julia/core.cljs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
(ns proton.layers.lang.julia.core
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps]]))
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps describe-mode]]))

(defmethod get-initial-config :lang/julia
[]
Expand All @@ -25,3 +25,4 @@
(defmethod get-keybindings :julia [] (get-keybindings :lang/julia))
(defmethod get-initial-config :julia [] (get-initial-config :lang/julia))
(defmethod init-layer! :julia [] (init-layer! :lang/julia))
(defmethod describe-mode :lang/julia [] {})
4 changes: 3 additions & 1 deletion src/cljs/proton/layers/lang/latex/core.cljs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
(ns proton.layers.lang.latex.core
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps]]))
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps describe-mode]]))

(defmethod get-initial-config :lang/latex []
["proton.lang.latex.use-latex-plus" false])
Expand Down Expand Up @@ -33,3 +33,5 @@
(defmethod get-keymaps :lang/latex
[]
[])

(defmethod describe-mode :lang/latex [] {})
3 changes: 2 additions & 1 deletion src/cljs/proton/layers/lang/python/core.cljs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
(ns proton.layers.lang.python.core
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps]]))
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps describe-mode]]))

(defmethod init-layer! :lang/python
[_ config]
Expand All @@ -20,3 +20,4 @@
(defmethod get-keybindings :python [] (get-keybindings :lang/python))
(defmethod get-initial-config :python [] (get-initial-config :lang/python))
(defmethod init-layer! :python [] (init-layer! :lang/python))
(defmethod describe-mode :lang/python [] {})
3 changes: 2 additions & 1 deletion src/cljs/proton/layers/tools/git/core.cljs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
(ns proton.layers.tools.git.core
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps]]))
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps describe-mode]]))

(defmethod init-layer! :tools/git
[_ config]
Expand Down Expand Up @@ -35,3 +35,4 @@
(defmethod get-keybindings :git [] (get-keybindings :tools/git))
(defmethod get-initial-config :git [] (get-initial-config :tools/git))
(defmethod init-layer! :git [] (init-layer! :tools/git))
(defmethod describe-mode :git [] {})
3 changes: 2 additions & 1 deletion src/cljs/proton/layers/tools/minimap/core.cljs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
(ns proton.layers.tools.minimap.core
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps]]))
(:use [proton.layers.base :only [init-layer! get-initial-config get-keybindings get-packages get-keymaps describe-mode]]))

(defmethod init-layer! :tools/minimap
[_ config]
Expand All @@ -17,3 +17,4 @@

(defmethod get-keymaps :tools/minimap [] [])
(defmethod get-initial-config :tools/minimap [] [])
(defmethod describe-mode :tools/minimap [] {})
4 changes: 2 additions & 2 deletions src/cljs/proton/lib/mode.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@

(defn is-mode-activated? [editor] (get editor :active))

(defn define-mode [name & options]
(swap! modes assoc-in [name] (apply hash-map options)))
(defn define-mode [name options]
(swap! modes assoc-in [name] options))

(defn define-keybindings [name keymap]
(swap! modes assoc-in [name :mode-keybindings] keymap))
Expand Down
5 changes: 5 additions & 0 deletions src/cljs/proton/lib/proton.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@
(defn init-layers! [layers config]
(doall (map #(layerbase/init-layer! (keyword %) config) layers)))

(defn init-modes-for-layers [layers]
(doall
(map #(mode-manager/define-mode (get % :mode-name) (dissoc % :mode-name))
(filter #(not (nil? (get % :mode-name))) (map #(layerbase/describe-mode %) layers)))))

(defn- on-active-pane-item [item]
(if-let [editor (atom-env/get-active-editor)]
(when (= (.-id editor) (.-id item))
Expand Down

0 comments on commit 9e47be3

Please sign in to comment.