好吧,几乎所有内容都在标题中:除了使文本变为粗体、斜体或下划线之外,还有什么捷径可以执行其他操作吗?或者任何允许这样做的插件?
根据我的一位同事的说法,源代码似乎不包含这些东西,但也许我们错过了一些东西?
好吧,几乎所有内容都在标题中:除了使文本变为粗体、斜体或下划线之外,还有什么捷径可以执行其他操作吗?或者任何允许这样做的插件?
根据我的一位同事的说法,源代码似乎不包含这些东西,但也许我们错过了一些东西?
Etherpad 包含一个名为 ACE2(最初是 AppJet 代码编辑器)的嵌入式富文本编辑器,它似乎负责键盘快捷键处理。
默认嵌入的ace.js
文件曾经被缩小,因此在旧版本的 Etherpad 中难以阅读,但您可以直接在infrastructure/ace
源代码部分中读取原始源文件,从中生成缩小版本。有关这方面的更多信息,请查看ACE2 的 README。较新的版本(至少 etherpad.org 的版本)似乎包含正常的 ACE2 JS 源代码。
键盘快捷键处理代码位于函数ace2_inner.js
内部handleKeyEvent()
。基于此,开箱即用支持的键盘快捷键如下(在浏览器的快捷键之上,如剪切/复制/粘贴):
确实没有删除线或项目符号列表,也没有任何看起来像快捷方式的简单扩展机制的东西,所以你可能需要动手;-)
如果您有自己的 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;
}
如果您无法重建缩小版本,您也可以尝试使用缩小名称直接修补它。这是上述代码片段的缩小版本,虽然是 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 部署,您也许可以使用修补默认功能的浏览器内GreaseMonkey脚本来实现类似的东西。handleKeyEvent()
作为挂钩到编辑器的起点,请尝试检查window.pad*
对象,例如window.padeditor
. 例如,在编辑器中选择一些文本并在控制台中尝试以下操作:
> window.padeditor.ace.execCommand('bold')
> window.padeditor.ace.execCommand('insertunorderedlist')