FarNet — .NET Far API and .NET module manager

Анонсы новых плагинов. Обсуждение плагинов ведется ниже.
Post Reply
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

FarNet — .NET Far API and .NET module manager

Post by NightRoman »

Last edited by NightRoman on Tue 11 Oct, 2016 20:12, edited 34 times in total.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

Far.Net 3.2.2

Изменение только одно, но практичное: выделенный в редакторе текст теперь возвращается, как он есть, а не одна строка. Таким образом, можно выполнять незамысловатые операции над выделенным текстом по схеме: получить текст, преобразовать, присвоить обратно. Выделение при этом не снимается, то есть можно проделать несколько последовательных операций.

Остальная функциональность редактора пока в процессе разработки.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

Far.Net 3.2.3

Редактор уже практически работает.

ВНИМАНИЕ: эта версия, вероятно, требует незначительных, но все же изменений в коде существующих плагинов. Администрация приносит извинения за причиненные неудобства - это сделано не для красоты стиля, а для реальной совместимости Far.Net с большим числом потенциальных потребителей, например, стандартную форму обработчиков событий требует PowerShell, поэтому обработчики и приведены к стандартному виду, рекомендуемому (не случайно) самим Microsoft http://msdn2.microsoft.com/en-us/library/ms229011.aspx.

Список изменений:

*) реализована основная функциональность редактора через списки текстовых строк и строк-объектов; исчерпывающий демонстрационный пример - это PowerShell скрипт Test-Editor-.ps1, прилагающийся к последней версии 1.0.3 плагина PowerShellFar (смотри в анонсах плагинов по соседству); надеюсь, легко сообразить, как его "перевести" на нужный язык, тут главное - идея, чем и как уже можно пользоваться.
*) все интерфейсные коллекции типизированы, то есть переведены на generic - это, возможно, потребует изменений в коде плагинов (скорей приятных, ибо приятнее и безопаснее работать с явными типами, чем заниматься сомнительными приведениями типов).
*) все обработчики событий сделаны "стандартными", то есть типа (object sender, ..EventArgs e). Это изменение наверняка потребует изменений в коде плагинов (менее приятных, но ничего страшного, просто косметика). Пример (C#):

Code: Select all

// в библиотеке:

// было: декларация "нестандартного" обработчика:
public delegate void OnOpenPluginMenuItemDelegate(IPluginMenuItem sender, OpenFrom from);

// стало: декларации нет, используется EventHandler или, в данном случае, EventHandler<OpenPluginMenuItemEventArgs>
// + определен класс OpenPluginMenuItemEventArgs (только для событий, требующих аргументов, в данном случае они есть)
class OpenPluginMenuItemEventArgs

// в вашем коде:

// было: обработчик выглядел так:
void ..OnOpen(IPluginMenuItem sender, OpenFrom from)

// стало: обработчик должен выглядеть так:
void ..OnOpen(object sender, OpenPluginMenuItemEventArgs e)

// *) sender - это тот же IPluginMenuItem, но переданный, как object
// *) старый "OpenFrom from" теперь стал доступен как "e.From"
Итак, обобщаем:
*) запустите сборку вашего кода, если нет проблем - выход, если проблемы, то:
*) во всех обработчиках сделайте: первый аргумент "object sender", sender это тот же тип, что был раньше, просто передается, как object; второй аргумент "EventArgs e", если аргумента вообще не было, или соответствующий данному обработчику "..EventArgs e" - кроме уже упомянутого в примере: 1) "Key key" замените на "KeyEventArgs e", где Key доступно как e.Key; 2) "Mouse mouse" замените на "MouseEventArgs e", где Mouse доступно как e.Mouse; и так далее по аналогии (хотя, вроде все уже и перечислено).
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

Far.Net 3.2.4

- функциональность редактора для работы с текстом реализована практически полностью, если что-то не работает, то это уже не временная недоделка, а недосмотр или ошибка, можно жаловаться. Дотошный демонстрационный пример - это PowerShell скрипт Test-Editor-.ps1, прилагающийся к последней версии 1.0.4 плагина PowerShellFar (смотри в анонсах плагинов по соседству);
- добавлен метод IEditor.Bookmarks(), возвращающий текущий набор закладок.
- в IPanel добавлено много новых свойств, в основном get, но Path - это get\set, что позволяет менять текущую папку панели.
- добавлен интерфейс ICommandLine и свойство IFar.CommandLine, позволяет получить\устанавить содержимое командной строки через свойство Text.
- в папке примеров добавлены Build-CS.bat, Build-JS.bat, Build-VB.bat облегчающие сборку плагинов без наличия Visual Studio и т.п. под рукой.
- примеры плагинов адаптированы к последним изменениям в Far.Net и заодно показывают, как можно использовать скрипты Build-*.bat для сборок.
- прочие мелочи

