scrapbox-cursor-observer
用途
直前のcursorの位置を取得したいときに使う
いらないことがわかった
必要だった
使い方
cursorの位置の記録を開始する
cursorのfocusがない間は記録をしない
code:js
cursorObserver.start();
現在記録されているcursorの位置を取得する
code:js
// 列数
const index = cursorObserver.index;
// 行数
const lineNo = cursorObserver.lineNo;
cursorの位置の記録を一時停止する
code:js
cursorObserver.stop();
記録の状態を取得する
code:js
const isObserving = cursorObserver.isObserving;
cursorのfocusが外れると、cursorの位置と実際の文字の位置とがずれてしまう
focusの有無にかかわらず、実際のcursorの位置を取得するようにしたい
方法
このまんまでも問題なさそう?
focusが外れても値は更新されない
13:53:09 問題なさそう
テストコードtakker.icon
code:test1.js
import {CursorObserver} from '/api/code/takker/scrapbox-cursor-observer/script.js';
import {scrapboxDOM} from '/api/code/takker/scrapbox-dom-accessor/script.js';
const cursorObserver = new CursorObserver();
cursorObserver.start();
const observer = new MutationObserver(mutations => {
if (scrapboxDOM.cursor.style.display === 'none') return;
console.log({index: cursorObserver.index, lineNo: cursorObserver.lineNo});
});
observer.observe(scrapboxDOM.cursor, {attributes: true});
code:script.js
import {scrapboxDOM} from '/api/code/takker/scrapbox-dom-accessor/script.js';
import {line as l} from '/api/code/takker/scrapbox-line-info-2/script.js';
import {cursor} from '/api/code/takker/scrapbox-cursor-position-3/script.js';
export class CursorObserver {
constructor() {
this._index = 0;
this._lineNo = 0;
this._observer = new MutationObserver(mutations => {
if (scrapboxDOM.cursor.style.display === 'none') return;
const {index, line, message} = cursor();
if (message) throw Error(message);
this._index = index;
this._lineNo = l(line).index;
});
this._observing = false;
}
start() {
this._observer.observe(scrapboxDOM.cursor, {attributes: true});
this._observing = true;
}
stop() {
this._observer.disconnect();
this._observing = false;
}
get index() {
return this._index;
}
get lineNo() {
return this._lineNo;
}
get isObserving() {
return this._observing;
}
}