1

Тема: HMSEditor (архив)

Данные проект больше не развивается и перерос в другой. Данная тема предназначена для архива.

https://api.soundcloud.com/playlists/160439103

Что такое HMSEditor?

Примерно 4 месяца упорного труда. Ни на что, практически, не отвлекался. С гордостью представляю свой проект:

HMSEditor - это альтернативный редактор скриптов для программы "Домашний медиа-сервер" с IntelliSense и дополнительными возможностями.

Возможно, будет полезен начинающим разбираться в программе при написании скриптов или другим кодерам, которые хотят облегчить себе жизнь при их написании или отладке.

+ Лирическое отступление или "Кто ж мне запретит?"

Предисловие

Решил я как-то раз, при написании части №2 о созданиях подкастов, что нужно как-то собраться да и сделать Wiki с описанием функций, чтобы можно было ссылаться на них. Хотя бы тех, которых я знаю. И я даже начал это делать, но... Захотелось что бы описания были с примерами. А писать простые примеры и команды приходиться часто. А для проверки их работы нужно писать обвязку - ещё часть кода, в котором бы данный пример выполнялся.

В итоге моя лень взяла меня за шкварник и сказала: "Придумай что-нибудь, это ж мы запаримся всё это по 300 раз писать и всё это растянется ещё на пару лет!". И я подумал - был же у меня недоделанный проект с собственным редактором для YAML, возможностью подсветки синтаксиса и даже подсказок. А значит, может мне для себя в тот редактор бы добавить ключевые слова да названия функций - и всё будет быстрее. Хотя бы набирать текст примеров кода.

Вот с такой мыслью я создал проект HMSEditor.

Что-то во мне щёлкнуло, рейка вошла в паз, полукольцо наехало на вал, тельмец соскочил с колодки и шестерёнки начали крутиться, поворачивая шнек для подачи СОЖ на крестовину и я начал делать редактор.

"Было бы не плохо, чтобы подсказки сразу выводили описание функции, переменной или класса."

А вот тут кралась та самая засада. Ещё более года назад я просил автора HMS Евгения сделать Wiki, чтобы туда постепенно заносить, хотя бы своими силами, описания функций, примеров и проч. И он даже сделал и дал адрес. Но... так ничего я туда и не занёс, ибо, как оказалось, это очень трудно, долго и невозможно, когда на самом деле не знаешь как это всё должно работать и устроено. Я знал, что те же проблемы меня ждут и здесь. Но я решил броситься на амбразуру, а там посмотрим что будет. После придумаем выход из положения.

Список функций, переменных и свойств классов я получил тупо пересчелкивая их в справочнике справа в редакторе. А вот с описанием пришлось повозиться. Очень сильно повозиться. Описания для классов, свойств и общих функций я брал из интернета к компонентам Delphi. Где-то переводил с английского, где то занимался отсебятиной (считая, что знаю что делаю).

Так что опечатки, ошибки, неточности и, в некоторых случаях, ввод в заблуждение гарантируется. Было бы очень полезным получить обратную реакцию с указанием таких косяков. Если кто будет пользоваться.

Т.к. проект выложен на GitHub и свободен - всегда можно причаститься и поучаствовать.
Кстати, проект написан непрофессионалом, поэтому код странный. Советам буду рад.

+ Как я доставал существующие описания функций из программы "Домашний медиа-сервер"
Т.к. через WM_GETTEXT или другие сообщения окну или контролу я так и не смог получить хоть в каком-то виде описания встроенных функций (хотя бы тех, которые были), было решено покопаться внутри самой программы.

Она была, беспощадно дисассемблирована, насколько можно декомпилирована и разобрана. Надеюсь, автор не обидется. Если что - Закон РФ 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 и при появлении именно редактора, скрываю поле редактирования, создаю свой объект редактора и родителем ставлю 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 - закомментировать / раскомментировать выделенные строки