ВАЖНО: к сожалению, некоторые изменения потребуют изменений и в коде плагинов или скриптов, однако лучше их сделать накануне относительно работоспособной версии, чтобы уже потом было удобнее работать. Подробности в Far.Net.Readme.txt.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

Far.Net 3.2.5

- незначительные изменения в функциональности IMenu и ISelection, но есть и исправление потенциального падения Far при неаккуратно заданных координатах меню.

P.S. Новые скрипты добавлены в поставку плагина PowerShellFar 1.0.5 - все они, в сущности, являются новыми примерами работы с Far.Net, конкретный язык программирования тут не принципиален.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

Far.Net 3.2.6

- Новые свойства и методы: IMenuItem.Data, IMenu.SelectedData, IPanel.NumericSort, IFar.SetUserScreen(), ICommandLine.Insert().
- Тип свойства IEditor.ExpandTabs теперь не bool, а enum ExpandTabsMode.
- Более подробная информация для некоторых типов исключений, например, файл, строка и позиция ошибки в PowerShell скрипте.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

Far.Net 3.2.7

- Новое свойство IEditor.CurrentLine типа ILine.
- Новые свойства и методы ILine: Pos, Insert(), Select(), Unselect().
- IFar.CommandLine теперь типа ILine со всеми положенными свойствами и методами, в т.ч. работа с выделенной частью. Тип ICommandLine пока стал не нужен и удален.
- IFar.GetUserScreen() - посылает "user screen" (содержимое экрана под панелями) на экран Far. ВАЖНО: нужен Far 1.71.2187.
- IPanel.IsVisible теперь get\set - то есть можно скрыть\показать панель (но это сделано через макросы, то есть эта операция не всегда адекватно применима).
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

Far.Net 3.2.8

- Новый метод IFar.GetHistory()
- Интерфейс IVersion заменен на стандартный класс System.Version
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

Far.Net 3.2.9

- Централизована обработка исключений; кодировка временного файла с деталями исключения теперь юникод, отсюда правильное отображение кириллицы в ошибках.
- Новый метод IFar.ShowError() - для внутренних нужд, но можно использовать и для плагинов - выводит краткое сообщение и позволяет взглянуть на подробности.
- Новый метод IFar.PostText() - посылает текст, как будто он был напечатан, обрабатывая в том числе символы табуляции и разделители строк.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

3.3.0

- FarManager.Forms: реализованы интерфейсы диалога и его основных элементов: IDialog, IBox (double, single), IButton, ICheckBox, IEdit (standard, fixed), IRadioButton, IText. Пока нет "сложных" элементов (IComboBox, IListBox) и не поддерживаются события. Все в целом работает, можно использовать, но поскольку это первый блин, изменения и перестройки в будущем весьма возможны. Пример со всеми элементами - Test-Dialog-.ps1 в плагине PowerShellFar 1.1.0.

- Новый метод IFar.CreateViewer и интерфейс IViewer: позволяют создать и открыть просмотр файла, установив соответствующие свойства; события и методы для уже открытого просмотра (по аналогии с редактором) пока не реализованы.

- Новый метод IFar.WriteText.

- Ревизия интерфейса IInputBox:
* Свойство History: если значение пусто, то история не используется; было не так, отсюда нежелательные данные в реестре в корне папки Far\SavedDialogHistory, которые теперь можно удалить, если есть.
* Свойство UseLastHistory заменено на противоположное NoLastHistory (стараемся поддерживать общий стиль "false по умолчанию" и то, как в Far API).
* Метод Show() с параметрами удален (порядок параметров не такой, как в Far API и кому-то не интуитивен, поэтому настраиваем IInputBox только через свойства).
Если наличие метода нужно, пишите, будет добавлен, однако порядок параметров будет, как в Far API: Title, Prompt, History, Text.

- IFar.PostText() обрабатывает не только \n, как Enter, но и \r и \r\n. Пустой текст, а также пустая последовательность для IFar.PostKeys() - это не ошибка.

- Слегка оптимизированы некоторые операции со строками.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

