несогласованность win.SetCurrentDir и dir, far.GetCurrentDirectory Topic is solved

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

несогласованность win.SetCurrentDir и dir, far.GetCurrentDirectory

Post by buniak_a_h »

Написал я небольшой Панельный модуль для отображения структуры каталогов в виде дерева. При переходе по узлам попытался сделать назначение текущего каталога (чтобы "внешние" команды работали в контексте текущей папки). Использовал для этого вызов win.SetCurrentDir(). НО! Это не помогло: lua:=win.GetCurrentDir() возвращает, вроде бы, нужную папку, а far.GetCurrentDirectory() - ту папку, что была на реальной панели ДО вызова модуля. Команда dir также отображает содержимое предыдущей папки.
1. Как правильно переключить текущий каталог на некий (чтоб процессы выполнялись в этой папке)?
2. Есть ли возможность сформировать приглашение в командной строке такое же, как у файловой панели?
--
P/S.
Модуль TreePanel с указанным функционалом будет опубликован в версии 1.2.1 (сейчас в разработке)
User avatar
DrKnS
Posts: 5785
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 330 times

несогласованность win.SetCurrentDir и dir, far.GetCurrentDirectory

Post by DrKnS »

buniak_a_h wrote: Fri 13 Mar, 2020 00:02 Как правильно переключить текущий каталог на некий (чтоб процессы выполнялись в этой папке)
Правильно не переключать.
Подробности можно найти поиском.
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

несогласованность win.SetCurrentDir и dir, far.GetCurrentDirectory

Post by buniak_a_h »

DrKnS wrote: Fri 13 Mar, 2020 13:04 Правильно не переключать.
Правильно - не пользоваться FAR-ом. Нормальные программисты работают только в командной строке!
DrKnS wrote: Fri 13 Mar, 2020 13:04 Подробности можно найти поиском.
А то я не искал.
--
DrKnS, не хотите - не отвечайте, Вас же никто не неволит! Зачем трафик загружать!?
User avatar
DrKnS
Posts: 5785
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 10 times
Been thanked: 330 times

несогласованность win.SetCurrentDir и dir, far.GetCurrentDirectory

Post by DrKnS »



Вы спросили - как "правильно переключать текущий каталог".
Текущий каталог процесса (win.* в вашей терминологии), как вы уже заметили, никакого влияния на работу Far не оказывает.
API (far.* в вашей терминологии) позволяет узнать, что Far считает "текущим каталогом", но не позволяет явно его устанавливать, т.к. эта операция сама по себе бессмысленна - "текущий каталог", как вы уже заметили, наследует то, что открыто на панели.

Поэтому, как выше и написано, правильно текущий каталог не переключать. Т.к. напрямую его переключить нельзя. Можно сменить каталог панели, текущий при этом сменится автоматически.

Эта "несогласованность" описана в документации и неоднократно обсуждена за последние 10.5 лет на этом форуме, да.
Зачем трафик загружать!?
У меня анлим. Рекомендую.
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

несогласованность win.SetCurrentDir и dir, far.GetCurrentDirectory

Post by buniak_a_h »

DrKnS wrote: Fri 13 Mar, 2020 19:43 "текущий каталог", как вы уже заметили, наследует то, что открыто на панели.
<…>Можно сменить каталог панели, текущий при этом сменится автоматически.
1. А что делать, если панель - плагиновая, а не дисковая?
2. Как это делает плагин TempPanel? Ведь если на временной панели файлы из разных папок, то при переходе от файла к файлу "текущий" каталог меняется! Проверяю просто выдавая команду dir. Вот и мне надо также. Чтоб при переходе от элемента к элементу менялась текущая папка.
…Возможно, достаточно будет в FileName указать полный путь - как-то не сообразил попробовать.
User avatar
HaRT
Moderator
Posts: 9651
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 119 times
Been thanked: 244 times

несогласованность win.SetCurrentDir и dir, far.GetCurrentDirectory

Post by HaRT »

buniak_a_h wrote: Fri 13 Mar, 2020 20:22 панель - плагиновая, а не дисковая
Никто не мешает плагиновой панели выставить OPIF_REALNAMES/PFLAGS_REALNAMES (не помню, какой изнутри плагина, а какой снаружи). Разумеется, это только если файлы и впрямь реальные.
Фар есть инструмент, а не нянька. © 2009 DrKnS
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

несогласованность win.SetCurrentDir и dir, far.GetCurrentDirectory

Post by buniak_a_h »

HaRT, спасибо. Задание FileName=<Path>\. в качестве Item.FileName плюс указание флага OPIF_REALNAMES решило проблему.
Last edited by buniak_a_h on Fri 13 Mar, 2020 21:10, edited 1 time in total.
Post Reply

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