ScrapBindings
2024-05-27 14:23:43 deprecated
/icons/hr.icon
目的
Non Vimmer向けshortcut manager
このmanagerをベースにtritaskを実現してみたい
特徴
いつでもkey bindを追加・削除できる
使い方
code:js
import {scrapBindings} from '/api/code/takker/ScrapBindings/script.js';
scrapBindings.install()
.then(() => scrapBindings.push(...config));
設定方法
configをpush()に展開して渡す
code:js
const config = [
{
key: 'ctrl+f',
command: (e) => {},
type: 'editor',
},
];
キーとコマンドを単純に結びつけるだけ
やってみても良さそう
文字列のみ渡せる。
同じコマンドを複数のキーに設定したい場合は、別々の配列要素にして渡す
commandにjavascriptの関数を渡す
引数は何か受け取れるようにしたほうがいいかな?
KeyboardEventを渡しておくか。
typeは省略可能
'browser'を渡すと、cursorにfocusがあたってないときのキー設定になる
defaultは'editor'
同じキーの設定を追加すると上書きになる
設定を削除するときは、command: undefinedとする
2022-02-23
これにより、script.jsをbundleなしにimportできなくなった
まあ仕方ない
2021-08-23
11:15:56 s/browse/browser
code:script.js
import { textInput } from "../scrapbox-userscript-std/dom.ts";
class ScrapBindings {
constructor() {
this.binders ={
edit: {
mousetrap: new Mousetrap(textInput()),
config: [],
},
browser: {
mousetrap: new Mousetrap(),
config: [],
},
};
}
clear() {
for (const binder of this.binders) {
binder.config.forEach(({key}) => binder.mousetrap.unbind(key));
binder.config = [];
}
}
push(...config) {
// すべて上書きする
for (const {key, command, type: type_} of config) {
binder.mousetrap.unbind(key);
if (command) binder.mousetrap.bind(key, command);
}
// 設定情報の更新
const targetConfig = config.filter(tuple => (tuple.type ?? 'edit') === type);
const keys = targetConfig.map(({key}) => key);
binder.config = [...binder.config.filter(({key}) => !keys.includes(key)),
...targetConfig.filter(({command}) => command)];
}
}
show({key, type = 'edit'} = {}) {
// 空で呼び出されたら、すべての設定情報を表示する
if (!key) {
console.log(this.binders);
return;
}
console.log(this.binderstype.config.find( pair => pair.key === key
) ?? "no command registerd.");
}
}
const scrapBindings = new ScrapBindings();
window.scrapBindings = scrapBindings;
export { scrapBindings };