Есть ли в Etherpad какие-либо сочетания клавиш для других действий, кроме жирного, курсива и подчеркивания (зачеркивание, точка с маркером, ...)?
Ну, в основном все в названии: есть ли какие-нибудь сочетания клавиш для выполнения чего-то еще, кроме выделения текста жирным шрифтом, курсивом или подчеркиванием? Или любой плагин, позволяющий сделать это?
По словам моего коллеги, исходный код, похоже, не содержит таких вещей, но, может быть, мы что-то упустили?
1 ответ
Etherpad содержит встроенный текстовый редактор ACE2 (первоначально AppJet Code Editor), который, кажется, отвечает за обработку сочетаний клавиш.
ace.js
встроенный по умолчанию файл, который раньше был минимизирован и поэтому трудно читаемый в более старой версии Etherpad, но вы можете прочитать исходные файлы непосредственно в infrastructure/ace
часть исходного кода, из которой производится минимизированная версия. Для получения дополнительной информации об этом, посмотрите на README ACE2. Более свежие версии (по крайней мере, etherpad.org) включают обычный источник ACE JS.
Код обработки сочетаний клавиш расположен в ace2_inner.js
, внутри handleKeyEvent()
функция. Исходя из этого, похоже, что сочетания клавиш, поддерживаемые "из коробки", следующие (поверх сочетаний клавиш браузера, таких как "Вырезать / Копировать / Вставить"):
- Enter - специальный возврат каретки etherpad
- Tab или Shift + Tab - списки отступов или маркеров отступов
- Ctrl + Z - специальная отмена
- Ctrl + Y - специальный повтор ввода etherpad
- Ctrl + B - полужирный
- Ctrl + I - курсив
- Ctrl + U - подчеркивание
- Ctrl + H - удалить
- Ctrl + S - сохранить ревизию
На самом деле ничего для зачеркивания или списков маркеров, и ничего, что выглядит как простой механизм расширения для ярлыков, так что, возможно, вам придется испачкать руки;-)
Если у вас есть собственное развертывание Etherpad, проще всего изменить исходный код ACE2 для обработки дополнительных ярлыков, а затем пересобрать ace2.js
минимизированная версия (в соответствии с инструкциями в README) при необходимости. Вот пример того, как обрабатывать сочетания клавиш Ctrl + S для зачеркивания и Ctrl + 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, вы можете реализовать нечто подобное, используя скрипт GreaseMonkey, встроенный в браузер и исправляющий настройки по умолчанию. handleKeyEvent()
функция. В качестве отправной точки для подключения к редактору, попробуйте проверить window.pad*
объекты, такие как window.padeditor
, Например, выделите текст в редакторе и попробуйте следующее в консоли:
> window.padeditor.ace.execCommand('bold')
> window.padeditor.ace.execCommand('insertunorderedlist')