Инсталляция

  1. Скачиваем файл HMSEditor.exe отсюда: https://github.com/WendyH/HMSEditor/releases/latest
  2. Копируем его в любое удобное место, откуда мы потом будем его запускать. Например, можно скопировать в каталог, где установлен Home Media Server (типа "C:\Program Files (x86)\Home Media Server\").
  3. Скачиваем файл HMSEditor.cfg отсюда: https://github.com/WendyH/HMSEditor/releases/download/1.0.1.0/HMSEditor.cfg
  4. В программе "Домашний медиа-сервер" нажать "Настройки".
  5. Слева выбрать категорию "Медиа-ресурсы"
  6. Справа выбрать "Обработка"
  7. Выбрать "Загрузить" и выбрать этот файл. После этого будет загружен скрипт запуска HMSEditor.exe.
  8. Далее, в программе программе "Домашний медиа-сервер", в настройках выбрать категорию "События"
  9. В поле "После запуска программы" выбрать из выпадающего списка наш скрипт "Запуск 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

Sony Bravia KDL-32CX523
Спасибо сказали: d1mas1

2

Re: HMSEditor (архив)

+ Технические данные (как это работает)
Программа написана на языке C# с использованием .NET 2.0 в Visual Studio Community 2015.

При старте программы она ищет процесс hms.exe и добавляет hooks к его процессу (перехватывает сообщения главного цикла WM_MESSAGES). Этим самым мы можем следить за созданием новых объектов, окон, контролов. Но, т.к. данное внедрение в чужой процесс легкий (типа soft), то и возможностей понять что происходит в другом процессе очень не много. Делать специальную dll с внедрением в чужую память и прочее я специально не стал, ибо всё-таки производительность далеко не на последнем месте, а так, как я это реализовал - практически не торможу другой процесс и не напрягаю систему. Обычное состояние HMSEditor в памяти - 0% нагрузки на проц.

  • Состояния настроек загружаются при создании копии редактора, во время открытия окна редактора скрипта. Сохранение настроек - при закрытии окна.
  • Настройки сохраняются в общую папку программ (в Windows 7 это "C:\ProgramData\HMSEditor\", в XP это "C:\Document and settings\All users\Application data\HMSEditor\").
  • Туда же сохраняются обновлённые шаблоны с GitHub.
  • Проверка наличия обновлений программы делается всегда, при открытии окна "О программе" из меню настроек в панели инструментов (включается по F11).
  • Все проверки делаются с использованием API GitHub.
  • После загрузки файла обновления в папку "Downloads" ("Загрузки") текущего пользователя, проверяется наличие валидной цифровой подписи. Если не валидна - отказ от обновления.
  • Т.к. GitHub работает только по протоколу https, то также проверяется наличие защищённого соединения (проверяется системой). Если сертификат использующийся для соединения не является доверенным - обновлений не будет. Идёт проверка на правильность соединения защищённого протокола. Это значит, если будет использоваться прокси с подставленным сертификатом или ваш провайдер тоже будет делать его подмену - соединения с GitHub не будет, а значит и обновлений.
  • Настройки редактора для режима автономной работы, а также для других трёх разных режимов: редактирования скриптов, редактирование скриптов профилей транскодирования, редактирования скриптов обработок ("Настройка" -> "Медиа-ресурсы" -> "Обработка") хранятся отдельно. Это значит, что если вы настроите редактор (включив или выключив пункты настроек в меню панели инструментов) в режиме редактирования профиля транскодирования, то это никак не повлияет на настройки редактирования скриптов подкастов или автономного режима. И наоборот.

Исходный код программы мало закомментирован, но я старался писать самодокументируемый код - названия переменных, свойств и функций говорят о том, для чего они предназначены. Со временем, может быть, я буду добавлять комментарии к коду.

С некоторой паузой после редактирования текста, в отдельном процессе идёт просмотр в какой процедуре мы находимся (или в глобальном пространстве), а до этого сканируется список процедур с запоминанием начала и конца каждой. В зависимости от выбранного языка скрипта поиск идёт по-разному.
Сканируются объявление переменных в текущем контексте процедуры и потом в глобальном (всё что вне). Собираются данные о том какие и какого типа эти переменные.
Это нужно для того, чтобы не только подсказывать названия функций или видимых переменных, но и для того, чтобы знать, что подсказывать - какие методы и свойства предлагать, если будет нажата точка после переменной с типом какого-нибудь класса.

Данное сканирование и "умные" подсказки работают только с языком PascalScript и C++Script. Ибо JScript - там все переменные изначально с типом Variant и их объявление не обязательно. А с BasicScript я просто не разобрался (признаться, я так и не понял как там объявляются типы и возможно ли это вообще, точнее, желания пока не было).

Помните, что подсказки и анализ контекста не совершенен и написан мной - во многих процессах неопытным и рассчитан на "правильный" код. Легко сломать мозг анализатору, просто нарушая все правила синтаксиса или очень странно его использовав. Так что можно получить неадекватные подсказки или ещё какое-то поведение при "неправильном" коде. Хотя, очень прошу, сообщайте о найденных недостатках, если их найдёте.

Т.к. в коде есть использование параллельных процессов и потоков (для вычисления и анализа или показа подсказок, чтобы не тормозить саму работу редактора), то, боюсь, это может вызывать раздражение богов параллельных миров, которые могут послать проклятия с глюками и непредсказуемостью. Я их старался не гневить, например, не использовать запись в свойства перекрёстных потоков и обходить даже необходимость блокировок для работы с одними и теми же данными (но всё-таки есть пара моментов).

Если хотите посмотреть, что может получится, если за дело возьмётся непрофессионал, с довольно большим упорством и штудированием stackoverflow.com, то можете посмотреть исходный код на GitHub и даже что-то посоветовать. Буду рад.

+ Особенности редактора

  • По-умолчанию, во внедрённых редакторах панель дополнительных инструментов сверху скрыта (в отличие от автономного режима). Вызывается нажатием F11.
  • Настройки запоминаются отдельно для разных режимов работы 1) автономной, 2) редактирования скриптов, 3) редактирование скриптов профилей транскодирования, 4) редактирования скриптов обработок.
  • Подсказка к функции и её параметрам показывается только тогда, когда нажата после её имени открывающая круглая скобка или запятая внутри скобок функции. Сделано это для того, чтобы подсказки не всплывали постоянно при исправлении параметров или небольших изменений. Иначе их навязчивость очень надоедает.
  • Чтобы убрать все окна подсказок - нажмите Esc. Иногда они закрывают приличную часть кода.
  • Подсказки выводятся сначала те, которые начинаются на набранный текст, а потом идут те, в которых встречается набранный текст.
  • После выбора подсказки - запоминается 20 последних выбранных вариантов для того, чтобы при последующем наборе текста, предпочтение было выбрано именно им - именно поэтому иногда выделенный элемент становится не первым по списку, а тот который был до этого выбран и есть в данном списке. Данная статистика нигде не запоминается и действует только с начала открытия окна.
  • Иногда, когда текст слишком быстро набирается и не делается пауз - программа может не просканировать уже набранные переменные и они не будут участвовать в подсказках и даже в подсказках методов их класса. Это может происходить потому, как анализ изменения текста происходит только если изменения перестали происходить и некоторое время ничего не делалось (на самом деле, пауза примерно в 500-600 миллисекунд, т.е. пол секунды). Это сделано для того, чтобы экономить ресурсы.
  • По Ctrl-D происходит переключение на стандартный редактор. Т.к. события от встроенного редактора никак пока не получить, то обратное переключение происходит по тайм-ауту ("времени ничего неделания") через некоторое время.

