EtherPadでは、太字、イタリック体、下線(ストライキ、弾丸点、...)よりも他の行動へのショートカットがありますか?
-
12-12-2019 - |
質問
井戸、ほとんどすべてがタイトルにあります。または任意のプラグインはそうすることを可能にしますか?
鉱山の同僚によると、ソースコードはそのようなことを含んでいないようですが、私たちは何かを逃したことがありますか?
解決
EtherPadには、ace2(apejetコードエディタ)という埋め込みリッチテキストエディタが含まれています。これはキーボードショートカット処理を担当しているようです。
デフォルトで埋め込まれているace.js
ファイルは、古いバージョンのEtherPadで読み取るのが難しいですが、元のソースファイルをinfrastructure/ace
ソースコードの一部。そのことについての詳細は、 ace2のReadme < / a>。
より最近のバージョン(少なくともetherpad.orgのもの)は、通常のACE2 JSソースを含むようです。
キーボードショートカット処理コードは、 handleKeyEvent()
機能。これに基づいて、それは、箱の外のショートカットがサポートされているキーボードショートカットが次のように見えます(カット/コピー/ペーストのようなブラウザのショートカットの上に):
- ENTER - 特殊なEtherPadキャリッジリターン
- tab または shift + タブ - インデントまたは外観の箇条書き
- CTRL + Z - 特殊なEtherPad Undo
- CTRL + y - 特殊なEtherPad Redo
- CTRL + B - 太字
- CTRL + i - イタリック体
- CTRL + u - 下線
- CTRL + h - 削除
- CTRL + s - リビジョンを保存
実際には、ストライクルや箇条書きのリストや弾丸のリスト、そしてショートカットのための簡単な拡張メカニズムのように見えるものは何もないので、あなたはあなたの手を汚す必要があるかもしれません;-)
EtherPadの独自の展開がある場合は、追加のショートカットを処理するためにACE2のソースコードを変更してから、ace2.js
除去されたバージョンを再構築することが最も簡単な場合があります( Readme )必要に応じて。
これは、 CTRL + S ショートカットの処理方法の一例であり、弾丸リストのための CTRL + L トグル。 Strikethroughショートカットは組み込みブラウザを無効にします。ショートカットはボーナスですが、 s よりも常に別のキーを求めることができます。
次のスニペットを、ライン3200の周りの他のショートカットを扱う同様のブロックの間に、ace2_inner.js
に挿入します。
/* Ctrl+S toggles striketrough, and prevents triggering the browser's Save dialog */
if ((!specialHandled) && isTypeForCmdKey &&
String.fromCharCode(which).toLowerCase() == "s" &&
(evt.metaKey || evt.ctrlKey)) {
// ctrl/cmd-s (strikethrough toggle)
fastIncorp(13); // don't ask me ;-)
evt.preventDefault();
toggleAttributeOnSelection('strikethrough');
specialHandled = true;
}
if ((!specialHandled) && isTypeForCmdKey &&
String.fromCharCode(which).toLowerCase() == "l" &&
(evt.ctrlKey)) {
// ctrl/cmd-L (bullet list toggle)
fastIncorp(9); // seriously, don't ask me ;-)
evt.preventDefault();
doInsertUnorderedList();
specialHandled = true;
}
.
ミニファイ版を再構築できない場合は、氏名を使用して直接パッチを当ててみることもできます。これは私のための上記のスニペットの版の版ですが、ymmvはymmv、私は鉱化が安定しているかどうかをチェックし、毎回同じ短縮された名前を再利用しました。 "y"(引用符付き)を検索して、handleKeyEvent()
の中のace.js
の版を見つけるために検索します。
if ((!Cp)&&Cu&&String.fromCharCode(Ct).toLowerCase()=="s"&&(i.metaKey || i.ctrlKey)){G(13);\\ni.preventDefault();c("strikethrough");Cp=true;}if((!Cp)&&Cu&&String.fromCharCode(Ct).toLowerCase()=="l"&&(i.metaKey||i.ctrlKey)){G(9);\\ni.preventDefault();As();Cp=true;}
.
最後に、EtherPadの展開を制御しない場合は、ブラウザ内 real="noreferrer">を使用して似たものを実装することができます。 greasemonkey デフォルトのhandleKeyEvent()
関数をパッチするスクリプト。エディタに接続する開始点として、window.pad*
などのwindow.padeditor
オブジェクトを検査してみてください。たとえば、エディタでテキストを選択してコンソールで次のテキストを選択します。
> window.padeditor.ace.execCommand('bold')
> window.padeditor.ace.execCommand('insertunorderedlist')
.