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

时间:2012-05-22 09:03:53

标签: keyboard-shortcuts etherpad

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

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

1 个答案:

答案 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回车
  • Tab Shift + Tab - 缩进或突出子弹列表
  • Ctrl + Z - 特殊的etherpad撤消
  • Ctrl + Y - 特殊的etherpad重做
  • Ctrl + B - 粗体
  • Ctrl + I - 斜体
  • Ctrl + U - 下划线
  • Ctrl + H - 删除
  • Ctrl + S - 保存修订

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

如果您有自己的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.jsif ((!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}}