Тема: HMSEditor (архив)
Данные проект больше не развивается и перерос в другой. Данная тема предназначена для архива.
https://api.soundcloud.com/playlists/160439103
Что такое HMSEditor?
Примерно 4 месяца упорного труда. Ни на что, практически, не отвлекался. С гордостью представляю свой проект:
HMSEditor - это альтернативный редактор скриптов для программы "Домашний медиа-сервер" с IntelliSense и дополнительными возможностями.
Возможно, будет полезен начинающим разбираться в программе при написании скриптов или другим кодерам, которые хотят облегчить себе жизнь при их написании или отладке.
Предисловие
Решил я как-то раз, при написании части №2 о созданиях подкастов, что нужно как-то собраться да и сделать Wiki с описанием функций, чтобы можно было ссылаться на них. Хотя бы тех, которых я знаю. И я даже начал это делать, но... Захотелось что бы описания были с примерами. А писать простые примеры и команды приходиться часто. А для проверки их работы нужно писать обвязку - ещё часть кода, в котором бы данный пример выполнялся.
В итоге моя лень взяла меня за шкварник и сказала: "Придумай что-нибудь, это ж мы запаримся всё это по 300 раз писать и всё это растянется ещё на пару лет!". И я подумал - был же у меня недоделанный проект с собственным редактором для YAML, возможностью подсветки синтаксиса и даже подсказок. А значит, может мне для себя в тот редактор бы добавить ключевые слова да названия функций - и всё будет быстрее. Хотя бы набирать текст примеров кода.
Вот с такой мыслью я создал проект HMSEditor.
Что-то во мне щёлкнуло, рейка вошла в паз, полукольцо наехало на вал, тельмец соскочил с колодки и шестерёнки начали крутиться, поворачивая шнек для подачи СОЖ на крестовину и я начал делать редактор.
"Было бы не плохо, чтобы подсказки сразу выводили описание функции, переменной или класса."
А вот тут кралась та самая засада. Ещё более года назад я просил автора HMS Евгения сделать Wiki, чтобы туда постепенно заносить, хотя бы своими силами, описания функций, примеров и проч. И он даже сделал и дал адрес. Но... так ничего я туда и не занёс, ибо, как оказалось, это очень трудно, долго и невозможно, когда на самом деле не знаешь как это всё должно работать и устроено. Я знал, что те же проблемы меня ждут и здесь. Но я решил броситься на амбразуру, а там посмотрим что будет. После придумаем выход из положения.
Список функций, переменных и свойств классов я получил тупо пересчелкивая их в справочнике справа в редакторе. А вот с описанием пришлось повозиться. Очень сильно повозиться. Описания для классов, свойств и общих функций я брал из интернета к компонентам Delphi. Где-то переводил с английского, где то занимался отсебятиной (считая, что знаю что делаю).
Так что опечатки, ошибки, неточности и, в некоторых случаях, ввод в заблуждение гарантируется. Было бы очень полезным получить обратную реакцию с указанием таких косяков. Если кто будет пользоваться.
Т.к. проект выложен на GitHub и свободен - всегда можно причаститься и поучаствовать.
Кстати, проект написан непрофессионалом, поэтому код странный. Советам буду рад.
Она была, беспощадно дисассемблирована, насколько можно декомпилирована и разобрана. Надеюсь, автор не обидется. Если что - Закон РФ N 3523-1 "О правовой охране программ для электронных вычислительных машин и баз данных" ст. 15 п.3. К сожалению, полного удобочитаемого исходного текста получить не удалось, а были лишь участки на подобии этого:
* Possible String Reference to: 'HmsTranscodingVideoParams'
|
00BB2882 B8343CBB00 mov eax, $00BB3C34
00BB2887 89842450050000 mov [esp+$0550], eax
00BB288E A1643AE100 mov eax, dword ptr [$00E13A64]
00BB2893 8B00 mov eax, [eax]
00BB2895 89842454050000 mov [esp+$0554], eax
Так вот тут адрес $00E13A64 указывал на место, где лежит адрес, где находится адрес строки описания к этой функции. Мною была написана специальная программа, которая рыскала в исходниках, искала такие места и брала адрес, а поиск строки делала в самом файле hms.exe по адресам, с учетом смещения и проч.
Так были получены описания функций из программы HMS. Однако, как вы знаете, описания там есть далеко не на все функции. Поэтому пришлось медленно, но верно разбираться во всём самому, пробовать описывать и всё прочее. Короче, собрать и самому написать описания ко всем (почти) функциям, классам, свойствам и методам класса - это мега титанический труд и занял примерно половину из всего времени потраченного на проект.
"А вот бы ещё и подсказки отдельно для каждого параметра функции, чтобы пока пишешь параметры, сразу видеть какой, сколько их и всё такое"
"И чтобы при нажатии после переменной точки, высвечивались бы все методы и свойства, если переменная с типом класса "
"И чтобы при вводе параметра, если он с типом для которого определены перечисления, сразу бы эти перечисления предлагал"
"Именно! То, что вы увидели - чтобы редактор сам встраивался вместо стандартного"
Вот тут было волнительно (я не знал, получится ли у меня это). Но когда получилось - меня попёрло ещё сильней.
Т.к. это не настоящий встроенный редактор - то и доступ к функциям и событиям самого HMS и его редактора у меня нет. Поэтому пришлось взять немало вершин, изобретая и находя подходы для решения всё возникающих не очевидных задач.
Встроенный родной редактор - это часть компонента FastScript и всё в программе взаимодействует с ним. Мой редактор взаимодействует со встроенным. Поэтому также слушаются изменения текста, положения каретки и просто встроенный синхронизируется с внедрённым редактором.
Также и нажатия горячих клавиш, у моего редактора свои, но одним из способов общения является передача нажатий клавиш программе.
Мысли меня настигали, не успевая реализоваться. А как только я делал что-то из того, что придумал - накатывали следующие предложения.
"Да, и нажав F12 сразу бы переходил на определение текущей переменной или функции (если она определена тут в скрипте - Go defenition)"
"А чтобы при отладке, можно было бы навести курсор мыши на переменную и он показал бы её значение сразу"
"Можно нажав на правую клавишу мыши в появившемся контекстном меню выбрать шаблон скрипта и он сразу бы вставил заданный текст"
"Нажатием F11 выводить панель инструментов сверху для возможности использования дополнительных функций, например "Переход к закладке или определённой функции"
Короче, делал что хотел. Всё что мне приходило в голову - я реализовывал. Не спрашивайте, я не скажу что именно я курю.
Хорошо, когда тебя никто не торопит и можно спокойно делать то, что тебе нравиться. Надеюсь то, что я хотел сделать удобней для себя - будет, в конечном итоге, полезно и кому-то ещё. Замутил возможность обновления из самой программы в пункте "О программе", если будет выложена новая версия - он там об этом сообщит и можно будет нажать и обновиться.
Так же отдельно обновляются шаблоны. Если я добавлю шаблонов на GitHub, то они автоматически появятся в HMSEditor.
"Я Мисикс - перфекционист! Как насчёт ближнего удара?"
Работа в режиме отладки пока очень специфична. Дело в том, что редактору никак не удаётся определить сам режим или момент начала отладки. Поэтому это происходит по косвенным признакам (нажали F8, кнопу запуска скрипта...) и редактор ведёт себя не совсем адекватно, по сравнению со встроенным, родным редактором.
Если при наведении мыши на переменную во время отладки не происходит показ её значения, а текущая строка переходит на следующую - значит у него не получилось открыть автоматически окно вычисления выражений и это нужно сделать вручную, после чего это окно можно закрыть.
Возможно, если автор HMS будет за, то в будущем может быть более адекватная связка (внедрение) редактора в программу.
Если будут предложения или отзывы - не стесняйтесь.
Возможности
- Альтернативная и более полная подсветка синтаксиса языков скрипта
- IntelliSense - подсказки ключевых слов, функций, классов, методов...
- Подсказки для параметров функций
- Подсказки по функциям, переменным и константам при наведении курсора мыши
- Наиполная база на данный момент по описанию встроенных функций, свойств и методов
- Подсветка одинаковых слов
- Замена по Ctrl-H
- Подсказка значений переменных при наведении курсора мыши во время отладки скрипта
- Возможность вычисления выделенной области при наведении курсора мыши во время отладки
- Использование шаблонов кода (автоматическое обновление их с GitHub)
- И некоторые другие....
Для того, чтобы во время отладки при наведении курсора мыши показывалось значение переменной нужно вызвать окно "Вычислить выражение" и закрыть его или при первом наведении редактор сам попытается его вызвать нажав на кнопки и автоматически закрыв, но это не всегда может сработать.
Редактор развивается и могут присутствовать недочёты и глюки.
Сайт проекта: https://github.com/WendyH/HMSEditor/releases
Проект только запустился и молод, так что не обессудьте.
Горячие клавиши
- F11 - показ/скрытие дополнительной панели инструментов
- F12 - Goto Definition - переход к определению переменной / функции
- Esc - скрытие всех подсказок
- F9 - запуск скрипта
- F8 - пошаговая отладка
- F5 - установка/снятие точки остановки (breakpoint)
- F3 - найти следующее совпадение
- Alt + 1...9 - установка номерной закладки
- Ctrl + 1...9 - переход к номерной закладке
- Ctrl + G - переход к номеру строки
- Ctrl + F - поиск по тексту
- Ctrl + H - замена по тексту
- Ctrl + D - переключение на "родной" встроенный редактор (переключение назад - некоторое время ничего не делать)
- Alt + Влево - переход назад по истории переходов
- Alt + Вправо - переход вперёд по истории переходов
- Ctrl + Shift + C - закомментировать / раскомментировать выделенные строки
Инсталляция
- Скачиваем файл HMSEditor.exe отсюда: https://github.com/WendyH/HMSEditor/releases/latest
- Копируем его в любое удобное место, откуда мы потом будем его запускать. Например, можно скопировать в каталог, где установлен Home Media Server (типа "C:\Program Files (x86)\Home Media Server\").
- Скачиваем файл HMSEditor.cfg отсюда: https://github.com/WendyH/HMSEditor/releases/download/1.0.1.0/HMSEditor.cfg
- В программе "Домашний медиа-сервер" нажать "Настройки".
- Слева выбрать категорию "Медиа-ресурсы"
- Справа выбрать "Обработка"
- Выбрать "Загрузить" и выбрать этот файл. После этого будет загружен скрипт запуска HMSEditor.exe.
- Далее, в программе программе "Домашний медиа-сервер", в настройках выбрать категорию "События"
- В поле "После запуска программы" выбрать из выпадающего списка наш скрипт "Запуск HMSEditor".
Также, скрипт можно отредактировать, например для того, чтобы изменить место запуска HMSEditor.exe.
Для этого всего-лишь нужно изменить в скрипте строку:
filepath: String = '"'+ProgramPath+'\hmseditor.exe" -givemesomemagic';
где ProgramPath можно заменить на свой путь, откуда будет запускаться HMSEditor.exe. Например, эта строка может выглядеть так:
filepath: String = "D:\HMSEditor\hmseditor.exe -givemesomemagic";
После этого, при запуске программы "Домашний медиа-сервер", автоматически будет запущен альтернативный редактор в фоне, который никак себя не будет проявлять, кроме как появляться при открытии окон для редактирования скриптов.
В памяти программа занимает обычно от 18 до 25 мегабайт.
Надеюсь, кому-нибудь пригодится.
Пример использования шаблонов в HMSEditor
За пример взят ресурс http://gidonline.club/ и показан пример создания подкаста, практически в реальном времени с использованием HMSEditor и шаблонов кода. Пример, конечно, взят специально такой, на котором бы выглядело всё просто и я знал, что метод получения ссылки на ресурс есть в моей базе знаний заранее. Пример показывает создание простого подкаста новинок фильмов с данного ресурса.
http://www.youtube.com/watch?v=dCKhdEFSiVY