8

さて、ほとんどすべてがタイトルにあります。テキストを太字、斜体、または下線を引く以外に実行するショートカットはありますか? またはそれを可能にするプラグインはありますか?

私の同僚によると、ソース コードにはそのようなものは含まれていないようですが、何か見落としているのではないでしょうか?

4

1 に答える 1

11

Etherpad には ACE2 (元は AppJet Code Editor) と呼ばれるリッチテキスト エディタが組み込まれており、キーボード ショートカットの処理を担当しているようです。

デフォルトで埋め込まれているace.jsファイルは以前は縮小されていたため、以前のバージョンの Etherpad では読みにくかったのですが、縮小版が生成されinfrastructure/ace たソース コードの部分で元のソース ファイルを直接読み取ることができます。その詳細については、ACE2 の READMEをご覧ください。最近のバージョン (少なくとも etherpad.org のもの) には、通常の ACE2 JS ソースが含まれているようです。

キーボード ショートカットの処理コードは、関数ace2_inner.js内の にありhandleKeyEvent()ます。これに基づいて、すぐに使用できるキーボード ショートカットは次のように見えます (切り取り/コピー/貼り付けなどのブラウザーのショートカットに加えて)。

  • Enter- 特別なイーサネット キャリッジ リターン
  • TabまたはShift+ Tab- 箇条書きリストをインデントまたはアウトデント
  • Ctrl+ Z- 特別な etherpad 取り消し
  • Ctrl+ Y- 特殊な etherpad のやり直し
  • Ctrl+ B- 太字
  • Ctrl+ I- 斜体
  • Ctrl+ U- 下線
  • Ctrl+ H- 削除
  • Ctrl+ S- リビジョンを保存

取り消し線や箇条書きリストは実際には何もなく、ショートカットの簡単な拡張メカニズムのように見えるものもないため、手を汚す必要があるかもしれません;-)

Etherpad を独自に展開している場合、最も簡単な方法は、追加のショートカットを処理するように ACE2 のソース コードを変更し、必要に応じて ( READMEace2.jsの指示に従って) 縮小版を再構築することです。これは、取り消し線トグルの+ショートカット、および箇条書きトグルの+を処理する方法の例です。取り消し線のショートカットは、組み込みのブラウザーの名前を付けて保存... ショートカットを無効にします。これはおまけですが、それが気に入らない場合は、いつでも. 次のスニペットを、他のショートカットを処理する似たようなブロックの間に、3200 行目あたりに挿入します。CtrlSCtrlLS
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 ですが、縮小が安定しているかどうかを確認せず、毎回同じ短縮名を再利用しています。"y" (引用符付き) を検索して、handleKeyEvent()insideの縮小版を見つけ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 の展開を制御しない場合は、デフォルトの機能にパッチを適用するブラウザ内のGreaseMonkeyhandleKeyEvent()スクリプトを使用して、おそらく同様のものを実装できます。エディターにフックするための出発点としてwindow.pad*、 などのオブジェクトを調べてみてくださいwindow.padeditor。たとえば、エディターでテキストを選択し、コンソールで次のことを試してください。

> window.padeditor.ace.execCommand('bold')
> window.padeditor.ace.execCommand('insertunorderedlist') 
于 2012-05-22T13:19:00.153 に答える