在Etherpad中,是否有任何其他操作的快捷方式,而不是粗体,斜体和下划线(罢工,项目符号......)?

Ant*_*nto 8 keyboard-shortcuts etherpad

好吧,几乎所有内容都在标题中:是否有任何快捷方式可以执行其他操作而不是使文本变为粗体,斜体或带下划线?或者任何允许这样做的插件?

根据我的一位同事的说法,源代码似乎并不包含这些内容,但也许我们错过了一些东西?

odo*_*ony 11

Etherpad包含一个名为ACE2(最初是AppJet代码编辑器)的嵌入式富文本编辑器,它似乎负责键盘快捷键处理.

ace.js默认情况下嵌入的文件曾经被缩小,因此在较旧版本的Etherpad中难以读取,但您可以直接在infrastructure/ace 源代码一部分中读取原始源文件,从中生成缩小版本.有关这方面的更多信息,请查看ACE2的自述文件.更新的版本(至少是etherpad.org的版本)似乎包括正常的ACE2 JS源代码.

键盘快捷键处理代码位于函数ace2_inner.js内部handleKeyEvent().基于此,看起来支持开箱即用的键盘快捷键如下(在浏览器的快捷键上,如剪切/复制/粘贴):

  • Enter - 特殊的etherpad回车
  • TabShift+ Tab- 缩进或突出的子弹列表
  • Ctrl+ Z- 特殊的etherpad撤消
  • Ctrl+ Y- 特殊的etherpad重做
  • Ctrl+ B- 大胆
  • Ctrl+ I- 斜体
  • Ctrl+ U- 下划线
  • Ctrl+ H- 删除
  • Ctrl+ S- 保存修订

确实没有删除线或子弹列表的任何内容,也没有看起来像快捷方式的简单扩展机制,因此您可能需要弄脏手;-)

如果您有自己的Etherpad部署,最简单的方法是修改ACE2的源代码以处理其他快捷方式,然后ace2.js根据需要重新构建缩小版本(根据README中的说明).下面是如何处理的例子Ctrl+ S为删除线切换快捷方式,Ctrl+ L对于项目列表切换.删除线快捷方式禁用内置浏览器另存为...快捷方式,我发现这是一个奖励,但如果您不喜欢,您可以随时选择另一个密钥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;
}
Run Code Online (Sandbox Code Playgroud)

如果您无法重建缩小版本,您还可以尝试使用缩小名称直接修补它.这是我上面片段的缩小版本,虽然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;}
Run Code Online (Sandbox Code Playgroud)

最后,如果您不控制以太网板部署,您可以使用浏览器中的GreaseMonkey脚本实现类似的handleKeyEvent()功能,该脚本可以修补默认功能.作为挂钩编辑器的起点,尝试检查window.pad*对象,例如window.padeditor.例如,在编辑器中选择一些文本,然后在控制台中尝试以下操作:

> window.padeditor.ace.execCommand('bold')
> window.padeditor.ace.execCommand('insertunorderedlist') 
Run Code Online (Sandbox Code Playgroud)