3.3.1

- К элементам диалогов добавлены IComboBox, IListBox, редактор паролей и
вертикальный текст\разделители. Таким образом, реализованы все элементы и все
настройки за исключением DIF_VAREDIT.

- Диалоги и элементы теперь поддерживают и события (без особо продвинутых).
Примеры использования обработчиков реализованных событий, а также примеры
всех новых элементов - в Test-Dialog-.ps1 плагина PowerShellFar 1.1.1.

- Почти все основные свойства элементов диалога - динамические, то есть при уже
открытом диалоге их чтение дает текущие значения из диалога, запись отражается в
диалоге автоматически. Пример: опять же Test-Dialog-.ps1 - кнопка [Test] и код,
который относится к ней.

- IFar.Msg(): разделители строк сообщения могут быть \r, \n и \r\n, табуляции
заменяются пробелами. Текст форматируется с учетом размеров экрана, т.е. можно
нормально показать довольно большое сообщение. Два новых метода IFar.Msg(): со
стандартными опциями и с дополнительными кнопками - позволяют создать сообщение
одной командой и получить ответ - индекс кнопки или -1 при Escape.

BREAKING CHANGES

- Ревизия классов и функциональности Key, Mouse и связанных с ними событий в
целях оптимизации производительности и стандартизации (KeyInfo, например,
лексически полностью совместим с KeyInfo из System.Management, что позволяет
использовать один и тот же код без изменений в разных местах). Найдены и
исправлены ранее невидимые ошибки. К сожалению, все это может потребовать
изменений в коде, использующем Key и Mouse, но изменения в основном типа
переименований.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

3.3.1 fix

Здесь фикс обработки событий клавиш и мыши в редакторе. Больше ничего нового. Примите извинения за возможные неудобства, если были.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

3.3.2

[Версия немного преждевременная из-за фикса неприятной ошибки, смотри ниже, но и кое-что новое есть]

- Исправлена досадная ошибка с IInputBox: когда история не была задана, строки
писались в папку реестра "HKEY_CURRENT_USER\Software\Far\SavedDialogHistory" с
мусорными именами - проверьте и удалите этот мусор (каюсь, не пинайте).

- В IEditor добавлены методы ConvertPosToTab, ConvertTabToPos (для конкретной
строки) и ConvertScreenToCursor (конвертирует, например, координаты из события
мыши в позицию в тексте).

- Метод IMenu.Show выполняет предварительный анализ координаты Y, если задана,
и количества отображаемых элементов - если на экране умещаются не все, то Y
автоматически корректируется.

- Интерфейс IPoint преобразован в структуру Point в целях производительности и
удобства применения. Маловероятно, но это может потребовать незначительных
изменений в коде, если IPoint использовался явно.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

3.3.3

- В редакторе появились полезные методы Begin() и End(), позволяющие решить
проблему медленной итерации по большому числу строк "централизованно". Пример:
очистка концов строк на файле с 40,000 строк эта процедура работала 2-3 минуты
без Begin\End, теперь на том же файле - всего 4 секунды).

- Как было анонсировано, поскольку возражений не было, интерфейс ICursor
преобразован в структуру TextFrame + связанные с этим свойства Frame, Cursor и
вспомогательные методы GoTo*. Увы, это потребует изменений в коде с ICursor, но
это выглядит оправданно по первым впечатлениям, работать с этим будет удобнее.

- В диалогах IEdit и IComboBox имеют новое свойство Line типа ILine, со всей
положенной функциональностью (кроме выделения пока). Таким образом, есть уже 3
носителя этого интерфейса: строки в редакторе, командная строка и поля ввода в
диалогах (пример эффективного использования: в PowerShellFar TabExpantion для
строк 3 типов редакторов делается одной процедурой, работающей просто с ILine).

- Исправлено падение в диалогах на обработке Idled при отсутствии обработчика.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Post by NightRoman »

3.3.4

- Implemented IEdit\IComboBox.Line.Selection.
- Interfaces IRect, IStream, ITwoPoints are replaced with value type with
neutral name Place which can be used as Rect, Stream or TwoPoints.
- New properties HelpTopic in IDialog, IMenu, IInputBox, IMessage and new method
IFar.ShowHelp().
- Removed FarDotNetStruct.dll; you should remove it manually if you have one,
normally it is in here: "%FARHOME%\Lib\".
Post Reply

Return to “Анонсы новых плагинов”