嗯,几乎所有内容都在标题中:是否有任何快捷方式可以执行其他操作而不是使文本变为粗体,斜体或带下划线?或者任何允许这样做的插件?
根据我的一位同事的说法,源代码似乎并不包含这些内容,但也许我们错过了什么?
答案 0 :(得分:11)
Etherpad包含一个名为ACE2(最初是AppJet代码编辑器)的嵌入式富文本编辑器,它似乎负责键盘快捷键处理。
默认情况下嵌入的ace.js
文件曾被缩小,因此在较旧版本的Etherpad中难以阅读,但您可以直接在infrastructure/ace
{{3}中阅读原始源文件},从中生成缩小版本。有关这方面的更多信息,请查看part of the source code。
更新的版本(至少是etherpad.org的版本)似乎包括正常的ACE2 JS源。
键盘快捷键处理代码位于ace2_inner.js
功能内ace2.js
内。基于此,看起来支持开箱即用的键盘快捷键如下(在浏览器的快捷键之类,如剪切/复制/粘贴):
确实没有删除线或子弹列表的任何内容,也没有看起来像快捷方式的简单扩展机制,所以你可能需要弄脏手;-)
如果您有自己的Etherpad部署,最简单的方法是修改ACE2的源代码以处理其他快捷方式,然后重新构建ace2_inner.js
缩小版本(根据{{3}中的说明) }) 如果需要的话。
以下是如何处理删除线切换的 Ctrl + S 快捷方式的示例,以及如何处理项目符号列表的 Ctrl + L 切换。删除线快捷方式禁用内置浏览器另存为...快捷方式,我发现这是一个奖励,但如果你不喜欢它,你总是可以选择另一个键而不是 S 。
在/* 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;
}
中将以下代码段插入到处理其他快捷方式的类似外观的块之间,在第3200行附近:
handleKeyEvent()
如果您无法重建缩小版本,您还可以尝试使用缩小名称直接修补它。这是我上面片段的缩小版本,虽然YMMV,我没有检查缩小是否稳定并且每次都重复使用相同的缩写名称。搜索“y”(带引号)以找到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;}
的缩小版本:
handleKeyEvent()
最后,如果您不控制以太网部署,您可以使用浏览器ACE2's README脚本来修补默认的window.pad*
功能,从而实现类似的功能。作为挂钩编辑器的起点,请尝试检查window.padeditor
对象,例如> window.padeditor.ace.execCommand('bold')
> window.padeditor.ace.execCommand('insertunorderedlist')
。例如,在编辑器中选择一些文本,然后在控制台中尝试以下操作:
{{1}}