Замечания и предложения оставлять тут.

Sony Bravia KDL-32CX523
Спасибо сказали: PashaN65, Spell2

3

Re: HMSEditor (архив)

WendyH
Я не знаю конечно что ты куришь, но трава знатная! *THUMBSUP*  :D
P.S.1 Осталось народу подучить азы Pascal...

4 (2015.11.05 13:08:33 отредактировано d1mas)

Re: HMSEditor (архив)

WendyH пишет:

Замечания и предложения оставлять тут.

Низкий поклон за усилия, потраченное время, и главное за результат.

Пробую все делать по инструкции - не стартует HMSEditor. Строку запуска вывел в лог - все правильно. Подозреваю, что из-за этого:
https://hms.lostcut.net/misc.php?action=pun_attachment&item=363
Появляется при запуске редактора по двойному клику мышкой. После чего все прекрасно фурычит.

ОС: Windows 7x64, HMS 2.0.1

Прикреплённые файлы сообщения

2015-11-05_125945.jpg 109.06 kb, скачивалось 225 раз, начиная с 2015.11.05

5

Re: HMSEditor (архив)

Хмм.. Может быть. А ещё первый запуск приложения не очень быстрый. Может подтупить некоторое время, и в это время пытаемся открыть редактор скриптов в программе - а там старый. Через некоторое время он может начать перехватывать окно для внедрения.

На картинке выше можно снять галочку "Always ask before opening this file", что примерно переводится как "Всегда спрашивать это при открытии этого файла". Как видите, файл подписан цифровой подписью, как-бы ответственность беру на себя, что не заражён и проч.

Но нужно разобраться, в чём дело. Если получится - отпишитесь.

Sony Bravia KDL-32CX523

6

Re: HMSEditor (архив)

WendyH пишет:

Хмм.. Может быть. А ещё первый запуск приложения не очень быстрый. Может подтупить некоторое время, и в это время пытаемся открыть редактор скриптов в программе - а там старый. Через некоторое время он может начать перехватывать окно для внедрения.

На картинке выше можно снять галочку "Always ask before opening this file", что примерно переводится как "Всегда спрашивать это при открытии этого файла". Как видите, файл подписан цифровой подписью, как-бы ответственность беру на себя, что не заражён и проч.

Но нужно разобраться, в чём дело. Если получится - отпишитесь.

Спасибо. Что он пишет - я понимаю :) Стартует, кстати, шустро. Мощи у компьютера достаточно. Вот галочку снимать неохота, эта политика работает на типы файлов, а не на конкретный экзешник (судя по информации, которую я на скорую руку нагуглил). Похоже что-то ему в подписи не нравится. Обычно разок спросит и все, а тут каждый раз.
Продолжаю изыскания.

7

Re: HMSEditor (архив)

Проверил, скачал веб установщик GitHubSetup.exe и при запуске он тоже это окно показывает. Скачал HMSEditor (я за чужим рабочим компом) и он тоже при запуске спрашивает (то окно как на картинке выше). Так вот, я снял галочку у HMSEditor и теперь при запуске он ничего не спрашивает. А при запуске GitHubSetup.exe всё также при этом выводит это окно. Windows 7 Проф x64. Не знаю как это будет на Windows 8 и, тем более, на Windows 10.
Не знаю на счёт недоверия к подписи, на GitHub, Inc он же тоже вопрошает... Не, сейчас скачал ProcessExplorer с подписью от микромягких - тоже спрашивает.

Sony Bravia KDL-32CX523

8

Re: HMSEditor (архив)

WendyH пишет:

