Запуск макроса по событию смены директории
Макрос на событие смены директории
Возможно ли в Far3 повесить Lua-макрос на событие смены директории?
Если более конкретно, то хотелось бы задавать/обновлять значения некоторых переменных окружения после смены директории.
Если более конкретно, то хотелось бы задавать/обновлять значения некоторых переменных окружения после смены директории.
- cmd.exe
- Posts: 378
- Joined: Fri 16 Apr, 2010 18:26
- Location: Нижний Новгород
- Has thanked: 181 times
- Been thanked: 10 times
- Contact:
Макрос на событие смены директории
Для этого отлично подходит плагин Environment Manager.
На событие вход в деректорию:
Panel.Left Folder == "SomePath"
Panel.Right Folder == "SomePath"
или Active Panael == "SomePath"
Выполнить изменение конфигурации плагина Environment Manager. было-бы не плохо что-бы это было не только способами макроса, но и возможностью самого плагина.
На событие вход в деректорию:
Panel.Left Folder == "SomePath"
Panel.Right Folder == "SomePath"
или Active Panael == "SomePath"
Выполнить изменение конфигурации плагина Environment Manager. было-бы не плохо что-бы это было не только способами макроса, но и возможностью самого плагина.
I've been using Vim for about 2 years now, mostly because I can't figure out how to exit it. (c) I Am Devloper
I know nothing except the fact of my ignorance. (с) Socrates
I know nothing except the fact of my ignorance. (с) Socrates
-
- Posts: 173
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 13 times
- Been thanked: 9 times
- Contact:
Запуск макроса по событию смены директории
Как сделать, чтоб при каждом изменении директории в любой из панелей текущие пути сохранялись (как я увидел, они хранятся в localconfig.db)?
Зачем: Хочется в ConEmu иметь возможность открыть новую вкладку с Фаром с теми же путями, что и уже открытый Фар. На данный момент использую в ConEmu Task Parameters
Возможно ли написать макрос, который по смене директории сохраняет текущие панели в localconfig? Сохранять по такому делу весь конфиг (Shift-F9) не хочется?
1. Как вызывать макрос по событию смены директории?
2. Как сохранить панели в localconfig?
Upd: рабочий вариант
Зачем: Хочется в ConEmu иметь возможность открыть новую вкладку с Фаром с теми же путями, что и уже открытый Фар. На данный момент использую в ConEmu Task Parameters
/dir "%CD%"
, но это дублирует лишь активную панель. Хочется и пассивную тоже.Возможно ли написать макрос, который по смене директории сохраняет текущие панели в localconfig? Сохранять по такому делу весь конфиг (Shift-F9) не хочется?
1. Как вызывать макрос по событию смены директории?
2. Как сохранить панели в localconfig?
Upd: рабочий вариант
Last edited by gene.pavlovsky on Thu 10 Nov, 2016 15:57, edited 3 times in total.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Сохранение путей в localconfig при каждом chdir
Не правильнее ли написать макрос, запускающий фар с нужными путями на панелях?
-
- Posts: 173
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 13 times
- Been thanked: 9 times
- Contact:
Сохранение путей в localconfig при каждом chdir
Ну это самый очевидный вариант - может, так и сделаю. Но что, если, к примеру, в текущем Фаре как раз что-то долгое копируется. Это один из частых случаев, когда хочется открыть новый фар в том же месте.
Сохранение путей в localconfig при каждом chdir
Хотел сказать, что где-то тут на форуме есть скрипт «Pick path from other FAR instances», но оказалось, что когда в соседней панели работает копирование, сам «pick path» в этот момент не знает, какие пути под диалогом копирования таятся. Так что можешь глянуть его, но проблему не решит. Или вызывать его перед операцией копирования.
P.s. Скрипт не заменяет путь текущей панели, а вставляет путь в комстроку или диалог. Поэтому в дополнение к нему можно было бы пользоваться таким вот макросом:
P.s. Скрипт не заменяет путь текущей панели, а вставляет путь в комстроку или диалог. Поэтому в дополнение к нему можно было бы пользоваться таким вот макросом:
Code: Select all
Macro {
area = "Shell Search"; key = "CtrlShiftG"; description = "Panel: Go to path from clipboard"; action = function()
mypath = prompt("GoTo", "Input path", 0x00000010); mypath = mf.trim(mypath); mypath = mf.replace(mypath, "\\", "\\"); Panel.SetPath(0, mypath);
end
}
Пользуюсь ФАРом больше 20 лет © собирательный.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Сохранение путей в localconfig при каждом chdir
Приостановить по Esc, и запустить новый фар макросом.
-
- Posts: 173
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 13 times
- Been thanked: 9 times
- Contact:
Сохранение путей в localconfig при каждом chdir
"Pick path" частично решает проблему, но если запущено несколько фаров, то как узнать, который из них был последний активен?
Плюс несколько штук запущенных фаров, 20 раз в секунду опрашивающих файловую систему на наличие файла - из пушки по воробьям (для моего ограниченного случая).
Я подумал, что в принципе мне localconfig не упёрся, я мог бы текущие пути на панелях сохранять также во временный файл. А запуск фара из conemu делать через wrapper, считывающий этот файл, и уже запускающий фар с нужными путями.
Один вопрос остался - как в макросе отловить событие смены директории в панели?
Штудирование энциклопедии, исходников, и темы http://forum.farmanager.com/viewtopic.php?f=15&t=7693 не дало результата. Или я что-то не проглядел, или от панели никаких макро-эвентов не зацепить?
Плюс несколько штук запущенных фаров, 20 раз в секунду опрашивающих файловую систему на наличие файла - из пушки по воробьям (для моего ограниченного случая).
Я подумал, что в принципе мне localconfig не упёрся, я мог бы текущие пути на панелях сохранять также во временный файл. А запуск фара из conemu делать через wrapper, считывающий этот файл, и уже запускающий фар с нужными путями.
Один вопрос остался - как в макросе отловить событие смены директории в панели?
Штудирование энциклопедии, исходников, и темы http://forum.farmanager.com/viewtopic.php?f=15&t=7693 не дало результата. Или я что-то не проглядел, или от панели никаких макро-эвентов не зацепить?
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Сохранение путей в localconfig при каждом chdir
Увы. Но на мантисе есть http://bugs.farmanager.com/view.php?id=2826
-
- Posts: 173
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 13 times
- Been thanked: 9 times
- Contact:
Запуск макроса по событию смены директории
Спасибо. Уже нашёл данный wish и откомментил...
На данный момент вижу для себя следующий геморноватый, но реальный способ.
Повесить макросы на все сочетания клавиш, меняющие путь в панели (для начала на Enter). Сначала послать собственно эти сочетания клавиш, а потом вызвать ф-цию UpdateDirs().
Недоделанный макрос, общий принцип работает. Осталось сохранять состояние в файл, а в другом автостарт-макросе восстанавливать состояние из файла (по сути дублируется часть функционала localconfig.db, что очень некрасиво, но что поделаешь, кроме как писать feature request-ы).
На данный момент вижу для себя следующий геморноватый, но реальный способ.
Повесить макросы на все сочетания клавиш, меняющие путь в панели (для начала на Enter). Сначала послать собственно эти сочетания клавиш, а потом вызвать ф-цию UpdateDirs().
Недоделанный макрос, общий принцип работает. Осталось сохранять состояние в файл, а в другом автостарт-макросе восстанавливать состояние из файла (по сути дублируется часть функционала localconfig.db, что очень некрасиво, но что поделаешь, кроме как писать feature request-ы).
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
-
- Posts: 173
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 13 times
- Been thanked: 9 times
- Contact:
Запуск макроса по событию смены директории
Да, я уже понял, что с клавишами я порядочно задолбаюсь, адаптирую сейчас ваш PickPathFromOtherFAR.lua под мою задачу.John Doe wrote:Или по таймеру проверять.
-
- Posts: 173
- Joined: Tue 16 Feb, 2010 17:55
- Location: Luxembourg
- Has thanked: 13 times
- Been thanked: 9 times
- Contact:
Запуск макроса по событию смены директории
Не нравится мне, что так извращаться приходится, но вот каков получился результат.
Функционал: При любом переходе в директорию или перемещении курсора текущее состояние панелей автосохраняется. При запуске нового экземпляра Фара он будет запущен с теми же путями, что и последний используемый Фар.
Требования: Клиент sqlite3.exe для командной строки, я использую из состава Cygwin, можно любой другой сборки. Путь прописан в макросе в переменной SQLITE. Чтоб совсем не тормозило, надо запускать команду через os.execute в фоне, я использую Cygwin-овский setsid, вроде бы ещё есть некий emSpawn (не пробовал).
Как работает: Таймер проверяет панели раз в 50 мс. Если путь или текущий файл на одной из панелей изменились, либо состоялся переход на др. панель, либо панели поменялись местами - начинается обратный отсчёт тиков таймера (автосохранение состояния делается не моментально после каждого изменения, чтоб не грузить излишне систему). Если через 6 тиков (~300 мс) таймера других обновлений не было, состояние панелей сохраняется. Если же на любом тике состояние опять изменилось, отсчёт начинается сначала (с 6). Это позволяет, к примеру, зажать Enter на директории, либо Up/Down на длинном списке файлов, и избежать неприятных задержек. Далее текущее состояние панелей оформляется в виде SQL-запроса, и он применяется через os.execute клиентом sqlite3 к localconfig.db в Far Profile. Чтобы это совсем не тормозило, хорошо бы запускать команду в фоновом режиме, я использую Cygwin-овский setsid.exe, ещё есть некий emSpawn специально для Lua (не пробовал). Тогда вообще не чувствуется никаких задержек. Загрузка CPU в среднем не изменилась.
Panel_ChangeDir.lua
Функционал: При любом переходе в директорию или перемещении курсора текущее состояние панелей автосохраняется. При запуске нового экземпляра Фара он будет запущен с теми же путями, что и последний используемый Фар.
Требования: Клиент sqlite3.exe для командной строки, я использую из состава Cygwin, можно любой другой сборки. Путь прописан в макросе в переменной SQLITE. Чтоб совсем не тормозило, надо запускать команду через os.execute в фоне, я использую Cygwin-овский setsid, вроде бы ещё есть некий emSpawn (не пробовал).
Как работает: Таймер проверяет панели раз в 50 мс. Если путь или текущий файл на одной из панелей изменились, либо состоялся переход на др. панель, либо панели поменялись местами - начинается обратный отсчёт тиков таймера (автосохранение состояния делается не моментально после каждого изменения, чтоб не грузить излишне систему). Если через 6 тиков (~300 мс) таймера других обновлений не было, состояние панелей сохраняется. Если же на любом тике состояние опять изменилось, отсчёт начинается сначала (с 6). Это позволяет, к примеру, зажать Enter на директории, либо Up/Down на длинном списке файлов, и избежать неприятных задержек. Далее текущее состояние панелей оформляется в виде SQL-запроса, и он применяется через os.execute клиентом sqlite3 к localconfig.db в Far Profile. Чтобы это совсем не тормозило, хорошо бы запускать команду в фоновом режиме, я использую Cygwin-овский setsid.exe, ещё есть некий emSpawn специально для Lua (не пробовал). Тогда вообще не чувствуется никаких задержек. Загрузка CPU в среднем не изменилась.
Panel_ChangeDir.lua