Ru-Board.club
← Вернуться в раздел «Программы»

» Far Manager

Автор: VictorVG2
Дата сообщения: 01.03.2016 15:23
Alexyz21

Цитата:
Что-то уже и не припомню, чтобы Максимус здесь появлялся - он на гитхабе

Ага, и там только КонЕму пилит, а про Maximus5/FarPlugins видимо забыл - Latest commit ba99094 on 2 Apr 2015 и баги так у него:

Цитата:
Add the ability to editwrap to wrap at a certain position.
opened on 31 Jan by zippy1981
Ability to turn on by default based on file extensions
opened on 14 Nov 2015 by variab1e
Base64 v1.0 - недостатки выявленные при работе в b4351 x86 и x64
opened on 18 Apr 2015 by VictorVG

давненько ждут своего устранения, но с тех пор автора там не было и нет, а без него любые патчи к его плагинам просто теряются. Тупик...
Автор: Alexyz21
Дата сообщения: 01.03.2016 16:37
Angel_Ka
1. вводя первый символ, мы лочим легальный набор символов - либо цифры, либо символы-шоркаты, другие не будут приниматься до полной очистки поля ввода.
2. раньше при вызове макроса в первый раз и пометке атрибутов, сортировка стартовала с обратного направления - теперь с прямого, как и должно.

VictorVG2
Есть ещё древний косяк в плагине Конему - в зависимости от содержимого окна, могут не переключаться закладки, например в режиме Ctrl5.
Автор: VictorVG2
Дата сообщения: 01.03.2016 16:41
Кстати, c0_ver я давно у себя поправил, но и сам про сей патч забыл - там надо в pe.cpp поправить пару строк от 2796:

Цитата:
    //_ASSERTE(Info->StructSize >= sizeof(GlobalInfo));
    Info->MinFarVersion = MAKEFARVERSION(3,0,0,3000,VS_RELEASE); // правим!

    // Build: YYMMDDX (YY - две цифры года, MM - месяц, DD - день, X - 0 и выше-номер подсборки)
    //Info->Version = MAKEFARVERSION(MVV_1,MVV_2,MVV_3,((MVV_1 % 100)*100000) + (MVV_2*1000) + (MVV_3*10) + (MVV_4 % 10),VS_RELEASE);
    Info->Version = MAKEFARVERSION(3,0,0,0,VS_RELEASE); //правим!

на

Цитата:
    //_ASSERTE(Info->StructSize >= sizeof(GlobalInfo));
    Info->MinFarVersion = MAKEFARVERSION(3,0,0,4040,VS_RELEASE);

    // Build: YYMMDDX (YY - две цифры года, MM - месяц, DD - день, X - 0 и выше-номер подсборки)
    //Info->Version = MAKEFARVERSION(MVV_1,MVV_2,MVV_3,((MVV_1 % 100)*100000) + (MVV_2*1000) + (MVV_3*10) + (MVV_4 % 10),VS_RELEASE);
    Info->Version = MAKEFARVERSION(3,1,0,0,VS_RELEASE);

и о ложных срабатываниях Reneval можно забыть раз, и плагин собирающийся под API 4040 (см. исходники) перестанет чудить при запуске. ver_c0.7z собран в VC++2010 (2008 и на семёрку он не ставится) правда бинарник в разы больше чем у Максима (~42Кб против его 17Кб), но он работает и не чудит. Лежит у меня.

Добавлено:
Alexyz21

Считай в ту же коллекцию.
Автор: shmuz
Дата сообщения: 01.03.2016 17:19
VictorVG2
Минимальный билд Фара для поддержки нынешнего формата контент-колонок - не 4040, а 4214.
Автор: VictorVG2
Дата сообщения: 01.03.2016 17:41
shmuz

Понял, поправлю в pe.cpp::2797:

Info->MinFarVersion = MAKEFARVERSION(3,0,0,4214,VS_RELEASE);