Проверил, скачал веб установщик GitHubSetup.exe и при запуске он тоже это окно показывает. Скачал HMSEditor (я за чужим рабочим компом) и он тоже при запуске спрашивает (то окно как на картинке выше). Так вот, я снял галочку у HMSEditor и теперь при запуске он ничего не спрашивает. А при запуске GitHubSetup.exe всё также при этом выводит это окно. Windows 7 Проф x64. Не знаю как это будет на Windows 8 и, тем более, на Windows 10.
Не знаю на счёт недоверия к подписи, на GitHub, Inc он же тоже вопрошает... Не, сейчас скачал ProcessExplorer с подписью от микромягких - тоже спрашивает.

Согласен. Снял галочку. Окно с запросом при запуске пропало. Но из скрипта так и не работает. Разбираюсь дальше. Спасибо.

9

Re: HMSEditor (архив)

Разобрался! Не запускалось, потому что я ... невнимательный.
В скрипте HMSEditor.cfg строка, содержащая путь запуска файла не срабатывала, потому как в пути с "Program Files (x86)" есть пробелы и нужно такой путь брать в кавычки. А сам пользуюсь отредактированным путём с диска D: поэтому и не заметил проблемы.

В общем, я HMSEditor.cfg обновил и по вышеприведённой ссылке можно заново скачать его или просто подправить в скрипте,
найти изменить подобную строку на вот такую (добавлено обрамление кавычками):

filepath: String = '"'+ProgramPath+'\HMSEditor.exe" -givemesomemagic';

P.S.: Кстати, там при редактировании этого скрипта можно поставить вверху галочку "Кнопка на главной форме" и запускать по нажатию этой кнопки потом.

Sony Bravia KDL-32CX523

10 (2015.11.05 21:31:32 отредактировано d1mas)

Re: HMSEditor (архив)

WendyH пишет:

Разобрался! Не запускалось, потому что я ... невнимательный.
В скрипте HMSEditor.cfg строка, содержащая путь запуска файла не срабатывала, потому как в пути с "Program Files (x86)" есть пробелы и нужно такой путь брать в кавычки. А сам пользуюсь отредактированным путём с диска D: поэтому и не заметил проблемы.

В общем, я HMSEditor.cfg обновил и по вышеприведённой ссылке можно заново скачать его или просто подправить в скрипте,
найти изменить подобную строку на вот такую (добавлено обрамление кавычками):

filepath: String = '"'+ProgramPath+'\HMSEditor.exe" -givemesomemagic';

P.S.: Кстати, там при редактировании этого скрипта можно поставить вверху галочку "Кнопка на главной форме" и запускать по нажатию этой кнопки потом.

Прекрасно. Вот теперь как из пушки. Спасибо.
А интересно, можно ли так же из HMS "прибивать" редактор при выходе из приложения?

P.S. Кнопочку с хоткеем я сразу замутил :)

P.P.S. Странно, что эксепшн не отрабатывал.

11

Re: HMSEditor (архив)

d1mas пишет:

А интересно, можно ли так же из HMS "прибивать" редактор при выходе из приложения?

Хмм, идея хорошая. Думаю, замучу.
Только сегодня увидел косяки - подсказка по функции (с хелпом по параметрам) улетела вбок вправо и там и показывалось пока не переоткрыл окно. Что это было - не понял.
Если что - сообщайте. Программа сыровата. И чувствуется, что иногда поведение подсказок или автозавершения кавычек (особенно они) подправить бы. Сделать более интеллектуальными, т.е. определить случаи, когда это автозавершение не делать.

Ну, к редактору нужно привыкать. И теперь ещё приходится всё время нажимать Esc, чтобы отогнать все повыскакивающие подсказки - как назойливые мухи. Хотя часто спасают.
Например, можно как в VisualStudio сделать, чтобы подсказка для функции и её параметрах появлялась только после нажатия запятой (разделяющую эти параметры).

Также обращаю внимание, что приходится вычислять в какой функции или методе какого типа переменной мы находимся, чтобы подсказки делать и пока определение это тупое. И если среди параметров будут встречаться скобки (например, вызов функции), то подсказки перестают просто показываться. Пока это нормально.

Sony Bravia KDL-32CX523

12

Re: HMSEditor (архив)

WendyH пишет:
d1mas пишет:

А интересно, можно ли так же из HMS "прибивать" редактор при выходе из приложения?

Хмм, идея хорошая. Думаю, замучу.
Только сегодня увидел косяки - подсказка по функции (с хелпом по параметрам) улетела вбок вправо и там и показывалось пока не переоткрыл окно. Что это было - не понял.
Если что - сообщайте. Программа сыровата. И чувствуется, что иногда поведение подсказок или автозавершения кавычек (особенно они) подправить бы. Сделать более интеллектуальными, т.е. определить случаи, когда это автозавершение не делать.

Ну, к редактору нужно привыкать. И теперь ещё приходится всё время нажимать Esc, чтобы отогнать все повыскакивающие подсказки - как назойливые мухи. Хотя часто спасают.
Например, можно как в VisualStudio сделать, чтобы подсказка для функции и её параметрах появлялась только после нажатия запятой (разделяющую эти параметры).

Также обращаю внимание, что приходится вычислять в какой функции или методе какого типа переменной мы находимся, чтобы подсказки делать и пока определение это тупое. И если среди параметров будут встречаться скобки (например, вызов функции), то подсказки перестают просто показываться. Пока это нормально.

