Page 1 of 2

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Sun 10 Dec, 2017 17:10
by Zzzz
запустил far.exe -m -p"C:\Program Files (x86)\Far3\Plugins\LuaMacro" -ro -s %TEMP%\farprofile\%RANDOM%, текущий каталог c:\, запускаю lua:msgbox(win.GetFileInfo('far.exe').FileName) - работает (со всеми именами из %FARHOME%), а если указываю Descript.ion (лежит в корне), то получаю ошибку "attempt to index a nil value".
В 4700 нормально работает.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Sun 10 Dec, 2017 17:20
by Shmuel
Где тут глюки и баги?
Вы указываете только имя файла, а не полный путь, и хотите, чтобы файл находился как в папке %FARHOME%, так и в папке C:\ ???
Так не бывает, текущая папка в каждый момент времени только одна.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Sun 10 Dec, 2017 17:42
by Zzzz
Разумеется я ожидаю, что поиск будет производиться в текущем каталоге, который указан в приглашении комстроки.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Sun 10 Dec, 2017 17:53
by Shmuel
Ожидать не вредно, но более полезно знать точно, как что работает.
У Far3 текущий каталог и каталог активной панели в общем случае не совпадают.
Функция win.GetFileInfo - обёртка над функцией Windows API, она ищет файл в текущем каталоге аппликации, а о панелях Фар ничего не знает.

Кстати, мне прежнее поведение, как в Far 1.xx, когда Far синхронизировал текущий каталог с активной панелью, больше подходило. Но - приходится считаться с реальным положением вещей.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 08:37
by Smitis
Zzzz, Чтобы текущий каталог совпадал с каталогом панели нужно наличие хотя бы однго ansi-плагина (например, MultiArc), тогда включается режим совместимости и каталог совпадает с панелью, кроме случаев, когда путь превышает длину MAX_PATH.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 09:36
by John Doe
Smitis wrote: Mon 11 Dec, 2017 08:37Чтобы текущий каталог совпадал с каталогом панели нужно наличие хотя бы однго ansi-плагина
Но нельзя же на это закладываться.
Чтобы совпадал надо просто перейти в этот каталог, функции есть.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 11:48
by DrKnS
Shmuel wrote: Sun 10 Dec, 2017 17:53мне прежнее поведение, как в Far 1.xx, когда Far синхронизировал текущий каталог с активной панелью, больше подходило. Но - приходится считаться с реальным положением вещей.
Когда плагин получает управление, ему никто не может запретить синхронизировать их самостоятельно.
Делать это не рекомендуется, но если пользователь именно этого и ожидает в текущем контексте - всё в ваших руках.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 11:55
by Shmuel
Я не считаю правильным, чтобы плагины меняли текущую директорию. А вот автоматическая синхронизация с активной панелью была удобна и интуитивна, что бы кто ни возражал.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 17:23
by zg
Shmuel wrote: Mon 11 Dec, 2017 11:55Я не считаю правильным, чтобы плагины меняли текущую директорию. А вот автоматическая синхронизация с активной панелью была удобна и интуитивна, что бы кто ни возражал.
так эту к майкрософту. не поддерживает SetCurrentDirectory ни длинных путей, всяких там точек и пробелов на конце, ни прочей экзотики. и если экзотика — это экзотика, то на длинные пути в каком-нибудь кэше ie можно было нарваться ещё во времена w2k, а сейчас — вообще сплошь и рядом. и иметь фичу, которая работает не всегда — не очень удобно.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 17:30
by Shmuel
zg wrote: Mon 11 Dec, 2017 17:23иметь фичу, которая работает не всегда — не очень удобно
Это да, аргумент.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 17:31
by ccaid
zg wrote: Mon 11 Dec, 2017 17:23не поддерживает SetCurrentDirectory
может в FAQ на память?

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 17:49
by DrKnS
zg wrote: Mon 11 Dec, 2017 17:23не поддерживает SetCurrentDirectory ни длинных путей, всяких там точек и пробелов на конце
Длинные пути, начиная с какой-то там подверсии windows 10, можно включить.
И фар даже включает.
Включается это для всего процесса, так что лучше не используйте MAX_PATH в ваших плагинах, вообще.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 18:27
by Zzzz
DrKnS wrote: Mon 11 Dec, 2017 17:49
zg wrote: Mon 11 Dec, 2017 17:23не поддерживает SetCurrentDirectory ни длинных путей, всяких там точек и пробелов на конце
Длинные пути, начиная с какой-то там подверсии windows 10, можно включить.
И фар даже включает.
Включается это для всего процесса, так что лучше не используйте MAX_PATH в ваших плагинах, вообще.
zg wrote: Mon 11 Dec, 2017 17:23не поддерживает SetCurrentDirectory ни длинных путей
https://msdn.microsoft.com/ru-ru/librar ... s.85).aspx
In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path.

Starting with Windows 10, version 1607, for the unicode version of this function (SetCurrentDirecotryW), you can opt-in to remove the MAX_PATH limitation.

Насколько я понимаю, "\\?\" - это стандартный способ обойти MAX_PATH, а в 1607 можно просто отключить ограничение MAX_PATH.

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 19:15
by Smitis
Под FAR2 был плагин PathSync. Он синхронизировал каталог панели с текущим каталогом. Если синхронизация была невозможна, менял цвет приглашения в командной строке. Может быть это лучшее решение? А то текущий каталог нужен для работы утилит из командной строки, но ФАР, даже с ansi-плагинами, если каталоги не синхронизируются, молча устанавливает корень диска и выясняется это, как обычно, когда результат работы ВДРУГ оказывается не там, где нужно :(

win.GetFileInfo - текущий каталог всегда %FARHOME%

Posted: Mon 11 Dec, 2017 19:25
by John Doe
Smitis wrote: Mon 11 Dec, 2017 19:15Может быть это лучшее решение?
На мантисе есть виш об индикации проблемных путей, если вы только об этом.