и пересоберу. Только размер бинарника будет не 10 - 12 К, а около 47К. Сильнее у меня не получается его ужать...
Автор: shmuz
Дата сообщения: 01.03.2016 17:47
VictorVG2

Цитата:
Понял, поправлю и пересоберу.

Пересобирать не надо, так как это, в общем-то не баг. Поставят плагин на 4040, он просто работать не будет. А если поправите, то Фар выдаст красное окошко при запуске о том, что плагину требуется более новая версия Фар.
Автор: Alexyz21
Дата сообщения: 01.03.2016 18:07
shmuz
Возможно ли "ускорить" c0link.lua:

Код: local ColPName = "c0"

function export.GetContentFields(ColNames)
for i,v in ipairs(ColNames) do
if v:lower()==ColPName then return true end
end
end

function export.GetContentData(FilePath,ColNames)
local data = {}
for i,v in ipairs(ColNames) do
if v:lower()==ColPName then
local attr = win.GetFileAttr(FilePath)
local info = win.GetFileInfo(FilePath)
data[i] = info.FileName
if attr and attr:find"e" then
data[i] = data[i].." →"..far.GetReparsePointInfo(FilePath)
end
end
end
return next(data) and data
end
Автор: VictorVG2
Дата сообщения: 01.03.2016 18:40
Поправил, перевыложил с исходниками ver_c0.7z - ссылка новая т.к. обновляя архив случайно я удалил из него все файлы и ЯД снял линк...
Автор: shmuz
Дата сообщения: 01.03.2016 18:45
Alexyz21

Цитата:
Возможно ли "ускорить" c0link.lua:

Не исключено, но это надо разбираться конкретно, где и что тормозит.
Автор: VictorVG2
Дата сообщения: 01.03.2016 18:46
shmuz

Уже поправил pe.cpp и перекомпилил под b4214 ибо это лучше - люди будут знать что нужен фар 4214 и выше и вопроса "Кто сломал и где?" точно не будет, а я перед тем как класть готовую DLL естественно у себя всё проверил для х86 и х64 вариантов.
Автор: Angel_Ka
Дата сообщения: 01.03.2016 19:37
Alexyz21

Цитата:
1. вводя первый символ, мы лочим легальный набор символов - либо цифры, либо символы-шоркаты, другие не будут приниматься до полной очистки поля ввода.
2. раньше при вызове макроса в первый раз и пометке атрибутов, сортировка стартовала с обратного направления - теперь с прямого, как и должно.

Слона то я и не приметил! Да, так лучше — пробовал на версии от 13:41 01-03-2016.
Премного спасибов!
Автор: VictorVG2
Дата сообщения: 01.03.2016 19:59
Alexyz21

У меня это скрипт не тормозит:

Цитата:
function export.GetContentFields(ColNames)
for i,v in ipairs(ColNames) do
if v:lower()=="link" then return true end
end
end

function export.GetContentData(FilePath,ColNames)
local data = {}
for i,v in ipairs(ColNames) do
if v:lower()=="link" then
local attr = win.GetFileAttr(FilePath)
if attr and attr:find"e" then
data[i] = " → "..far.GetReparsePointInfo(FilePath)
end
end
end
return next(data) and data
end

а твой или не запускается если оставить имя колонки c0, или если поправить:

Код: local ColPName = "link"

function export.GetContentFields(ColNames)
for i,v in ipairs(ColNames) do
if v:lower()==ColPName then return true end
end
end

function export.GetContentData(FilePath,ColNames)
local data = {}
for i,v in ipairs(ColNames) do
if v:lower()==ColPName then
local attr = win.GetFileAttr(FilePath)
local info = win.GetFileInfo(FilePath)
data[i] = info.FileName
if attr and attr:find"e" then
data[i] = data[i].." → "..far.GetReparsePointInfo(FilePath)
end
end
end
return next(data) and data
end
Автор: skipik001
Дата сообщения: 01.03.2016 22:25
VictorVG2

Цитата:
У меня это скрипт не тормозит:

Вить, а его нужно класть в .\Profile\Macros\scripts или пускай в папке плагина лежит?
Автор: Angel_Ka
Дата сообщения: 01.03.2016 23:05
Alexyz21

С гордостью как у провинциального автослесаря, которому сподобилось делать тюнинг заехавшему Ламборгини модели Panel.CustomSortByAttributes.lua , докладываю следующее.

— шорткатом вызова макроса сделал CtrlShift8
(в целях соответствия с шорткатами, вызывающими другие макросы пользовательских режимов сортировки);

— поменял местами хоткеи l и f, и стало: From &file и Off&line
(понимаю, что Вы сделали O&ffline как в нативных диалогах, но, на мой взгляд, вероятно так будет интуитивнее, и послежу как пойдёт практика);

— поменял All selected &Z на Strict ade&quacy
(команда All selected вызывает у меня стойкую ассоциацию с требованием пометить все чекбоксы);

— сделал макрос на шорткат CtrlShift8, действующий в диалоге Custom sort как кнопка Ok
(два жмака подряд на шорткат в панелях быстро повторяет предыдущую сортировку);

— макрос на шорткат CtrlShift0, выставляющий в диалоге в поле By attributes код 128
(очищает поле ввода и все чекбоксы атрибутов и предполагает возможность последующей сортировки файлов по атрибуту Normal, в моей практике не так уж и редко применяемой);

— макрос на шорткат CtrlShift6, выставляющий в диалоге в поле By attributes код 8487
(помечает 6 чекбоксов с целью упрощения последующих манипуляций с чекбоксами при необходимости, тоже на пробу).

И вроде бы всё работает.

local guid = "A79390CE-5450-403A-8FAE-17EE3315CB38"
Macro { description="В диалоге сортировки файлов по атрибутам как Enter";
area="Dialog"; key="CtrlShift8";
condition=function() return Dlg.Id==guid end;
action=function() Dlg.SetFocus(23) Keys("O") end; }


Macro { description="В диалоге сортировки файлов по атрибутам в поле ввода поместить код 128";
area="Dialog"; key="CtrlShift0";
condition=function() return Dlg.Id==guid end;
action=function() Dlg.SetFocus(3) Keys("CtrlY 1 2 8") end; }


Macro { description="В диалоге сортировки файлов по атрибутам в поле ввода поместить код 8487";
area="Dialog"; key="CtrlShift6";
condition=function() return Dlg.Id==guid end;
action=function() Dlg.SetFocus(3) Keys("CtrlY 8 4 8 7") end; }

Автор: VictorVG2
Дата сообщения: 01.03.2016 23:19
skipik001

Это элемент Lua-плагина c0link - _globalinfo.lua, c0link.lua, c0link-x64.dll.
Автор: Alexyz21
Дата сообщения: 02.03.2016 07:26
Angel_Ka

Цитата:
макрос на шорткат CtrlShift0, выставляющий в диалоге в поле By attributes код 128
(очищает поле ввода и все чекбоксы атрибутов и предполагает возможность последующей сортировки файлов по атрибуту Normal, в моей практике не так уж и редко применяемой);

В макросе НЕТ сортировки по атрибуту Normal, в нём ЕСТЬ сортировка по отсутствию остальных, первичных атрибутов, т.е. по 0. Маска легитимных (имеющих смысл) атрибутов игнорирует атрибут Normal. Предполагаю, что он был введён для ленточного бэкап оборудования, для того, чтобы стриммер прочитав Normal, сразу и однозначно понимал, что атрибут Archive сброшен, а не тратил время на его поиски, перематывая ленту туда-сюда в попытках найти его. Для дисковых носителей смысла в Normal нет.

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

VictorVG2
В моём варианте не требуется отдельная колонка - смысл в том, чтобы дописывать раскрытый линк к имени файла. т.е. можно указать напрямую local ColPName = "name", а в настройке режимов панелей <Name>. Вопрос мой к Shmuel состоял в том, можно ли ускорить получение имени, атрибутов и линка, например с помощью FFI.


