AltHistory: Alternative History — Альтернативная история
Posted: Mon 22 Aug, 2022 23:11
by HaRT
Nikolay, обнаружился
buniak_a_h wrote: ↑Fri 19 Aug, 2022 15:58 Пример: надо найти команду, выполнявшуюся после команды prog.exe qwerty.asdfg.zxcvb.001. Причем таких команд (или похожих) выдавалось несколько. Устанавливаем фильтр, встаём на первую отфильтрованную команду, снимаем фильтр, смотрим - после неё что-то явно левое (не то). Снова устанавливаем фильтр (довольно длинный!), встаём на вторую отфильтрованную команду, снимаем фильтр, смотрим, что за ней. И так много раз.
, в котором AltHistory сейчас неудобен, но есть возможность улучшить. Не могли бы вы сделать, чтобы при сбросе (непустого) фильтра (но не префикса) по Del он (полный фильтр) запоминался бы для последующего восстановления по BS? (А заодно это стало бы и способом восстановить фильтр при ошибочном сбросе.) В сочетании с «Режимом максимального сохранения текущего элемента при изменении фильтра» (по Ins) это как раз позволило бы реализовать указанный в начале сообщения сценарий.
Правда, при этом по Del будет затёрт доступный для восстановления фильтр из прошлого вызова этой истории; но мне кажется, предлагаемая функциональность важнее.
AltHistory: Alternative History — Альтернативная история
Macro {
description = "Alternative history: open the chosen folder in Windows Explorer";
area = 'Dialog'; key = 'CtrlAltE';
condition = ah.is_current_history_dialog;
action = function()
local s = ah.get_current_item()
if s ~= nil then
os.execute( 'start "" "' .. s .. '"' )
end
end;
}
, который открывает выбранную в истории директорию в Проводнике (например, чтобы туда что-нибудь перетащить-и-сбросить). Но чтобы сделать его ещё удобнее, мне не хватает возможности через API плагина определить тип открытой истории, поскольку в нынешнем виде макрос имеет смысл только в истории папок, а для истории команд я хочу добавить дополнительные возможности. Nikolay, сложно ли это добавить?
AltHistory: Alternative History — Альтернативная история
Posted: Wed 26 Oct, 2022 11:14
by Shmuel
HaRT, это можно сделать без API.
Определяете локальную переменную, например local State
Это определение должно предшествовать определению макросов.
При вызове, например, макроса истории папок, перед вызовом плагина ставите State="folders", аналогично в других макросах. А в вашем дополнительном макросе в condition пишете return State=="folders".
AltHistory: Alternative History — Альтернативная история
Posted: Sat 29 Oct, 2022 00:49
by HaRT
Shmuel wrote: ↑Wed 26 Oct, 2022 11:14
это можно сделать без API
Cпасибо, я пока продолжил развитие макроса без различения, из какой именно истории он вызван. Теперь
local F = far.Flags
local function Hint( str, state )
local color = far.AdvControl( F.ACTL_GETCOLOR, far.Colors.COL_HELPTOPIC )
far.AdvControl( F.ACTL_REDRAWALL )
state = state and ( state == 0 and ':off' or ':on' ) or ' '
far.Text( 1, 0, color, ':' .. str .. state )
far.Text()
mf.waitkey( math.max( 500, 50 * str:len() ) )
far.AdvControl( F.ACTL_REDRAWALL ) -- for calls from a modal context
end
local function hasGlob( path )
local i = path:find'^\\\\%?\\' -- find the "\\?\" prefix
return path:find( '[*?]', i and 5 or 1 ) ~= nil
end
--[[ Test cases:
""
NoSuchFileOrFolder
C:\Users
C:\Users\*
C:\\?\file
\\?\C:\Users
"\\?\C:\Users"
\\?\C:\Users\?
"\\?\C:\Users\?"
"C:\Documents and Settings"
"C:\Documents and Settings\All Users"
"C:\Users\HaRT\Temp\.v!e#r$y=b'a{d} d%i[r] n^a&m;e{0},"
"C:\Users\HaRT\Temp\.v!e#r$y=b'a{d} d%i[r] n^a&m;e{0},\file"
]]
Macro {
description = "Alternative history: open/locate the chosen folder/file in Windows Explorer";
area = 'Dialog'; key = 'CtrlAltE';
condition = ah.is_current_history_dialog;
action = function()
local s = ah.get_current_item()
if s ~= nil then
if s:sub( 1, 1 ) == '"' and s:sub( -1, -1 ) == '"' then s = s:sub( 2, -2 ) end
if hasGlob( s ) then Hint"The item contains a glob but globs are not supported"
else
local a = mf.fattr(s) -- accepts globs
if a == -1 then Hint"The item is not a folder/file path or is no longer accessible"
else -- note: explorer.exe fails to open some directory junctions, e.g. "C:\Documents and Settings"
local isDir = band( a, 16 ) ~= 0
-- Unfortunately, Explorer window opens in the background very often.
-- See discussion at https://forum.farmanager.com/viewtopic.php?p=177448#p177448
os.execute( 'explorer.exe ' .. ( isDir and '"' or '/select,"' ) .. s .. '"' )
end
end
end
end;
}
.
Если он вызван на директории, то она открывается в Проводнике; если на файле — новое окно Проводника позиционируется на этом файле; если ни то, ни другое — выводится (немодальное) сообщение.
AltHistory: Alternative History — Альтернативная история
Posted: Thu 08 Dec, 2022 20:00
by Nikolay
HaRT wrote: ↑Mon 22 Aug, 2022 23:11
есть возможность улучшить
HaRT wrote: ↑Wed 26 Oct, 2022 01:12
сложно ли это добавить?
AltHistory: Alternative History — Альтернативная история
Posted: Mon 19 Dec, 2022 18:34
by HaRT
Nikolay, давно я напарываюсь на одну неприятную ошибку, да вот только сейчас собрался отрапортовать: не работает запуск команды из истории, когда находимся в редакторе/просмотрщике (немодальном).
Открываю один или более редакторов/просмотрщиков и из одного из них через Историю команд пытаюсь запустить какую-нибудь одну.
Но она не запускается. Вместо этого команда сносится в командную строку (в этом есть некий смысл), но там и остаётся. Активным становится предыдущий редактор/просмотрщик (когда их несколько) или панели (когда один). В новый активный редактор иногда вставляется разрыв строки (непонятно, почему не всегда).
Win 10 x64; Far Manager, version 3.0.6051.0 x86; AltHistory 4.2.775.0 (Alpha)
AltHistory: Alternative History — Альтернативная история
В настройки внешнего редактора пишем команду notepad: "!\!.!"
Редактор нормально открывается по AltF4, но в историю команд попадает строка, заключенная в дополнительные кавычки "notepad: "путь_к_файлу"". В результате команда из истории вызывается с ошибкой.
Я думаю, команду с префиксом вообще не надо заключать в дополнительные кавычки.
AltHistory: Alternative History — Альтернативная история
Posted: Tue 07 Feb, 2023 22:56
by Nikolay
HaRT wrote: ↑Mon 19 Dec, 2022 18:34
давно я напарываюсь на одну неприятную ошибку, да вот только сейчас собрался отрапортовать: не работает запуск команды из истории, когда находимся в редакторе/просмотрщике (немодальном).
Хех, восемь лет, как не работает, долго собирались Поправимо.
Smitis wrote: ↑Fri 03 Feb, 2023 12:50
В настройки внешнего редактора пишем команду notepad: "!\!.!"
Редактор нормально открывается по AltF4, но в историю команд попадает строка, заключенная в дополнительные кавычки "notepad: "путькфайлу"". В результате команда из истории вызывается с ошибкой.
Ночь, и я, наверное, плохо соображаю. А как, вообще, "в историю команд (AltHistory) попадает строка"? Она ж предваряется пробелами согласно Config\HiddenCommandsSpacesCount.farconfig, и не должна в альтернативной истории команд отображаться. В стандартную историю команд эта строка попадает только при попытке открыть внешний просмотрщик/редактор из альтернативной истории просмотра и редактирования, но опять-таки, с пробелами. Вообщем, мне ничего не понятно и нужно пояснение, как что настроено, чтобы понять: как такое может быть.
То, что запуск префиксовидных внешних просмотрщиков/редакторов из альтернативной истории просмотра и редактирования не работает, это понятно: из-за ведущих пробелов, которые AltHistory вставляет, чтобы скрыть команду, "запускатор" Far не считает, что команда начинается с префикса и не обрабатывает префикс. Уж не знаю, что с этим делать:
Убирать из плагина пробельную логику и замусоривать историю команд запусками внешних просмотрщиков/редакторов.
Пытаться понять логику, почему в самом FAR нельзя теперь триммить пробелы в начале командной строки и если не найду логику, упрашивать FarGroup тримить начало командной строки при анализе.
Упрашивать FarGroup предоставить "запускатор" в пользование плагинам, чтобы можно было внешний просмотрщик/редактор вызвать, не испортив командную строку и не замусорив историю команд.
AltHistory: Alternative History — Альтернативная история
Posted: Thu 09 Feb, 2023 15:55
by Smitis
Nikolay wrote: ↑Tue 07 Feb, 2023 22:56
и не должна в альтернативной истории команд отображаться.
Теперь я ничего не понял.
Из основной истории (которую ведёт ФАР) внешний редактор через префикс открывается нормально.
Не открывается из истории AltHistory. Почему она там не должна отображаться? Это плохо, если не должна.
AltHistory: Alternative History — Альтернативная история
Posted: Thu 09 Feb, 2023 17:44
by Nikolay
Smitis wrote: ↑Thu 09 Feb, 2023 15:55
Из основной истории (которую ведёт ФАР) внешний редактор через префикс открывается нормально.
Разумеется, поскольку фар умеет запускать внешний редактор. Мой плагин не умеет этого делать, поэтому запускает внешний редактор через командную строку ФАР, что мусорит в истории команд.
Не открывается из истории AltHistory. Почему она там не должна отображаться? Это плохо, если не должна.
Потому что это мусор (я про историю команд говорю, а не просмотра/редактирования). Чтобы этот мусор не отображался в истории команд AltHistory, плагин перед передачей команды в командную строку предваряет команду пробелами. Это нормально работает с внешними редакторами, представляющими собой вызов программ, но не работает с префиксами командной строки, поскольку фар не видит префикс, предварённый пробелами и передаёт команду Windows, которая не понимает, что такое "notepad:", конечно.
Варианты, что со всем этим делать, я выше описал.
AltHistory: Alternative History — Альтернативная история
Posted: Thu 09 Feb, 2023 18:58
by Smitis
Nikolay, а понял, засорять историю команд конечно не нужно.
Мне кажется, наилучшим выходом был бы пункт 3.
AltHistory: Alternative History — Альтернативная история
Posted: Thu 09 Feb, 2023 20:11
by Nikolay
Smitis wrote: ↑Thu 09 Feb, 2023 18:58
Мне кажется, наилучшим выходом был бы пункт 3.
При переходе в такую папку AltHistory всякий раз подключается заново. Если пароль не сохранен в настройках подключения, он запрашивается. Это, естественно, сводит на нет всё удобство. В сборке Far 4907 и AltHistory 4.0.1 соединение переиспользуется (но нет префикса и кредов, приходится тыкать наугад, хотя это и проще, чем вводить каждый раз пароль).
Можно ли как-то вернуть переиспользование текущего соединения? Было бы идеально.
AltHistory: Alternative History — Альтернативная история
Posted: Wed 15 Feb, 2023 12:02
by Smitis
Nikolay wrote: ↑Thu 09 Feb, 2023 20:11
Да, конечно, а пока костылище.
Так гораздо лучше - засорение истории практически незаметно (ну попала лишняя команда туда, ну и что)
AltHistory: Alternative History — Альтернативная история
Posted: Wed 15 Feb, 2023 13:24
by Nikolay
Freeman wrote: ↑Wed 15 Feb, 2023 11:26
При переходе в такую папку AltHistory всякий раз подключается заново. Если пароль не сохранен в настройках подключения, он запрашивается.
Это так, только если в настройках подключения не сохранён также и логин. Если логин сохранён, то вполне себе используется пароль, введённый ранее, NetBox так и сообщает: "Authenticating with pre-entered password".
Freeman wrote: ↑Wed 15 Feb, 2023 11:26
Можно ли как-то вернуть переиспользование текущего соединения? Было бы идеально.