ついにLight Table 0.6.6でマルチカーソルに対応しました。
他にも右クリックで実行結果のコピーができるようになったし、複数フォント設定もできるようですね~
それはさておき、Light Tableのプラグインを作るときなど、どうやってカーソル位置を取るかについてメモしておきます
以下の.listSelectionsのとこで、anchorやheadのプロパティを持つJSオブジェクトの配列が取得できます。
anchorやheadは、lineとchをプロパティに持ちます
sample.cljs
(ns sample.core
(:require [lt.objs.editor :as editor]
[lt.objs.editor.pool :as pool]))
(do (range 2) (range 4)
(map - (range 6)))
(def select (.listSelections (editor/->cm-ed (pool/last-active))))
(.. (first select) -anchor -line)
(for [s select
ah ["anchor" "head"]
lc ["line" "ch"]]
(aget s ah lc))
以下3箇所を選択して実行したときのfor
の結果が以下になります
-
(range 2)
の部分を左から右に選択 -
-
の部分を右から左に選択 -
(def select...
の部分を左から右に選択
(4 4 4 13 5 8 5 7 7 0 7 66)
anchorは左から右に選択したときの左端の部分で、headは右端の部分(カーソルがある部分)になります。
lineとchはその名のとおり、行数列数ですね
なお、.listSelectionsの結果の配列は(行数列数で)必ずソートされた状態で格納されてるようです。
また、マウスやキーボードの矢印で選択したときと、Pareditのショートカットキーで選択したときでは、格納されているオブジェクトの形式が少し違うようなので注意が必要です。