Я пока обратной связи не предоставлю. Одни "ухтышки" :) А подсказки, в Eclipse они по Ctrl-Space вызываются. Если нужно - нажал, нет - и подсказок нет :)

13

Re: HMSEditor (архив)

Обновил версию. Вообще, использование Program Files для проги мне изначально не нравилось, но и создавать для неё отдельно папку где-то ещё тоже не очень.
Обновление из диалога "О программе" теперь, если нужно, запрашивает имя и пароль админских прав.
Ибо мы работаем под простым юзером (не админом), а для этой папки нужны админские права. Поэтому в предыдущих версиях обновится в таком случае вообще не получится (не догадался всё это проверить сразу).
Добавил пункт "Показывать подсказки только по Ctrl-Space" и немного изменил поведение подсказки для функций и параметров.

Sony Bravia KDL-32CX523

14 (2015.11.06 16:33:04 отредактировано d1mas)

Re: HMSEditor (архив)

WendyH пишет:

Обновил версию. Вообще, использование Program Files для проги мне изначально не нравилось, но и создавать для неё отдельно папку где-то ещё тоже не очень.
Обновление из диалога "О программе" теперь, если нужно, запрашивает имя и пароль админских прав.
Ибо мы работаем под простым юзером (не админом), а для этой папки нужны админские права. Поэтому в предыдущих версиях обновится в таком случае вообще не получится (не догадался всё это проверить сразу).
Добавил пункт "Показывать подсказки только по Ctrl-Space" и немного изменил поведение подсказки для функций и параметров.

Обновился. Опция "Показывать подсказки только по Ctrl-Space" есть. Но работает только в окне автономно запущенной копии. В HMS все осталось, как раньше.

А как настраивать опции? Только автономно запуская HMSEditor?

Если работает фоновый процесс, то вторая копия уже не стартует. Приходится "прибивать" задачу. Может в таких случаях перезапускать задачу или интерфейс открывать? Понимаю, на данном этапе это не критично, но на будущее тикет стоит оставить :)

P.S. И выбор мышкой во всплывающем окне не работает. Только метит.

15

Re: HMSEditor (архив)

Чуть позже напишу про особенности - давно хочу.
Пока ответ такой. Настройки сохраняются для разного режима свои. Храняться в "C:\ProgramData\HMSEditor\HMSEditor.ini"
Там же и шаблоны cскачанные с GitHub.
Чтобы выставить свои настройки в режиме внедрения - просто включите панель инструментов - F11.
Просто она по-умолчанию скрыта. Её отображение тоже запоминается.

За тикеты спасибо. ) Поправим выбор мышкой.

Sony Bravia KDL-32CX523

16 (2015.11.06 19:40:02 отредактировано d1mas)

Re: HMSEditor (архив)

WendyH пишет:

Чуть позже напишу про особенности - давно хочу.
Пока ответ такой. Настройки сохраняются для разного режима свои. Храняться в "C:\ProgramData\HMSEditor\HMSEditor.ini"
Там же и шаблоны cскачанные с GitHub.
Чтобы выставить свои настройки в режиме внедрения - просто включите панель инструментов - F11.
Просто она по-умолчанию скрыта. Её отображение тоже запоминается.

За тикеты спасибо. ) Поправим выбор мышкой.

Еще раз спасибо. F11 я проглядел - внимательней нужно читать вводные. Может параметр firstrun = true предусмотреть? :)

А еще, раз HMSEditor "присматривает" за процессом hms.exe при старте, может ему мониторить наличие в ОЗУ этого процесса с некоторой периодичностью и самовыгружаться, когда hms.exe не найден?

17

Re: HMSEditor (архив)

d1mas пишет:

Может параметр firstrun = true предусмотреть? :)

А еще, раз HMSEditor "присматривает" за процессом hms.exe при старте, может ему мониторить наличие в ОЗУ этого процесса с некоторой периодичностью и самовыгружаться, когда hms.exe не найден?

Если у вас версия не ниже 1.0.1.3 (вчерашняя, а сегодня выкатил 1.0.1.4, чтобы обновления через диалог "О программе" нормально делались, кстати, скажите, работает ли такое обновление у вас) , то "Самовыход" уже реализован.
Там всё проще оказалось. Дело в том, что на процесс hms.exe я делаю hook и перехватываю события создания и изменения всяких объектов и окон. Хоть там всё очень ограничено и многого не сделаешь, но сам факт уничтожения объекта с Handle (hWnd) главного окна программы перехватить вообще не проблема. Получается, что даже при выходе из программы hms.exe сам меня уведомляет. И там мне осталось только добавить условие да выход.

Проверьте, должен сам выходить - если был запущен в "тихом" режиме (из самого HMS, с ключом -givemesomemagic который). Если был запущен в StandAlone (автономном) режиме - то автоматом не выходит, подразумевается, что мы там типа шаблоны пишем или ещё какой ерундой занимаемся, независимо от HMS.