Автор: SSchumi
Дата сообщения: 02.03.2016 09:04
VictorVG2
может, я конечно, мнительный, но у меня такое ощущение, что при запуске фар каждый день, он что-то делает, потому что думает наверно секунды 1.5-2, а если закрыть, открыть снова - уже быстро.
Но при этом если на следующий день опять закрыть/открыть фар - опять чуть дольше, потом нормально.
Комп я уважу в спящий режим вечером, а утром включаю.
Автор: brRamires
Дата сообщения: 02.03.2016 10:13

Код: @chcp 1251>nul
@<cp1251.txt>utf8.txt (for /f "delims=" %i in ('find /n /v ""') do @chcp 65001>nul& set x=%i& cmd /v /c echo.!x:*]^^=!)
Автор: Angel_Ka
Дата сообщения: 02.03.2016 12:54
Alexyz21

Цитата:
В макросе НЕТ сортировки по атрибуту Normal, в нём ЕСТЬ сортировка по отсутствию остальных, первичных атрибутов, т.е. по 0. Маска легитимных (имеющих смысл) атрибутов игнорирует атрибут Normal. Предполагаю, что он был введён для ленточного бэкап оборудования, для того, чтобы стриммер прочитав Normal, сразу и однозначно понимал, что атрибут Archive сброшен, а не тратил время на его поиски, перематывая ленту туда-сюда в попытках найти его. Для дисковых носителей смысла в Normal нет.

Благодарю Вас за настойчивое разъяснение! И действительно, порыскав в инете убедился, что помимо применения к атрибуту Normal кода 128 (0x0080), есть таки также и практика применения кода 0 (0x0000). И поэтому, вняв Вашим наставлениям, внёс соответствующее изменение в макрос, навешенный на CtrlShift0: Keys("CtrlY 1 2 8"). Ещё раз спасибо!
Автор: Alexyz21
Дата сообщения: 02.03.2016 13:28
SSchumi
Renewal - Automatically check for updates

Добавлено:
Manual LUA FAR 3:

Цитата:
export.GetContentData
--------------------------------------------------------------------------------
Ret = export.GetContentFields (FilePath, Names)
Автор: shmuz
Дата сообщения: 02.03.2016 14:09
Alexyz21, спасибо за репорт.
Автор: VictorVG2
Дата сообщения: 02.03.2016 15:32
Alexyz21

С атрибутом ты прав - тут ноги растут из времён первых мэйнфреймов Symens-Nixdorf 4004 и IBM S/360 когда этот признак читался микропрограммой канала В/В и групповой стойки управления НМЛ для принятия решения о записи файла на ленту - головки в блоке БМГ имели пермаллоевый (позже стекло-ферритовый) сердечник вдоль которого на скорости 5 - 6 м/с движется магнитная лента и стирает головы как наждак. Так что в итоге придётся разбирать протяжку, менять БМГ (а он стоит прилично), юстировать его положение в пространстве, регулировать под него усилители чтения и токи подмагничивания/записи, ну и делать ещё кучу ремонтной работы. И даже если всё есть под руками возни прилично и она накладна. Потому был придуман атрибут НОРМАЛ который проверяла ОС и микропрограмма по простой логике - если он установлен данные на ленту не пишем, сброшен - данные подлежат резервному копированию.

С колонкой понял.

SSchumi

У меня Renewal не используется, а скорее всего срабатывает стартовый скрипт rfar.cmd:

