Page 1 of 18
FarNet — .NET Far API and .NET module manager
Posted: Tue 26 Dec, 2006 01:49
by NightRoman
FarNet allows you to write modules for Far Manager in any .NET language (or even in PowerShell with the PowerShellFar module). It exposes most of Far Manager API and extends it for comfortable use in object oriented way. It is implemented in C# and C++/CLI. See also:
FarNet/wiki
FarNet is distributed as the NuGet package:
https://www.nuget.org/packages/FarNet
HOW TO DOWNLOAD AND INSTALL
Download and install manually (normally not recommended):
https://nuget.org/api/v2/package/FarNet
FarNet family modules:
Other FarNet modules:
Обсуждение.
Posted: Thu 28 Dec, 2006 04:56
by NightRoman
Far.Net 3.2.2
Изменение только одно, но практичное: выделенный в редакторе текст теперь возвращается, как он есть, а не одна строка. Таким образом, можно выполнять незамысловатые операции над выделенным текстом по схеме: получить текст, преобразовать, присвоить обратно. Выделение при этом не снимается, то есть можно проделать несколько последовательных операций.
Остальная функциональность редактора пока в процессе разработки.
Posted: Fri 05 Jan, 2007 03:19
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; и так далее по аналогии (хотя, вроде все уже и перечислено).
Posted: Mon 15 Jan, 2007 03:27
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.
Posted: Wed 17 Jan, 2007 21:21
by NightRoman
Far.Net 3.2.5
- незначительные изменения в функциональности IMenu и ISelection, но есть и исправление потенциального падения Far при неаккуратно заданных координатах меню.
P.S. Новые скрипты добавлены в поставку плагина PowerShellFar 1.0.5 - все они, в сущности, являются новыми примерами работы с Far.Net, конкретный язык программирования тут не принципиален.
Posted: Mon 29 Jan, 2007 02:28
by NightRoman
Far.Net 3.2.6
- Новые свойства и методы: IMenuItem.Data, IMenu.SelectedData, IPanel.NumericSort, IFar.SetUserScreen(), ICommandLine.Insert().
- Тип свойства IEditor.ExpandTabs теперь не bool, а enum ExpandTabsMode.
- Более подробная информация для некоторых типов исключений, например, файл, строка и позиция ошибки в PowerShell скрипте.
Posted: Wed 31 Jan, 2007 12:05
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 - то есть можно скрыть\показать панель (но это сделано через макросы, то есть эта операция не всегда адекватно применима).
Posted: Fri 02 Feb, 2007 05:14
by NightRoman
Far.Net 3.2.8
- Новый метод IFar.GetHistory()
- Интерфейс IVersion заменен на стандартный класс System.Version
Posted: Mon 05 Feb, 2007 01:36
by NightRoman
Far.Net 3.2.9
- Централизована обработка исключений; кодировка временного файла с деталями исключения теперь юникод, отсюда правильное отображение кириллицы в ошибках.
- Новый метод IFar.ShowError() - для внутренних нужд, но можно использовать и для плагинов - выводит краткое сообщение и позволяет взглянуть на подробности.
- Новый метод IFar.PostText() - посылает текст, как будто он был напечатан, обрабатывая в том числе символы табуляции и разделители строк.
Posted: Mon 12 Feb, 2007 01:57
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() - это не ошибка.
- Слегка оптимизированы некоторые операции со строками.
Posted: Sun 18 Feb, 2007 21:00
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, но изменения в основном типа
переименований.
Posted: Mon 19 Feb, 2007 16:09
by NightRoman
3.3.1 fix
Здесь фикс обработки событий клавиш и мыши в редакторе. Больше ничего нового. Примите извинения за возможные неудобства, если были.
Posted: Tue 20 Feb, 2007 20:39
by NightRoman
3.3.2
[Версия немного преждевременная из-за фикса неприятной ошибки, смотри ниже, но и кое-что новое есть]
- Исправлена досадная ошибка с IInputBox: когда история не была задана, строки
писались в папку реестра "HKEY_CURRENT_USER\Software\Far\SavedDialogHistory" с
мусорными именами - проверьте и удалите этот мусор (каюсь, не пинайте).
- В IEditor добавлены методы ConvertPosToTab, ConvertTabToPos (для конкретной
строки) и ConvertScreenToCursor (конвертирует, например, координаты из события
мыши в позицию в тексте).
- Метод IMenu.Show выполняет предварительный анализ координаты Y, если задана,
и количества отображаемых элементов - если на экране умещаются не все, то Y
автоматически корректируется.
- Интерфейс IPoint преобразован в структуру Point в целях производительности и
удобства применения. Маловероятно, но это может потребовать незначительных
изменений в коде, если IPoint использовался явно.
Posted: Thu 22 Feb, 2007 06:49
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 при отсутствии обработчика.
Posted: Mon 26 Feb, 2007 05:23
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\".