LoginSignup
4
4

More than 5 years have passed since last update.

Light Tableでマルチカーソルの位置を取得する

Posted at

ついに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のショートカットキーで選択したときでは、格納されているオブジェクトの形式が少し違うようなので注意が必要です。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4