Цитата:
:For Far3 only! If on you system exists Far 1.x/Far.2.x and you use Far3 please, user runfar2.cmd
@echo off
@setlocal
:for use Far on "Read Only" device just remove : on start of next string
:@set key=/ro
@if defined PROCESSOR_ARCHITEW6432 (set reg="%systemroot%\sysnative\reg.exe"
) else (
set reg=reg)
@echo REGEDIT4>%TEMP%\def.reg
@echo ; >>%TEMP%\def.reg
@echo [HKEY_CURRENT_USER\Software\Far Manager\Plugins\MultiArc]>>%TEMP%\def.reg
@echo "DefaultFormat"="RAR">>%TEMP%\def.reg
@reg import %TEMP%\def.reg > nul
@del /f/q %TEMP%\def.reg > nul
@del /s/f/q .\Profile\*.db-* > nul
@start /i .\Far.exe C:\ C:\ %key%

и чистит мусор, плюс выставляются параметры размера и шрифта консоли. Это так и задумано чтобы не было ошибок из-за сбойных БД. Если процесс Far.exe завершён нормально (код 0), то временных файлов журнала БД скрипт не отыщет и не будет их чистить - время запуска минимальное, если они есть запустится процесс восстановления целостности БД занимающий несколько секунд - запуск происходит чуть дольше.

Angel_Ka

Да, условная практика есть, но реальные причины её применения молодые специалисты трактуют ошибочно, а многие просто не знают.
Автор: dialmak01
Дата сообщения: 02.03.2016 18:28
Понимаю, что возможно в этой суровой теме спрашиваю глупость, но все-таки вдруг
Кто нибудь может рассказать популярно о лучших практиках использования сабжа с ConEmu?
Автор: Angel_Ka
Дата сообщения: 02.03.2016 20:10
dialmak01
Лично мне в память запала такая "реклама" ConEmu, вполне соответствующая, при этом, действительности.
Параллельно работать с двумя-тремя-четырьмя файлами одновременно удобно.
Автор: dialmak01
Дата сообщения: 02.03.2016 20:20
Angel_Ka

Цитата:
Лично мне в память запала такая "реклама" ConEmu, вполне соответствующая, при этом, действительности.  

Да, спасибо, я знаю..
Автор: VictorVG2
Дата сообщения: 02.03.2016 20:23
Пересобрал DialogTools из последних исходников в GCC 5.30, ну и глянул Dialog_DialogTools.lua штука замечательная, но там не было только копирования пароля в буфер обмена как у Dialog_PSWEdit.lua написанного John Doe. Решил дополнить этот момент взяв скрипт John_Doe за прототип (надеюсь уважаемый John Doe не будет возражать против использования части его кода) - объединение возможностей скриптов прямо напрашивалось. Вот что вышло [more=Dialog_DialogTools.lua]-- See http:// forum.farmanager.com/viewtopic.php?p=136132#p136132
-- We complete password copy function to the clipboard directly
-- from under the asterisks (based on John Doe code and idea). /VictorVG/

local DLGITEMTYPE_EDIT, DLGITEMTYPE_PSWEDIT, DLGITEMTYPE_FIXEDIT = 4, 5, 6

local DialogTools_MainGuid = "B2EC2264-0F55-4B86-87F7-F1392B8FC5DC"
local DialogTools_SrchGuid = "40E53FB1-6291-45a1-9DDF-B4A2048CA6BA"
local DialogTools_RplcGuid = "F4C58B97-BA69-4814-9FC9-DAB9307C0E88"
local DialogTools_UndoGuid = "1117C0E3-76BA-443D-90E3-89D20C45F364"
local DialogTools_EditGuid = "D0C5118D-E750-4E00-A4D4-0E0E0063571F"
local DialogTools_PwShGuid = "C8D4D4A4-943B-436F-8414-D36CBAF37C53"

local F = far.Flags

local function inEditField()
return Dlg.ItemType == DLGITEMTYPE_EDIT or Dlg.ItemType == DLGITEMTYPE_FIXEDIT
end

local function callUndoRedo( stepKey )
Plugin.Menu( DialogTools_MainGuid, DialogTools_UndoGuid )
Keys( stepKey .. ' ' .. 'Enter' )
end

