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

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Zzzz
Posts: 108
Joined: Sat 13 Oct, 2007 10:12
Been thanked: 1 time

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

Post 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 нормально работает.
Last edited by Zzzz on Sun 10 Dec, 2017 17:10, edited 1 time in total.
W7U SP1 x64
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Где тут глюки и баги?
Вы указываете только имя файла, а не полный путь, и хотите, чтобы файл находился как в папке %FARHOME%, так и в папке C:\ ???
Так не бывает, текущая папка в каждый момент времени только одна.
Zzzz
Posts: 108
Joined: Sat 13 Oct, 2007 10:12
Been thanked: 1 time

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

Post by Zzzz »

Разумеется я ожидаю, что поиск будет производиться в текущем каталоге, который указан в приглашении комстроки.
W7U SP1 x64
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

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

Кстати, мне прежнее поведение, как в Far 1.xx, когда Far синхронизировал текущий каталог с активной панелью, больше подходило. Но - приходится считаться с реальным положением вещей.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

Zzzz, Чтобы текущий каталог совпадал с каталогом панели нужно наличие хотя бы однго ansi-плагина (например, MultiArc), тогда включается режим совместимости и каталог совпадает с панелью, кроме случаев, когда путь превышает длину MAX_PATH.
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Smitis wrote: Mon 11 Dec, 2017 08:37Чтобы текущий каталог совпадал с каталогом панели нужно наличие хотя бы однго ansi-плагина
Но нельзя же на это закладываться.
Чтобы совпадал надо просто перейти в этот каталог, функции есть.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

Shmuel wrote: Sun 10 Dec, 2017 17:53мне прежнее поведение, как в Far 1.xx, когда Far синхронизировал текущий каталог с активной панелью, больше подходило. Но - приходится считаться с реальным положением вещей.
Когда плагин получает управление, ему никто не может запретить синхронизировать их самостоятельно.
Делать это не рекомендуется, но если пользователь именно этого и ожидает в текущем контексте - всё в ваших руках.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Я не считаю правильным, чтобы плагины меняли текущую директорию. А вот автоматическая синхронизация с активной панелью была удобна и интуитивна, что бы кто ни возражал.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

Shmuel wrote: Mon 11 Dec, 2017 11:55Я не считаю правильным, чтобы плагины меняли текущую директорию. А вот автоматическая синхронизация с активной панелью была удобна и интуитивна, что бы кто ни возражал.
так эту к майкрософту. не поддерживает SetCurrentDirectory ни длинных путей, всяких там точек и пробелов на конце, ни прочей экзотики. и если экзотика — это экзотика, то на длинные пути в каком-нибудь кэше ie можно было нарваться ещё во времена w2k, а сейчас — вообще сплошь и рядом. и иметь фичу, которая работает не всегда — не очень удобно.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

zg wrote: Mon 11 Dec, 2017 17:23иметь фичу, которая работает не всегда — не очень удобно
Это да, аргумент.
ccaid
Posts: 908
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 24 times
Been thanked: 6 times

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

Post by ccaid »

zg wrote: Mon 11 Dec, 2017 17:23не поддерживает SetCurrentDirectory
может в FAQ на память?
Фар делают добрые люди
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

zg wrote: Mon 11 Dec, 2017 17:23не поддерживает SetCurrentDirectory ни длинных путей, всяких там точек и пробелов на конце
Длинные пути, начиная с какой-то там подверсии windows 10, можно включить.
И фар даже включает.
Включается это для всего процесса, так что лучше не используйте MAX_PATH в ваших плагинах, вообще.
Zzzz
Posts: 108
Joined: Sat 13 Oct, 2007 10:12
Been thanked: 1 time

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

Post 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.
W7U SP1 x64
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

Под FAR2 был плагин PathSync. Он синхронизировал каталог панели с текущим каталогом. Если синхронизация была невозможна, менял цвет приглашения в командной строке. Может быть это лучшее решение? А то текущий каталог нужен для работы утилит из командной строки, но ФАР, даже с ansi-плагинами, если каталоги не синхронизируются, молча устанавливает корень диска и выясняется это, как обычно, когда результат работы ВДРУГ оказывается не там, где нужно :(
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

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

Return to “Нужна помощь”