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

» Far Manager

Автор: Alexyz21
Дата сообщения: 21.02.2016 20:14
так раньше панели скрывались и скролилась сама консоль с инфой на ней, а сейчас всё забивается изображением панелей. Перезапустил фар - теперь такого нет
Автор: Angel_Ka
Дата сообщения: 21.02.2016 20:58
shmuz
Alexyz21

По возможности, ответьте, пожалуйста, на следующие вопросы:

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

Что означает пункт "Пользовательские данные" в меню "Критерий сортировки"? Ответ искал, но ни где на нашёл. И в хэлпе Фара такой пункт совсем не обозначен.
Автор: DmitriC
Дата сообщения: 21.02.2016 21:49
VictorVG2

Цитата:
поставьте его в false - far:config System.WindowMode=false (нажмите на этой строке F4 или Enter, затем ShiftF9) и всё вернётся к старому поведению.

Спасибо - помогло!

Цитата:
1. Оптимизация 4525 для System.WindowMode = true
  2. System.WindowMode теперь true по умолчанию, ибо:
   - это хорошо;
   - нужно тестирование.

Слова "оптимизация" и "хорошо" - звучат заманчиво.

А можно ли узнать чем оно лучше старого режима? Отбой, уже сам нашел.

На всякий случай, привожу скриншоты глюков, которые у меня наблюдаются при System.WindowMode=true:
http://itmages.ru/image/view/3909966/ddb825d5 - это с ConEmu.
http://itmages.ru/image/view/3909968/88266665 - это без ConEmu.

Данные о системе:
Win 8.1 Pro x64, Win 10 Ent x64. Графический адаптер Intel(R) HD Graphics 4600 (Core i5-4570)
Автор: shmuz
Дата сообщения: 21.02.2016 22:52
Angel_Ka

Цитата:
Как в меню "Критерий сортировки" включить и обычные макросы?
Никак. Разве что хакерскими методами, но это обсуждать не буду.

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

Цитата:
Что означает пункт "Пользовательские данные" в меню "Критерий сортировки"?
Если не ошибаюсь, то этот пункт предназначен для панелей плагинов, а не для обычных панелей.

Автор: Angel_Ka
Дата сообщения: 21.02.2016 23:04
shmuz
Благодарю Вас за оперативные ответы!


Цитата:
Как в меню "Критерий сортировки" включить и обычные макросы?
Никак.

Тогда значимость следующего вопроса возрастает.

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

Легко для того, кто знает. Подскажите, плиз, как — а может быть и сдюжится. Если и не сразу, то со временем.

Автор: shmuz
Дата сообщения: 21.02.2016 23:20
Angel_Ka

Цитата:
Легко для того, кто знает. Подскажите, плиз, как — а может быть и сдюжится. Если и не сразу, то со временем.

В описании функции LoadCustomSortMode есть ссылка на описание структуры SortingPanelItem. В тех макросах, которыми вы недавно занимались, использовалось поле FileName этой структуры, но в ней есть и другие поля, в том числе FileAttributes.

Автор: Angel_Ka
Дата сообщения: 22.02.2016 03:02
shmuz
Благодарю за подсказку! Она существенно облегчила дело.

