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

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 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: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

buniak_a_h wrote: Fri 13 Mar, 2020 00:02 Как правильно переключить текущий каталог на некий (чтоб процессы выполнялись в этой папке)
Правильно не переключать.
Подробности можно найти поиском.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 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: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »



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

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

Эта "несогласованность" описана в документации и неоднократно обсуждена за последние 10.5 лет на этом форуме, да.
Зачем трафик загружать!?
У меня анлим. Рекомендую.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 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: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 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
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 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.
User avatar
buniak_a_h
Posts: 4234
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 642 times
Contact:

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

Post by buniak_a_h »

HaRT, по следам былых историй. Может, посоветуете что…
Возникла проблема, аналогичная описанной, и я не понимаю пока, как её решить.
На панели открыт контейнер (например, архив).Я вытаскиваю из него несколько файлов во временную папку и "напускаю" на них плагин через префикс командной строки (например, edit:!.!, где !.! заменяется на имя файла с расширением) - вызываю Plugin.Command. Для успешного выполнения задуманного требуется выполнить Plugin.Command во временной папке. Установка win.SetCurrentDir эффекта на выполнение команды не оказывает. Поменять текущую папку на временную - это можно бы, если бы не "недоделанные" плагины типа MultiArc: он не выполняет panel.SetPanelDirectory, поэтому вернуться проблематично. Есть какой-нить легитимный способ выполнить задуманное?
P/S. Про указание edit:!\!.! (с заменой !\ на имя временной папки) я знаю, но это зависит не от меня, а от юзера. "Насильно" добавлять имя временной папки перед именем файла будет некорректно: ведь текст после префикса не обязательно имя файла. Насколько всё было бы проще, если б была возможность не только получить, но и задать «внутренний "текущий каталог" Far Manager». Ну, или указывать в Plugin.Command в третьем параметре "рабочую папку".
Post Reply

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