А позвольте спросить, тут от меня ускользнул ещё тогда смысл с перезапуском - предусмотреть завершение старого и проч. А... зачем?
В принципе, если это добавит удобства - добавить можно. Даже так - можно при повторном запуске спрашивать, типа: "Уже запущен, выйти или завершить другой процесс и запуститься дальше?". Понять бы для чего.
Пока можно через панель инструментов в редакторе нажать "Выгрузить программу из памяти", а файл потом запустить.
Если это для обновления, то, вообще хотелось бы там всё чтобы работало - в диалоге "О программе", уведомит о наличии новой версии и кнопка "Обновится" должна скачать, а потом превратиться в "Перезапустить" - которая сама всё перезапустит. По идее.

Sony Bravia KDL-32CX523

18 (2015.11.06 22:43:12 отредактировано d1mas)

Re: HMSEditor (архив)

WendyH пишет:
d1mas пишет:

Может параметр firstrun = true предусмотреть? :)

А еще, раз HMSEditor "присматривает" за процессом hms.exe при старте, может ему мониторить наличие в ОЗУ этого процесса с некоторой периодичностью и самовыгружаться, когда hms.exe не найден?

Если у вас версия не ниже 1.0.1.3 (вчерашняя, а сегодня выкатил 1.0.1.4, чтобы обновления через диалог "О программе" нормально делались, кстати, скажите, работает ли такое обновление у вас) , то "Самовыход" уже реализован.
Там всё проще оказалось. Дело в том, что на процесс hms.exe я делаю hook и перехватываю события создания и изменения всяких объектов и окон. Хоть там всё очень ограничено и многого не сделаешь, но сам факт уничтожения объекта с Handle (hWnd) главного окна программы перехватить вообще не проблема. Получается, что даже при выходе из программы hms.exe сам меня уведомляет. И там мне осталось только добавить условие да выход.

Проверьте, должен сам выходить - если был запущен в "тихом" режиме (из самого HMS, с ключом -givemesomemagic который). Если был запущен в StandAlone (автономном) режиме - то автоматом не выходит, подразумевается, что мы там типа шаблоны пишем или ещё какой ерундой занимаемся, независимо от HMS.

Все так и работает.
Проверил. Версию накатил вручную, так что автоапдейт не проверял. Но тут у меня лично проблем не делжно быть, я HMS и его сателлиты установил в папку

%systemdrive%\%users%\public\

Туда все пишется под непривилегированной учеткой спокойно. Но проверю при случае.

А позвольте спросить, тут от меня ускользнул ещё тогда смысл с перезапуском - предусмотреть завершение старого и проч. А... зачем?
В принципе, если это добавит удобства - добавить можно. Даже так - можно при повторном запуске спрашивать, типа: "Уже запущен, выйти или завершить другой процесс и запуститься дальше?". Понять бы для чего.
Пока можно через панель инструментов в редакторе нажать "Выгрузить программу из памяти", а файл потом запустить.
Если это для обновления, то, вообще хотелось бы там всё чтобы работало - в диалоге "О программе", уведомит о наличии новой версии и кнопка "Обновится" должна скачать, а потом превратиться в "Перезапустить" - которая сама всё перезапустит. По идее.

Смысл перезапуска после напоминания вами о наличии кнопки F11 в редакторе отсутствует :). По крайней мере для меня сценарий использования выглядит вполне осмысленным в том виде, который реализован сейчас. Можно, конечно, реализовать какой-нить сценарий при первом запуске редактора, чтобы пользователь получил очевидную возможность по опциям пробежаться. Либо меню по-умолчанию активным сделать, либо окошко какое. Ну и после обновления можно окошечко с ключевыми изменениями.
Но это уже шашeчки :)

19

Re: HMSEditor (архив)

d1mas пишет:

Можно, конечно, реализовать какой-нить сценарий при первом запуске редактора, чтобы пользователь получил очевидную возможность по опциям пробежаться. Либо меню по-умолчанию активным сделать, либо окошко какое. Ну и после обновления можно окошечко с ключевыми изменениями.
Но это уже шашeчки :)

Наверно сделаю показ панели по-умолчанию. На самом деле, скрыл я её для того, чтобы она не мозолила глаза там, где не сильно и нужна - например, при редактировании скрипта профиля транскодирования, на самом деле в одном окне - два редактора скриптов. Второй внизу - обычно занимает небольшое пространство, называется "Условие использования". Там какбэ отдельный редактор - и у меня это учитывается и он тоже подменяется (хоть сколько редакторов в одном окне). И я видел, что выглядит всё это в панелях инструментов и решил по-умолчанию скрыть. Чтобы было более привычно.

Хотя вы правы. Из-за этого немного не очевидно вообще её наличие. Вряд ли возможно запомнить все горячие клавиши в описании программы для новых пользователей.
Такие вопросы будут неизбежны.

Насчёт окошечка после обновления. Поддерживаю о идее возможности это посмотреть. Но пока (в последнем релизе 1.0.1.4), сделал наоборот - можно посмотреть информацию о изменениях перед обновлением, нажав на ссылку с информацией о наличии новой версии. Хотя, это проверить вы сможете только когда выйдет очередной релиз.