local function copyPwd()
local pwd,hDlg,CurPos
Plugin.Menu( DialogTools_MainGuid, DialogTools_EditGuid )
hDlg = far.AdvControl(F.ACTL_GETWINDOWINFO).Id
CurPos = hDlg:send(F.DM_GETFOCUS)
local item = hDlg:send(F.DM_GETDLGITEM,CurPos)
if item and item[1]==F.DI_PSWEDIT then
pwd = hDlg:send(F.DM_GETTEXT,CurPos);
end
far.CopyToClipboard(pwd)
end

Macro {
description = "DialogTools: Search";
area = "Dialog"; key = "F7";
condition = inEditField;
action = function() Plugin.Menu( DialogTools_MainGuid, DialogTools_SrchGuid ) end
}

Macro {
description = "DialogTools: Replace";
area = "Dialog"; key = "CtrlF7";
condition = inEditField;
action = function() Plugin.Menu( DialogTools_MainGuid, DialogTools_RplcGuid ) end
}

Macro {
description = "DialogTools: Undo";
area = "Dialog"; key = "CtrlZ AltBS";
condition = inEditField;
action = function() callUndoRedo( '' ) end
}

Macro {
description = "DialogTools: Redo";
area = "Dialog"; key = "CtrlShiftZ AltShiftBS";
condition = inEditField;
action = function() callUndoRedo( 'Up' ) end
}

Macro {
description = "DialogTools: Edit";
area = "Dialog"; key = "F4";
condition = inEditField;
action = function() Plugin.Menu( DialogTools_MainGuid, DialogTools_EditGuid ) end
}

Macro {
description = "DialogTools: Show password";
area = "Dialog"; key = "F3";
condition = function() return Dlg.ItemType == DLGITEMTYPE_PSWEDIT end;
action = function() Plugin.Menu( DialogTools_MainGuid, DialogTools_PwShGuid ) end
}

Macro{
description="DialogTools: Copy pasword";
area="Dialog"; key="CtrlIns";
condition=function() return Dlg.ItemType == DLGITEMTYPE_PSWEDIT end;
action=function() copyPwd() end;

}[/more]. Проверил luacheck 0.14 - он ошибок - варнингов не вывел, у меня с обновлённым вариантом так же не вылезло подводных камней. Ну а редактирование паролей - F4, хотя сначала сиё и не очевидно, но пароль по большому счёту это то же текстовое поле, так что...

Ну а сам пошёл свои исходники править - Dialog_PSWEdit.lua за ненадобностью будет удалён в текущей версии сборок! В х64 его уже нет, но macro.txt я её не переделал - будет позднее вместе с FarUE3 x86.
Автор: dialmak01
Дата сообщения: 02.03.2016 20:41
VictorVG2
Нет мысли выпустить сборку с хотя-бы минимальным пояснением что и зачем (извиняюсь, может я неправ и такая уже есть?) Я новичёк.
Думаю ConEmu был был бы кстати в этой сборке. Впрочем вам судить, может я слишком многого хочу...
Мне нравиться ConEmu и FAR вместе, но это не догма конечно. Это просто мой выбор.
Автор: VictorVG2
Дата сообщения: 02.03.2016 20:41
Пока буду возится чтобы других не держать DialogTools.7z x86 и x64, GCC 5.30 SEH x86_64 отдельно (в х64 сборке уже этот вариант DialogTools.dll) .

Добавлено:
dialmak01

А оно уже лет *цать в шапке есть.
Автор: dialmak01
Дата сообщения: 02.03.2016 20:48
VictorVG2
Цитата:
А оно уже лет *цать в шапке есть.

Спасибо. осталось найти там упоминание о ConEmu. Попробую.



Добавлено:
VictorVG2
Хм. спасибо. бомба.
а почему дистр 2015 года? или я не в теме? качал тут http://samara-it.ru/?page_id=73
Автор: VictorVG2
Дата сообщения: 02.03.2016 21:07
dialmak01

Это не моя сборка. Моя в шапке, набор плагинов и скриптов у меня иной.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: оффтоп


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.