Em Etherpad, existem atalhos para outras ações de negrito, itálico e sublinhado (greve, a ponto de marca, ...)?
-
12-12-2019 - |
Pergunta
Bem, praticamente tudo que está no título:existem atalhos para executar algo mais do que fazer o texto em negrito, itálico ou sublinhado ?Ou algum plugin que permite fazer isso ?
De acordo com um colega meu, o código fonte não parecem conter tais coisas, mas talvez a gente tenha perdido algo ?
Solução
Etherpad contém uma embedded rich editor de texto chamado ACE2 (originalmente AppJet Editor de Código), que parece ser responsável pelo atalho de teclado manuseio.
O ace.js
arquivo que é incorporado por padrão usada para ser reduzido e, portanto, difícil de ler na versão mais antiga do Etherpad, mas você pode ler os arquivos de origem diretamente no infrastructure/ace
parte do código-fonte, a partir do qual o minified versão é produzido.Para mais informações sobre o que tem, da uma olhada no ACE2 readme (LEIAME).Versões mais recentes (pelo menos o etherpad.org queridos) parece incluir o normal ACE2 JS de origem.
O atalho de teclado código de manipulação está localizado em ace2_inner.js
, dentro do handleKeyEvent()
função.Com base nisso, parece que os atalhos de teclado com suporte out-of-the-box, estão os seguintes (na parte superior do navegador de atalhos, como de Cortar/Copiar/Colar):
- Entrar - especial etherpad de retorno de carro
- Guia ou Mudança+Guia - avanço ou diminuir avanço de listas de bala
- Ctrl+Z - especial etherpad desfazer
- Ctrl+Y - especial etherpad refazer
- Ctrl+B - negrito
- Ctrl+Eu - texto em itálico
- Ctrl+U - sublinhado
- Ctrl+H - eliminar
- Ctrl+S - Guardar uma Revisão
Nada para rasurado ou listas de bala, de fato, e nada que se parece com um fácil mecanismo de extensão para atalhos, de modo que você pode precisar sujar as mãos ;-)
Se você tem sua própria implementação do Etherpad o mais fácil pode ser para modificar o código-fonte de ACE2 para lidar com atalhos adicionais e, em seguida, re-construir o ace2.js
minified versão (de acordo com as instruções do Leia-me), se necessário.Aqui está um exemplo de como lidar com Ctrl+S atalho para tachado de alternância, e Ctrl+L para a lista com marcas de alternância.O tachado de atalho desativa o grupo builtin navegador Salvar Como...de atalho, o que eu acho é um bônus, mas se você não gosta do que você pode sempre optar por outra chave de S.
Inserir o seguinte trecho em ace2_inner.js
entre semelhantes blocos que lidar com outros atalhos, em torno da linha 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;
}
Se você não pode reconstruir o minified versão você também pode tentar diretamente patch-lo usando o minified nomes.Aqui está o reduzido versão do trecho acima para mim, embora YMMV, eu não verifique se a minimização é estável e reutiliza o mesmo nomes abreviados de cada vez.Procure por "y" (com as aspas) para localizar a versão do minified handleKeyEvent()
dentro 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;}
Finalmente, se você não controlar o etherpad implantação talvez você poderia implementar algo semelhante usando um navegador GreaseMonkey script que o padrão de manchas handleKeyEvent()
função.Como um ponto de partida para ligar para o editor, tente inspecionar o window.pad*
objetos, tais como window.padeditor
.Por exemplo, seleccione algum texto no editor e tente o seguinte no console:
> window.padeditor.ace.execCommand('bold')
> window.padeditor.ace.execCommand('insertunorderedlist')