Я использую эту слегка отредактированную версию другого размещенного кода. В течение некоторого времени на форумах Komodo ходили разные варианты. Я обновил макрос для Komodo Edit 7.0 и 6.X, он обычно работает достаточно хорошо. Я изменил некоторые параметры tidy и csstidy, добавил поддержку XML и изменил предупреждение о неопределенном синтаксисе. Я также должен был создать очень уродливый ключ, чтобы заставить работать astyle, так как astyle не принимает stdin. На этом этапе весь макрос должен быть полностью переделан, так как его ограничения стали очевидными.
Что касается поддержки Ruby, ознакомьтесь с rbeautify, я наконец-то интегрировал поддержку Ruby, вы должны установить rbeautify в вашем PATH. Я должен предупредить вас, у меня не установлен Ruby, поэтому я не могу полностью протестировать. Я должен также упомянуть, что мой JS ужасен, но я проверил, что смог, и макрос сработал. Это должно наконец ответить на этот вопрос, может быть, пришло время принять мой ответ.
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; }