Skip to content

Commit 9401294

Browse files
Heliosmastermk
authored andcommitted
CodeMirror 6 Improvements ✨
* Preserve newlines on kill * Use spliceString * Show alternate keybindings on demo * Also show eval keybindings on demo * Don't scroll editor into view after kill command Co-authored-by: Martin Kavalar <[email protected]> Co-authored-by: Martin Kavalar <[email protected]> Co-authored-by: Martin Kavalar <[email protected]> Co-authored-by: Martin Kavalar <[email protected]> Co-authored-by: Martin Kavalar <[email protected]>
1 parent 3277e2a commit 9401294

File tree

4 files changed

+35
-13
lines changed

4 files changed

+35
-13
lines changed

src/demo/nextjournal/clojure_mode/demo.cljs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,14 @@
108108
(cond-> {"ArrowUp" ""
109109
"ArrowDown" ""
110110
"ArrowRight" ""
111-
"ArrowLeft" ""}
111+
"ArrowLeft" ""
112+
"Mod" "Ctrl"}
112113
(mac?)
113114
(merge {"Alt" ""
114115
"Shift" ""
115116
"Enter" ""
116-
"Ctrl" ""})))
117+
"Ctrl" ""
118+
"Mod" ""})))
117119

118120
(defn render-key [key]
119121
(let [keys (into [] (map #(get ((memoize key-mapping)) % %) (str/split key #"-")))]
@@ -126,22 +128,31 @@
126128
:innerHTML
127129
(tag :div
128130
(tag :h3 {:class "m-3" } "Keybindings")
129-
(tag :table {:cellpadding 0 :class "w-full"}
131+
(tag :table {:cellpadding 0 :class "w-full text-sm"}
132+
(tag :tr
133+
{:class "border-t even:bg-gray-100"}
134+
(tag :td {:class "px-3 py-1 align-top text-sm"} "Command")
135+
(tag :td {:class "px-3 py-1 align-top text-sm"} "Keybinding")
136+
(tag :td {:class "px-3 py-1 align-top text-sm"} "Alternate Binding")
137+
(tag :td {:class "px-3 py-1 align-top text-sm"} "Description"))
130138
(->> keymap/paredit-keymap*
139+
(merge (sci/keymap* "Alt"))
131140
(sort-by first)
132-
(reduce (fn [out [command [{:keys [key shift doc]}]]]
141+
(reduce (fn [out [command [{:keys [key shift doc]} & [{alternate-key :key}]]]]
133142
(str out
134143
(tag :tr
135144
{:class "border-t even:bg-gray-100"}
136145
(tag :td {:class "px-3 py-1 align-top"} (tag :b (name command)))
137146
(tag :td {:class "px-3 py-1 align-top text-sm"} (render-key key))
147+
(tag :td {:class "px-3 py-1 align-top text-sm"} (some-> alternate-key render-key))
138148
(tag :td {:class "px-3 py-1 align-top"} doc))
139149
(when shift
140150
(tag :tr
141151
{:class "border-t even:bg-gray-100"}
142152
(tag :td {:class "px-3 py-1 align-top"} (tag :b (name shift)))
143153
(tag :td {:class "px-3 py-1 align-top text-sm"}
144154
(render-key (str "Shift-" key)))
155+
(tag :td {:class "px-3 py-1 align-top text-sm"})
145156
(tag :td {:class "px-3 py-1 align-top"} ""))))) ""))
146157
"</table>"))))
147158

src/demo/nextjournal/clojure_mode/demo/sci.cljs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@
3131
(on-result))
3232
true)
3333

34+
(defn keymap* [modifier]
35+
{:eval-cell
36+
[{:key "Mod-Enter"
37+
:doc "Evaluate cell"}]
38+
:eval-at-cursor
39+
[{:key (str modifier "-Enter")
40+
:doc "Evaluates form at cursor"}]
41+
:eval-top-level
42+
[{:key (str modifier "-Shift-Enter")
43+
:doc "Evaluates top-level form at cursor"}]})
44+
3445
(defn extension [{:keys [modifier
3546
on-result]}]
3647
(.of view/keymap

src/main/nextjournal/clojure_mode/commands.cljs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@
2828

2929
(defn copy-to-clipboard! [text]
3030
(let [^js focus-el (j/get js/document :activeElement)
31-
input-el (js/document.createElement "input")]
31+
input-el (js/document.createElement "textarea")]
3232
(.setAttribute input-el "class" "clipboard-input")
33-
(.setAttribute input-el "value" text)
33+
(j/assoc! input-el :innerHTML text)
3434
(-> js/document .-body (.appendChild input-el))
3535
(.focus input-el)
3636
(.select input-el)
3737
(js/document.execCommand "copy")
38-
(-> js/document .-body (.removeChild input-el))
39-
(.focus focus-el)))
38+
(.focus focus-el #js {:preventScroll true})
39+
(-> js/document .-body (.removeChild input-el))))
4040

4141
(defn kill* [^js state]
4242
(u/update-ranges state

src/main/nextjournal/clojure_mode/node.cljs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@
210210
([^js state node]
211211
(string state (start node) (end node)))
212212
([^js state from to]
213-
(.slice (.-doc state) from to)))
213+
(.sliceString (.-doc state) from to \newline)))
214214

215215
(defn ancestor? [parent child]
216216
(boolean
@@ -373,7 +373,7 @@
373373
L
374374
R
375375
mid)
376-
-1 (or (u/guard L (every-pred some? #(or (same-edge? %) (not (left-edge? %)))))
377-
R
378-
L
379-
mid))))
376+
-1 (or (u/guard L (every-pred some? #(or (same-edge? %) (not (left-edge? %)))))
377+
R
378+
L
379+
mid))))

0 commit comments

Comments
 (0)