在 Etherpad 中,除了粗体、斜体和下划线(删除线、项目符号点等)之外,还有其他操作的快捷方式吗?

StackOverflow https://stackoverflow.com//questions/10698889

  •  12-12-2019
  •  | 
  •  

好吧,几乎所有内容都在标题中:除了使文本变为粗体、斜体或下划线之外,还有其他执行其他操作的快捷方式吗?或者任何插件允许这样做?

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

有帮助吗?

解决方案

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

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

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

  • 进入 - 特殊的etherpad回车
  • 标签 或者 转移+标签 - 缩进或减少项目符号列表
  • 控制键+Z - 特殊的etherpad撤消
  • 控制键+ - 特殊的etherpad重做
  • 控制键+ - 大胆的
  • 控制键+ - 斜体
  • 控制键+U - 下划线
  • 控制键+H - 删除
  • 控制键+S - 保存修订

确实没有删除线或项目符号列表,也没有看起来像快捷方式的简单扩展机制,因此您可能需要亲自动手;-)

如果您自己部署了 Etherpad,最简单的方法可能是修改 ACE2 的源代码来处理其他快捷方式,然后重新构建 ace2.js 缩小版(根据说明) 自述文件) 如果需要的话。这是如何处理的示例 控制键+S 删除线切换的快捷方式,以及 控制键+L 用于项目符号列表切换。删除线快捷方式禁用内置浏览器另存为...快捷方式,我发现这是一个额外的好处,但如果你不喜欢这个,你可以随时选择其他键 S.
将以下代码片段插入 ace2_inner.js 在处理其他快捷方式的类似块之间,第 3200 行左右:

/* 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() 里面 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 部署,您也许可以使用浏览器内实现类似的东西 油猴 修补默认值的脚本 handleKeyEvent() 功能。作为连接编辑器的起点,尝试检查 window.pad* 对象,例如 window.padeditor. 。例如,在编辑器中选择一些文本,然后在控制台中尝试以下操作:

> window.padeditor.ace.execCommand('bold')
> window.padeditor.ace.execCommand('insertunorderedlist') 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top