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