Обновил второе сообщение, добавил информацию о некоторых особенностях (мне кажется их было больше, возможно, буду дополнять). А также техническую информацию, для тех, кто интересуется.
https://hms.lostcut.net/viewtopic.php?pid=2114#p2114

Sony Bravia KDL-32CX523

20

Re: HMSEditor (архив)

d1mas пишет:

И выбор мышкой во всплывающем окне не работает. Только метит.

Проверил, выбор мышкой метит, а двойной щелчок - выбор. Э... Может так и оставить? А то полезно же выделить, чтобы почитать хелп, например, не выбирая для автозавершения.

Sony Bravia KDL-32CX523

21 (2015.11.07 16:45:00 отредактировано d1mas)

Re: HMSEditor (архив)

WendyH пишет:
d1mas пишет:

И выбор мышкой во всплывающем окне не работает. Только метит.

Проверил, выбор мышкой метит, а двойной щелчок - выбор. Э... Может так и оставить? А то полезно же выделить, чтобы почитать хелп, например, не выбирая для автозавершения.

Обновился на 1.0.15 через меню "О программе". Все прошло штатно.

Вот с выбором мышкой интересное наблюдение. Первый раз после открытия редактора двойной клик иногда не срабатывает. Со 2-го и дальше все отлично. Пока гарантировано воспроизвести не могу. Если получится - отпишусь.

А логика мне тоже кажется правильной.

22

Re: HMSEditor (архив)

d1mas пишет:

Вот с выбором мышкой интересное наблюдение. Первый раз после открытия редактора двойной клик иногда не срабатывает. Со 2-го и дальше все отлично.

Подтверждено. Даже воспроизводимо. Но пока с ходу не получилось найти причину. Всё срабатывает штатно, но как будто дух редактора отмену нажимает. Непонятно.

Sony Bravia KDL-32CX523

23

Re: HMSEditor (архив)

UPD: После обновления средствами программы в папке, где она установлена остался файл: HMSEditor.exe.TestPrivilegies. Его назначение понятно. Но мусорок же остался :)

24

Re: HMSEditor (архив)

Разобрался, будет исправлено. А также удаление за собой скачанного файла из папки %UserHome%\Downloads\.
Спасибо, что помогаете.

Sony Bravia KDL-32CX523

25

Re: HMSEditor (архив)

WendyH пишет:

Разобрался, будет исправлено. А также удаление за собой скачанного файла из папки %UserHome%\Downloads\.
Спасибо, что помогаете.

Закачивать-то в %TEMP% можно :)

26

Re: HMSEditor (архив)

d1mas пишет:
WendyH пишет:

Разобрался, будет исправлено. А также удаление за собой скачанного файла из папки %UserHome%\Downloads\.
Спасибо, что помогаете.

Закачивать-то в %TEMP% можно :)

Пока оставил как есть. Мне так больше нравится. Или вы настаиваете? )
Сделал подчистку всяких временных файлов, типа скачанного архива шаблонов и проч. И потом долго тупил, почему у меня обновление после перезапуска не происходило. А там ведь запускается процесс после выхода из самой программы процесс хотел скопировать скачанный на место основного, а программа за собой всё подчищала.

Вообще, хотел сделать как можно проще чтобы было. Только exe файл, без всяких установщиков и прочее. Однако, работа программы оставляет, в итоге, после своей работы кучку - папку HMSEditor в общей папке данных программ (%CommonAppData%) и там файл HMSEditor.ini, errors.log возможен (заложено ограничение его размера на 2 МБ), файлы шаблонов... И это всё остаётся. Как-то не очень. Хотя делать установщик и деинсталлятор с подчисткой как-то не хочется.
Может предусмотреть пункт в программе полной очистки от себя?
Ну или инсталлятор сделать всё-таки.

Кстати, обновил версию, исправил тот глюк.

Sony Bravia KDL-32CX523

27

Re: HMSEditor (архив)

WendyH пишет:
d1mas пишет:
WendyH пишет:

Разобрался, будет исправлено. А также удаление за собой скачанного файла из папки %UserHome%\Downloads\.
Спасибо, что помогаете.

Закачивать-то в %TEMP% можно :)

Пока оставил как есть. Мне так больше нравится. Или вы настаиваете? )
Сделал подчистку всяких временных файлов, типа скачанного архива шаблонов и проч. И потом долго тупил, почему у меня обновление после перезапуска не происходило. А там ведь запускается процесс после выхода из самой программы процесс хотел скопировать скачанный на место основного, а программа за собой всё подчищала.

Вообще, хотел сделать как можно проще чтобы было. Только exe файл, без всяких установщиков и прочее. Однако, работа программы оставляет, в итоге, после своей работы кучку - папку HMSEditor в общей папке данных программ (%CommonAppData%) и там файл HMSEditor.ini, errors.log возможен (заложено ограничение его размера на 2 МБ), файлы шаблонов... И это всё остаётся. Как-то не очень. Хотя делать установщик и деинсталлятор с подчисткой как-то не хочется.
Может предусмотреть пункт в программе полной очистки от себя?
Ну или инсталлятор сделать всё-таки.

