Eu uso esta versão ligeiramente editada de outro código publicado. Variações estão flutuando nos fóruns do Komodo há algum tempo. Eu atualizei a macro para o Komodo Edit 7.0 e 6.X, geralmente funciona bem o suficiente. Alterei algumas das opções arrumadas e personalizadas, adicionei o suporte a XML e alterei o alerta de sintaxe indefinido. Eu também tive que criar um kludge muito feio para fazer o astyle funcionar, já que o astyle não aceita stdin. Neste ponto, toda a macro precisa ser completamente refeita, pois suas limitações se tornaram óbvias.
Quanto ao Suporte Ruby, confira rbeautify , Finalmente integrei o suporte ao Ruby, você deve ter o rbeautify instalado no seu PATH. Devo avisá-lo, não tenho o Ruby instalado, por isso não posso testar completamente. Eu também devo mencionar que meu JS é terrível, mas eu verifiquei o que pude e a macro funcionou. Isso deve finalmente responder a essa pergunta, talvez seja hora de aceitar minha resposta.
Format_Syntax.js
komodo.assertMacroVersion(3);
if (komodo.view.scintilla) {
komodo.view.scintilla.focus();
} // bug 67103
var koDoc = (komodo.koDoc === undefined ? komodo.document : komodo.koDoc);
var formatter;
var language = koDoc.language;
var cannot_tidy_selection = false;
switch (language) {
case 'C#':
cannot_tidy_selection = true;
formatter = 'astyle --style=ansi --mode=cs --convert-tabs --indent=spaces=4 %F > /dev/null 2>&1; cat %F';
break;
case 'C++':
cannot_tidy_selection = true;
formatter = 'astyle --style=linux --mode=c --convert-tabs --indent=spaces=4 %F > /dev/null 2>&1; cat %F';
break;
case 'CSS':
formatter = 'csstidy - --preserve_css=true --lowercase_s=true --case_properties=true --sort_properties=true --remove_bslash=false --silent=true --template=medium';
break;
case 'HTML':
cannot_tidy_selection = true;
formatter = 'tidy -q -asxhtml -i -b -c -w 120 --show-warnings no --show-errors 0 --tidy-mark no --css-prefix block --drop-proprietary-attributes yes --anchor-as-name no --enclose-text yes';
break;
case 'Java':
cannot_tidy_selection = true;
formatter = 'astyle --style=java --mode=java --convert-tabs --indent=spaces=4 %F > /dev/null 2>&1; cat %F';
break;
case 'Perl':
formatter = 'perltidy';
break;
case 'PHP':
formatter = 'php_beautifier -s4 -l"Pear()"';
break;
case 'Ruby':
formatter = 'rbeautify.rb -';
break;
case 'XSLT':
cannot_tidy_selection = true;
formatter = 'tidy -q -xml -i -w 120 --show-warnings no --show-errors 0 --tidy-mark no';
break;
case 'XML':
cannot_tidy_selection = true;
formatter = 'xmllint --format --recover -';
break;
default:
alert("Syntax Undefined, Add Case to Macro " + language);
return null;
}
// Save Curser Position
var currentPos = komodo.editor.currentPos;
try {
// Save the file, Check Changes with "File -> Show Unsaved Changes"
//komodo.doCommand('cmd_save');
// Group operations in a single undo
komodo.editor.beginUndoAction();
// Select Buffer, pipe it into formatter.
var text_not_selected = cannot_tidy_selection || komodo.editor.selText == "";
if (text_not_selected) {
komodo.doCommand('cmd_selectAll');
}
Run_RunEncodedCommand(window, formatter + " {'insertOutput': True, 'operateOnSelection': True}");
if (text_not_selected) {
komodo.editor.gotoPos(currentPos);
}
// Restore Cursor Position
komodo.editor.gotoPos(currentPos);
// Clean Potential EOL Mismatches
komodo.doCommand('cmd_cleanLineEndings');
}
catch (e) {
alert(e);
}
finally {
// End Undo Action to Avoid Edit Buffer Corruption
// komodo.editor.endUndoAction();
return true;
}