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

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

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

Post by Zzzz » Sun 10 Dec, 2017 17:10

запустил 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: 5614
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 187 times

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

Post by Shmuel » Sun 10 Dec, 2017 17:20

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

Zzzz
Posts: 88
Joined: Sat 13 Oct, 2007 10:12
Been thanked: 1 time

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

Post by Zzzz » Sun 10 Dec, 2017 17:42

Разумеется я ожидаю, что поиск будет производиться в текущем каталоге, который указан в приглашении комстроки.
W7U SP1 x64

Shmuel
Posts: 5614
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 187 times

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

Post by Shmuel » Sun 10 Dec, 2017 17:53

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

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

Smitis
Posts: 1554
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 15 times
Been thanked: 31 times
Contact:

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

Post by Smitis » Mon 11 Dec, 2017 08:37

Zzzz, Чтобы текущий каталог совпадал с каталогом панели нужно наличие хотя бы однго ansi-плагина (например, MultiArc), тогда включается режим совместимости и каталог совпадает с панелью, кроме случаев, когда путь превышает длину MAX_PATH.
Разум когда-нибудь победит.

User avatar
John Doe
Бюрократ
Posts: 12086
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 28 times
Been thanked: 153 times

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

Post by John Doe » Mon 11 Dec, 2017 09:36

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

User avatar
DrKnS
Posts: 5064
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 5 times
Been thanked: 178 times

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

Post by DrKnS » Mon 11 Dec, 2017 11:48

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

Shmuel
Posts: 5614
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 187 times

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

Post by Shmuel » Mon 11 Dec, 2017 11:55

Я не считаю правильным, чтобы плагины меняли текущую директорию. А вот автоматическая синхронизация с активной панелью была удобна и интуитивна, что бы кто ни возражал.

User avatar
zg
zero-gravity
Posts: 5520
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 83 times
Contact:

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

Post by zg » Mon 11 Dec, 2017 17:23

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

Shmuel
Posts: 5614
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 21 times
Been thanked: 187 times

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

Post by Shmuel » Mon 11 Dec, 2017 17:30

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

ccaid
Posts: 819
Joined: Fri 12 Jun, 2009 16:04
Has thanked: 11 times
Been thanked: 5 times

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

Post by ccaid » Mon 11 Dec, 2017 17:31

zg wrote:
Mon 11 Dec, 2017 17:23
не поддерживает SetCurrentDirectory
может в FAQ на память?
Фар делают добрые люди

User avatar
DrKnS
Posts: 5064
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 5 times
Been thanked: 178 times

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

Post by DrKnS » Mon 11 Dec, 2017 17:49

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

Zzzz
Posts: 88
Joined: Sat 13 Oct, 2007 10:12
Been thanked: 1 time

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

Post by Zzzz » Mon 11 Dec, 2017 18:27

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

Smitis
Posts: 1554
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 15 times
Been thanked: 31 times
Contact:

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

Post by Smitis » Mon 11 Dec, 2017 19:15

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

User avatar
John Doe
Бюрократ
Posts: 12086
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 28 times
Been thanked: 153 times

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

Post by John Doe » Mon 11 Dec, 2017 19:25

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

Smitis
Posts: 1554
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 15 times
Been thanked: 31 times
Contact:

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

Post by Smitis » Mon 11 Dec, 2017 19:38

John Doe,
Синхронизация и индикация. Одна индикация смысла, естественно, не имеет.
Разум когда-нибудь победит.

Post Reply

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