Подсветка ошибок FASM в консоли Sublime Text
Подсветка ошибок FASM в консоли Sublime Text
В одной из статей, посвященной Sublime Text мне задали вопрос по поводу можно ли сделать подсветку ошибок в консоли Sublime Text при запуске или сборке (Build) файла. В официальной документации мне не удалось найти ничего, касающегося настройки вывода консоли компиляции, но по данным из неофициальной документации оказалось, что все можно сделать. А если поковыряться в потрошках редактора, то можно найти и еще кое-что интересное.
Так вот, как я уже говорил, в неофициальной документации в описании параметров build-файлов проскакивает скромная строчка:
syntax - Optional. When provided, the build system output will be formatted with the provided syntax definition.
Это не что иное, как файл синтаксиса, который будет применяться ко всему тексту из сборочной консоли. А значит, что там можно легко выделить сообщения об ошибках. По умолчанию используется Plain Text, то есть обычный текст без никакой подсветки, но нам же никто не мешает написать свой собственный вариант. Что я, собственно, и сделал. Теперь в файле подсветки синтаксиса Ассемблера (обе версии - с WinAPI и без) содержится файл для подсветки ошибок в сборочной консоли. Архив с компилятором FASM также обновлен с учетом использования подсветки.
Переходим к обещанным потрошкам. В файле \Packages\Default.sublime-package можно найти интересный файл exec.py, который отвечает за запуск внешних программ, то есть и за компиляцию тоже. Давайте посмотрим на начало функции запуска:
class ExecCommand(sublime_plugin.WindowCommand, ProcessListener):
def run(self, cmd = None, shell_cmd = None, file_regex = "",
line_regex = "", working_dir = "", encoding = "utf-8",
env = {}, quiet = False, kill = False, word_wrap = True,
syntax = "Packages/Text/Plain text.tmLanguage", **kwargs):
Среди уже знакомых нам параметров build-файла обнаруживается недокументированный параметр quiet с дефолтным значением False. Посмотрим дальше, за что он отвечает.
def finish(self, proc):
if not self.quiet:
elapsed = time.time() - proc.start_time
exit_code = proc.exit_code()
if exit_code == 0 or exit_code == None:
self.append_string(proc,("[Finished in %.1fs]" % (elapsed)))
else:
self.append_string(proc, ("[Finished in %.1fs with exit code %d]\n"
% (elapsed, exit_code)))
self.append_string(proc, self.debug_text)
То есть, если в build-файле прописать параметр "quiet": true, то никаких посторонних надписей типа "[Finished in 0.1s]" после результатов сборки или выполнения появляться не будет. Это касается не только Ассемблера, а вообще любых build-файлов. Очень полезный параметр, странно, что его не добавили в документацию.
Просмотров: 9636 | Комментариев: 6
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(25.09.2014 в 12:54):
Почему было? И сейчас есть :)
franken
(20.07.2014 в 15:00):
было полезно
ManHunter
(13.07.2014 в 00:43):
Нет, F4 - это переход на строку с ошибкой. Если ошибок несколько, то Shift-F4 - переход к следующей строке.
Анатолий
(13.07.2014 в 00:20):
Поиск? Много телодвижений.
ManHunter
(13.07.2014 в 00:06):
F4 же, дальше Shift-F4
Анатолий
(13.07.2014 в 00:00):
Огромное вам спасибо!)
+1 к удобству процесса программирования!
По поводу Notepad и сопутствующему его плагина NppExec, так там самая удобная фишка была в том, что непосредственно по клику ошибки, делался переход в тот участок кода (ошибка в 1273-й строке, клик, и мы на месте). При огромных листингах фича незаменимая. Судя по гибкости настроек Sublime, может возможно и в нём такое сделать.. никак руки не дойдут до подробного ковыряния данного чудо-редактора :)
+1 к удобству процесса программирования!
По поводу Notepad и сопутствующему его плагина NppExec, так там самая удобная фишка была в том, что непосредственно по клику ошибки, делался переход в тот участок кода (ошибка в 1273-й строке, клик, и мы на месте). При огромных листингах фича незаменимая. Судя по гибкости настроек Sublime, может возможно и в нём такое сделать.. никак руки не дойдут до подробного ковыряния данного чудо-редактора :)
Добавить комментарий
Заполните форму для добавления комментария