FAR Manager
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.215] |
|
|
ПРАВИЛА РАЗДЕЛА
| Страницы: (3) 1 2 [3] все ( Перейти к последнему сообщению ) |
FAR Manager
|
Прикр. сообщ.
#1
,
|
|
|
|
Far Manager
Windows. FreeWare. Многофункциональный файловый менеджер для работы с различными файлами, позволяет просматривать файлы и каталоги, редактировать, копировать и переименовывать файлы. Поддерживает Unicode имеет удобный и простой в использовании пользовательский интерфейс с многоязычной поддержкой. Позволяет работать с архивами, FTP-клиентами, и просматривать сеть с помощью реализованных в стандартную поставку плагинов. Кроме того есть возможность расширения функциональности за счет подключения дополнительных плагинов. ![]() Ну очень странно что его уже давным давно не включили в разделе "Полезного ПО" Подключаемые модули (плагины) Возможности FAR существенно расширяются благодаря плагинам различного назначения: Домашняя страничка: https://farmanager.com |
|
Сообщ.
#31
,
|
|
|
|
Раз уж пошла такая пьянка, вот мой скрипт для автоотступов ![]() ![]() local strip = function(str) local i i = 1 while str:sub(i, i) == " " or str:sub(i, i) == "\t" do i = i + 1 end str = str:sub(i) i = -1 while str:sub(i, i) == " " or str:sub(i, i) == "\t" do i = i - 1 end str = str:sub(1, i) return str end local newLine = function() local F = far.Flags local ei = editor.GetInfo(nil); local x = 1 local y = ei.CurLine local curStr = editor.GetString(nil, y, 0).StringText while strip(curStr) == "" and y ~= 1 do y = y - 1 curStr = editor.GetString(nil, y, 0).StringText end while x <= #curStr do if curStr:sub(x, x) == " " or curStr:sub(x, x) == "\t" then x = x + 1 else break end -- if string.sub(curStr.StringText,x,1) == "\t" then x = ei.TabSize * ei.math.floor((x + ei.TabSize-1)/ei.TabSize) end end editor.UndoRedo(nil, F.EUR_BEGIN) editor.InsertString() if strip(editor.GetString(nil, ei.CurLine, 0).StringText) == "" then editor.SetString(nil, ei.CurLine, "") end editor.SetPosition(nil, ei.CurLine+1, x, -1, -1, -1, -1) curStr = strip(editor.GetString(nil, 0, 0).StringText) if #curStr ~= 0 then editor.SetString(nil, 0, string.rep(" ", x-1)..curStr) end editor.UndoRedo(nil, F.EUR_END) end local newTab = function() local F = far.Flags local ei = editor.GetInfo(nil); local x = ei.CurPos local y = ei.CurLine local curStr = "" while strip(curStr) == "" and y ~= 1 do y = y - 1 curStr = editor.GetString(nil, y, 0).StringText end while x <= #curStr do if curStr:sub(x, x) ~= " " and curStr:sub(x, x) ~= "\t" then x = x + 1 else break end end while x <= #curStr do if curStr:sub(x, x) == " " or curStr:sub(x, x) == "\t" then x = x + 1 else break end end if x > #curStr then x = (math.floor((ei.CurPos-1) / ei.TabSize) + 1) * ei.TabSize + 1 end local pos = ei.CurPos while pos < x do editor.UndoRedo(nil, F.EUR_BEGIN) local tmpPos = (math.floor((pos-1) / ei.TabSize) + 1) * ei.TabSize + 1 if tmpPos > x then tmpPos = x end editor.InsertText(nil, string.rep(" ", tmpPos-1 - pos+1)) editor.UndoRedo(nil, F.EUR_END) pos = tmpPos end end Macro { area="Editor"; key="Enter"; flags=""; description="Insert new line"; action = function() newLine() end; } Macro { area="Editor"; key="Tab"; flags=""; description="Insert new tab"; action = function() newTab() end; } При нажатии TAB автоматически ищет позицию правее так, чтобы курсор остановился напротив первого непробельного символа на наинижайшей непустой строке выше с пробелами и с непробельными символами правее текущей позиции курсора. Ну т.е. курсор прыгает к самой левой позиции, правее текущей, чтобы встать на границе очередного "слова" строки выше. Если предыдущая строка пустая, берётся ещё более предыдущая. Если строка выше короче текущей, тогда TAB работает стандартно, как исходный TAB. При нажатии ENTER автоматически удаляет финальные пробелы в текущей строке и перемещает курсор в новую строку в позицию самого левого непробельного символа в текущей. Т.е. выдерживается тот же отступ. Если текущая строка пуста, берётся строка выше текущей по тем же правилам, что для TAB. Если подходящей строки не найдено, в новой строке отступа не будет. При вставке отступов, что по TAB, что по ENTER, вставляемые отступы добавляются поTABно, и каждый из них добавляется в UndoRedo, что легко их откатывает поэлементно даже если было вставлено несколько за раз. Скрипт был написан мною спецом под набор исходного кода, где желаемые отступы в подавляющем большинстве случаев определяются именно этими правилами. Скрипт может конфликтовать с AutoComplete, если нажать TAB или ENTER в тот момент, когда он предлагает варианты для дополнения, но это не моя проблема, скрипт не в состоянии обнаружить такие ситуации сам. |
|
Сообщ.
#32
,
|
|
|
|
Скрытый текст На неделе попробую глянуть. Ща пока о5 занят. |