Кстати, обновил версию, исправил тот глюк.

Я конечно же не настаиваю :) Это скорее привычка еще с Linux - все, что временно кладем в папку, специально для этого предназначенную :)

Странная история с окном запроса на внесение изменений. В моем случае и папка исходник и папка назначение ну точно доступны для записи под текущим пользователем. Однако окно все-равно появляется. Но это совершенно не критично.

Касательно процессов обновления и деинсталляции это уж вы определяйтесь с приоритетами. При том функционале и целевой аудитории редактора то, как есть вполне функционально. Коли пользователь сподобился заняться редактированием скриптов, квалификация ему позволит и хвосты почистить при случае. А если подходить к разработке, как к полноценному программному продукту - тут уж и отношение к мелочам должно быть соответствующим :)

28

Re: HMSEditor (архив)

Всё-таки, прислушался к вам, d1mas и сделал закачку файла в %Temp%.
Инсталляцию/деинсталляцию делать не стал. Хочется простоты. Просто иметь один файл - и чтобы этого было достаточно.
Но в диалог "О программе" добавил кнопку "Удалить", где можно подчистить за программой и удалить всё связанное.

Обновил редактор. Добавил "шашечек" - возможность выбора темы - оформления и подсветки. А также наконец-то разобрался с функцией проверки привилегий при обновлении.

Моё отношение к мелочам, думаю и так видно. Но вот сомнения меня иногда терзают, поэтому и спрашиваю иногда совета.

Например, я не уверен, что вот эти вот "раздельные настройки для разных режимов" вообще нужны. Обычно настроил себе как нравится, так и пользуешься. А тут несколько раз настраивать для разных режимов... Даже не знаю. С другой стороны открыл скрипт - и можно с одного взгляда определить в каком режиме (если настроены по-разному, особенно, если тема разная).

Меня пока это не напрягает. Но вдруг кого-то напрягёт? )

Sony Bravia KDL-32CX523

29 (2015.12.02 18:37:32 отредактировано d1mas)

Re: HMSEditor (архив)

WendyH пишет:

Всё-таки, прислушался к вам, d1mas и сделал закачку файла в %Temp%.
Инсталляцию/деинсталляцию делать не стал. Хочется простоты. Просто иметь один файл - и чтобы этого было достаточно.
Но в диалог "О программе" добавил кнопку "Удалить", где можно подчистить за программой и удалить всё связанное.

Обновил редактор. Добавил "шашечек" - возможность выбора темы - оформления и подсветки. А также наконец-то разобрался с функцией проверки привилегий при обновлении.

Моё отношение к мелочам, думаю и так видно. Но вот сомнения меня иногда терзают, поэтому и спрашиваю иногда совета.

Например, я не уверен, что вот эти вот "раздельные настройки для разных режимов" вообще нужны. Обычно настроил себе как нравится, так и пользуешься. А тут несколько раз настраивать для разных режимов... Даже не знаю. С другой стороны открыл скрипт - и можно с одного взгляда определить в каком режиме (если настроены по-разному, особенно, если тема разная).

Меня пока это не напрягает. Но вдруг кого-то напрягёт? )

Крутотень :)

А касательно "разных режимов". Автономный, он вообще зачем? Шаблоны создавать?

UPD
Кстати обнаружил, что автор выпустил новый паблик билд. Что там интересного:
Обновление на версию 2.03 (2.01) - (2.03) (2.02) - (2.03)

Домашний медиа-сервер (UPnP, DLNA, HTTP) (версия 2.03)

1. Добавлена поддержка дополнений - редакторов скриптов.
2. В строку состояния добавлена кнопка "Список дополнений"

Видимо это реверанс в сторону Вашего творчества. Как обычно, разбираться с заявленным функционалом автор предлагает самостоятельно. Я ничего, кроме этой опции в строке статуса не нашел.

30

Re: HMSEditor (архив)

d1mas пишет:

А касательно "разных режимов". Автономный, он вообще зачем? Шаблоны создавать?

Автономный режим был нужен мне чтобы по-быстрому проверить как это всё работает. ) Ну и думал, что шаблоны там можно редактировать или создавать. Но в реале, создавать их всё-таки удобней в самой программе, где они и проверяются на синтаксис и проч. Короче автономный не нужен.

И как вы уже заметили, да, вышла новая версия с поддержкой аддонов. И таки да, я активно с автором переписывался. В конце, выложу на гитхабе болванку адднона, по примеру которого будет понятно как это делать (создавать дополнения), по крайней мере на C#.

Описания интерфейсов для дополнений и планов автор выложил на отдельной странице.

И я решил полностью переключиться на аддоновский вариант. Там всё "нативно", без больших извращений. А значит и стабильней всё. Плюс я уговорил добавить в интерфейсы пару функций, через которые можно получить ещё дополнительных возможностей, которых не сделать в старой версии.

Т.е. HMSEditor.exe на данный момент останется таким как есть, а все новые версии и исправления будут выходить уже как HMSEditor.dll.
Уже работаю над аддоном. Думаю в конце этой недели или в начале той уже выйдет в свет.

Sony Bravia KDL-32CX523