Долго подбирал функцию и на текущий момент в макросе-примере FileName поменял на FileAttributes, вместо C.wcslen подставил bit.band(tonumber, и макрос работает. Правда, с небольшими нюансами, но надеюсь и их преодолеть.

Во всяком случае, сортировку папок-симлинков и объектов с атрибутом "только для чтения", новым макросом уже делать удобнее, чем двумя старыми.
Автор: VictorVG2
Дата сообщения: 23.02.2016 11:08
Уточнение к Поиск файла по его описанию

Цитата:
ccaid

"...штатный поиск, вроде бы, не умеет рекэкспы..."

в масках файлов умеет, смотрите Help:

Цитата:
В масках можно использовать регулярные выражения, при этом текст
регулярного выражения должен быть окружён символами "/".
Автор: shmuz
Дата сообщения: 23.02.2016 13:25
VictorVG2
Насколько я понял, в маске надо указать просто descript.ion, а в строке поиска уже регулярное выражение, например, стол|стул|диван. Если точно известно, что искать, то можно и без регулярного выражения.
Автор: VictorVG2
Дата сообщения: 23.02.2016 13:49
shmuz

Ну, коли ему просто конкретное имя искать, то вообще там просто. А в строке, да регулярку чтобы не набирать кучу вариантов. Ну, забыли про это ребята, с кем не бывает?
Автор: Angel_Ka
Дата сообщения: 23.02.2016 14:17
shmuz
Макрос сортировки по атрибутам вообще, о котором шла речь раньше, очень полезен. Однако он имеет, как я уже отмечал, и некоторые нюансы. В частности, по атрибуту "только для чтения" он хорошо сортирует в банальной ситуации, когда в папке файлы помечены только данным атрибутом и атрибутом "архивный". Но когда там же находятся также файлы, помеченные вместе с тем атрибутами "временный" или "точка повторного анализа" и т.п., то итоговая сортировка получается не очень удобная.
Поэтому вот составил макрос специально для выборки файлов только с атрибутом ro.


Код: -- Загрузить сортировку
local ModeNumber = 109
local ffi = require "ffi"
local C = ffi.C

Panel.LoadCustomSortMode (ModeNumber,
{
Description="отсортировать файлы по атриб&уту 'только для чтения'";
Compare = function(p1, p2)
local l1, l2 = tonumber(p1.FileAttributes)/2, tonumber(p2.FileAttributes)/2
local l3, l4 = math.floor(l1), math.floor(l2)
local l5, l6 = l1 - l3, l2 - l4
return l5<l6 and -1 or l5>l6 and 1 or 0
end;
Indicator = "Qq";
})

-- Установить заданную пользовательскую сортировку в активной панели
Macro {
description="отсортировать файлы с атрибутом ro";
area="Shell"; key="CtrlShift7";
action=function()
Panel.SetCustomSortMode(ModeNumber,0)
end;
}
Автор: Alexyz21
Дата сообщения: 23.02.2016 14:32

Цитата:
Работа данного макроса основана на том, что атрибут "только для чтения" (0x01) в отличие от других нечётный.

Ну... можно и так, но зачем? Почему не использовать битовую маску?
Автор: Angel_Ka
Дата сообщения: 23.02.2016 15:09
Alexyz21

Цитата:
Почему не использовать битовую маску?

А это как? В функции Compare из Panel.LoadCustomSortMode я не вижу такого способа. Но и не исключено, что это у меня зрение такое.
Автор: Alexyz21
Дата сообщения: 23.02.2016 15:34
Например так:

Код: -- Загрузить сортировку
local ModeNumber = 200
local ffi = require "ffi"
local C = ffi.C

Panel.LoadCustomSortMode (ModeNumber,
{
Description="отсортировать файлы по атриб&уту 'только для чтения'";
Compare = function(p1,p2,opt)
local l1,l2 = bit.band(p1.FileAttributes,C.FILE_ATTRIBUTE_READONLY),bit.band(p2.FileAttributes,C.FILE_ATTRIBUTE_READONLY)
return l1<l2 and -1 or l2>l1 and 1 or 0
end;
Indicator = "Qq";
})

-- Установить заданную пользовательскую сортировку в активной панели
Macro {
description="отсортировать файлы с атрибутом ro";
area="Shell"; key="CtrlShift7";
action=function()
Panel.SetCustomSortMode(ModeNumber,0)
end;
}
Автор: shmuz
Дата сообщения: 23.02.2016 15:55
Angel_Ka
Вот простой вариант для вашего случая. Благодаря tonumber он должен работать и на x86, и на x64.
Если нужно сортировать по другому атрибуту, замените FILE_ATTRIBUTE_READONLY на имя другого атрибута.

Код: Compare = function(p1, p2)
local l1 = bit.band(tonumber(p1.FileAttributes), C.FILE_ATTRIBUTE_READONLY)
local l2 = bit.band(tonumber(p2.FileAttributes), C.FILE_ATTRIBUTE_READONLY)
return l1 - l2
end;
Автор: Angel_Ka
Дата сообщения: 23.02.2016 18:35
Alexyz21
shmuz
Благодарю Вас, уважаемые! И ведь предполагал это, и ведь пытался даже, но, почему-то без префикса "C.", и в инете ковырялся, но не нашёл, и вот сам себя убедил, что это не работает.

Извините меня за беспокойство. И ещё раз БОЛЬШОЕ СПАСИБО за отзывчивость!
Автор: shmuz
Дата сообщения: 23.02.2016 18:51
Angel_Ka
C.FILE_ATTRIBUTE_READONLY это просто для читаемости и понимаемости кода. Если вы поставите вместо этого просто 1, будет работать ничуть не хуже.
Автор: Alexyz21
Дата сообщения: 23.02.2016 19:26
Angel_Ka
Когда занимаешься написанием скриптов время от времени по необходимости, то очень помогает контекстный поиск в папке со скриптами и LuaMacro - подсмотреть, как кто-то уже делал. Я использую RESearch.Grep.lua - по AltG перескакиваю в место найденного.
Автор: Angel_Ka
Дата сообщения: 23.02.2016 19:48
shmuz

Цитата:
Если вы поставите вместо этого просто 1, будет работать ничуть не хуже.

Огромное спасибо за подсказку! Это чрезвычайно удобно! Получается, что так можно указывать десятичные коды не только отдельных атрибутов, но и их сочетаний!

А где об этом почитать можно было бы? В энциклопедии же этого нету.


Добавлено:
Alexyz21
Своей подсказкой даже опередили мой вопрос! Большое спасибо!
Автор: Alexyz21
Дата сообщения: 23.02.2016 19:59

Цитата:
Это чрезвычайно удобно!

Это плохая практика - если константы "переедут" на другие числовые значения, то такой код сломается и править его будет мутно.
Автор: shmuz
Дата сообщения: 23.02.2016 20:00
Angel_Ka

Цитата:
Это чрезвычайно удобно! Получается, что так можно указывать десятичные коды не только отдельных атрибутов, но и их сочетаний!
Это может быть удобно иногда, но код становится непонятным, появляются так называемые "магические числа". А сочетания обычно делаются функцией bit.bor.

Цитата:
А где об этом почитать можно было бы? В энциклопедии же этого нету.
Энциклопедия предполагает, что читатель знает основы программирования на языке C. macroapi_manual предполагает, что читатель в достаточной мере знает язык Lua.


Автор: Angel_Ka
Дата сообщения: 23.02.2016 22:46
Alexyz21
shmuz

Цитата:
Это плохая практика - если константы "переедут" на другие числовые значения, то такой код сломается и править его будет мутно.


Цитата:
Это может быть удобно иногда, но код становится непонятным.

Спасибо за предупреждения! При этом, имхо, коды нескольких чаще всего применяемых атрибутов и запомнить не грех, и их таблицу под рукой держать тоже полезно. Ну а в макросах, разумеется, комментарии делать надо не лениться.

Цитата:
появляются так называемые "магические числа" ...
Поищу в инете что такое "магические числа", и про функцию bit.bor тоже.

Цитата:
Энциклопедия предполагает, что читатель знает основы программирования на языке C. macroapi_manual предполагает, что читатель в достаточной мере знает язык Lua.
Полагаю, что не один я, а определённая часть пользователей Фара находится лишь в стадии освоения, да и приобщать молодёжь к Фару приходится весьма постепенно.

Цитата:
подсмотреть, как кто-то уже делал
И действительно! Докладываю: на основе ваших подсказок и ранее сделанного Вами, Alexyz21, макроса скомпилировал макрос сортировки файлов по атрибутам с интерактивным вводом кода атрибута или их сочетания. При его применении учту ваши замечания.
Очень благодарю вас за неоценимую помощь!

Автор: Alexyz21
Дата сообщения: 24.02.2016 00:07
Angel_Ka

Цитата:
с интерактивным вводом кода атрибута или их сочетания

Это тот случай, когда удобнее сделать Custom Dialog с чекбоксами из диалога изменения атрибутов:
Код: -------- Custom sort by attributes ---------
Attributes: _________________________
[ ] Read only [ ] Sparse
[ ] Archive [ ] Temporary
[ ] Hidden [ ] Offline
[ ] System [ ] Reparse point
[ ] Compressed [ ] Virtual
[ ] Encrypted [ ] Integrity stream
[ ] Not indexed [ ] No scrub data
-------------------------------------------------
{ Ok } [ Cancel ]
Автор: Angel_Ka
Дата сообщения: 24.02.2016 02:09
Alexyz21

Цитата:
Это тот случай, когда удобнее сделать Custom Dialog с чекбоксами из диалога изменения атрибутов:

Очень надеюсь на то, что Вы покажете мне пример того, как это делается. Потому, что, во-первых, мне кажется это из области плагинов и слишком трудно для макросов. А во-вторых, и главным образом, этот вариант прельщает тем, что представляется мне наиболее соответствующим той цели сортировки по атрибутам, которую я преследую.
Пояснить это можно на имеющихся уже примерах. Тот макрос, который удалось мне составить, вычленяет в одну группу все файлы, в которых присутствует атрибут ro, в т.ч. вкупе с другими атрибутами. А макрос другой формы (ещё раз большое спасибо Вам и shmuz`у, что вы её мне показали!) вычленяет только файлы, в которых присутствует только атрибут ro.
И судя по форме предлагаемого Вами Custom Dialog`а его посредством, если я правильно понимаю, можно задавать оба варианта сортировки. Что существенно предпочтительнее.
Автор: VictorVG2
Дата сообщения: 24.02.2016 02:47
Angel_Ka

Подсказка - стоит глянуть в сторону Editor_InsertMacro.lua из комплекта Набор макросов от SimSU v2014.10. Пример реализации меню в нём есть.
Автор: Angel_Ka
Дата сообщения: 24.02.2016 08:05
VictorVG2
Благодарю Вас за подсказку! Действительно, в том наборе нашёл файл Editor_InsertMacro.lua, в котором есть диалог с чекбоксами. Буду осваивать.
Автор: Alexyz21
Дата сообщения: 24.02.2016 09:33
Angel_Ka
Например форма:
Код: local Items = {
--[[01]] {F.DI_DOUBLEBOX, 3,1, 65,12, 0, 0,0, 0, "Custom Sort"},
--[[02]] {F.DI_TEXT, 5,2, 19,2, 0, 0,0, 0, "By Attributes: "},
--[[03]] {F.DI_EDIT, 20,2, 34,2, 0, 0,0, 0, ""},
--[[04]] {F.DI_CHECKBOX, 5,3, 30,3, 0, 0,0, 0, "&Read only"},
--[[05]] {F.DI_CHECKBOX, 5,4, 30,4, 0, 0,0, 0, "&Archive"},
--[[06]] {F.DI_CHECKBOX, 5,5, 30,5, 0, 0,0, 0, "&Hidden"},
--[[07]] {F.DI_CHECKBOX, 5,6, 30,6, 0, 0,0, 0, "&System"},
--[[08]] {F.DI_CHECKBOX, 5,7, 30,7, 0, 0,0, 0, "&Compressed"},
--[[09]] {F.DI_CHECKBOX, 5,8, 30,8, 0, 0,0, 0, "&Encrypted"},
--[[10]] {F.DI_CHECKBOX, 5,9, 30,9, 0, 0,0, 0, "Not &indexed"},
--[[11]] {F.DI_CHECKBOX, 37,3, 62,3, 0, 0,0, 0, "Sparse"},
--[[12]] {F.DI_CHECKBOX, 37,4, 62,4, 0, 0,0, 0, "Temporary"},
--[[13]] {F.DI_CHECKBOX, 37,5, 62,5, 0, 0,0, 0, "Offline"},
--[[14]] {F.DI_CHECKBOX, 37,6, 62,6, 0, 0,0, 0, "Reparse point"},
--[[15]] {F.DI_CHECKBOX, 37,7, 62,7, 0, 0,0, 0, "Virtual"},
--[[16]] {F.DI_CHECKBOX, 37,8, 62,8, 0, 0,0, 0, "Integrity stream"},
--[[17]] {F.DI_CHECKBOX, 37,9, 62,9, 0, 0,0, 0, "No scrub data"},
--[[18]] {F.DI_TEXT, -1,10, 0,0, 0, 0,0, F.DIF_SEPARATOR,""},
--[[19]] {F.DI_BUTTON, 0,11, 0,0, 0, 0,0, F.DIF_DEFAULTBUTTON+F.DIF_CENTERGROUP,"Ok"},
--[[20]] {F.DI_BUTTON, 0,11, 0,0, 0, 0,0, F.DIF_CENTERGROUP,"Cancel"}
}

local function DlgProc(hDlg,Msg,Param1,Param2)
if Msg==F.DN_INITDIALOG then
hDlg:send(F.DM_SETTEXT,3,CurAttrib)
hDlg:send(F.DM_SETCHECK,4,BoxRO and F.BSTATE_CHECKED or F.BSTATE_UNCHECKED)
...
NewAttrib = nil
elseif Msg==F.DN_EDITCHANGE and Param1==3 then -- Attributes changed
NewAttrib = hDlg:send(F.DM_GETTEXT,3)
elseif Msg==F.DN_BTNCLICK and Param1==4 then -- [x] Read only
BoxRO = Param2~=0
...
else
return
end
return true
end
Автор: Angel_Ka
Дата сообщения: 24.02.2016 13:13
Alexyz21

Цитата:
простора для творчества хватает

Да, объём информации устрашающий. Но попробую разобраться — хочется довести дело до конца.
Большое спасибо за помощь!
Автор: Alexyz21
Дата сообщения: 25.02.2016 01:47
4559, 4560 на ура валяться в крэш при топтании клавы, подозреваю, что дело в AltHistory - на её шоркатах такое заметил.
Автор: VictorVG2
Дата сообщения: 25.02.2016 02:07
Alexyz21

Я им не пользуюсь и у меня этой проблемы нет. Так что похоже плагин легонько устарел.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

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


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