Пользовательское меню - потеря переменной [решено] и другие глюки

Здесь можно сообщить о найденных багах в Far.
Post Reply
dest
Posts: 35
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 9 times

Пользовательское меню - потеря переменной [решено] и другие глюки

Post by dest »

Создаём в пользовательском меню новый пункт, вписываем код:

Code: Select all

echo Files to compress: !&
cd !\
echo Files to compress: !&
Выделяем пару любых файлов, вызываем F2, запускаем созданный пункт меню...

1.
Первая строка покажет выделенные файлы.
Вторая строка перейдёт в текущий путь.
Третья строка покажет... текущий выделенный файл/директорию (".." если мы в поддиректории).

2.
Стандартные клавиши управления редактированием ведут себя неадекватно (Shift-Up/Down, Shift-Home/End). При попытке выделить какую-либо строку с помощью Shift-Home/End, затем переходом курсором на другую строку "выделение" не убирается, но при попытке скопировать в буфер - его там не будет.

3.
Не нахожу возможности передать каждому файлу в списке помеченных файлов !& директорию. Если внешняя программа требует полный путь, то вариантов всего два - перейти в текущую директорию с помеченными файлами (cd !\) и затем передать список файлов (после перехода не передать...), либо передать все файлы с указанием директории. Но, увы. Дальше перебирать варианты и комбинации, при которых заработает - не могу, out of time, извиняйте
Last edited by dest on Tue 05 May, 2020 17:43, edited 1 time in total.

Shmuel
Posts: 6152
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 320 times

Пользовательское меню - потеря переменной и другие глюки

Post by Shmuel »

1.
Вместо cd !\ можно lua: win.SetCurrentDir(far.GetCurrentDirectory()), тогда не будет сбрасываться выделение.

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

Пользовательское меню - потеря переменной и другие глюки

Post by John Doe »

1,3.

Code: Select all

set files=!&
echo Files to compress: %files%
cd !\
echo Files to compress: %files%
2.
Это набор отдельных строк, а не единый редактор.
Исторически сложилось. Переделать было бы неплохо, да.

3.
dest wrote:
Wed 26 Dec, 2018 14:53
перейти в текущую директорию с помеченными файлами (cd !\)
Не очень понимаю что это даёт.
Разве изначально мы не в текущей?
Last edited by John Doe on Thu 27 Dec, 2018 10:22, edited 1 time in total.

dest
Posts: 35
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 9 times

Пользовательское меню - потеря переменной и другие глюки

Post by dest »

John Doe wrote:
Thu 27 Dec, 2018 10:19
Не очень понимаю что это даёт.
Разве изначально мы не в текущей?
Это была попытка указать последующей вызываемой программе текущую рабочую директорию, чтобы проверить, будет ли она работать.
Увы, похоже не будет (хотел из меню вызывать FileOptimizer.exe/FileOptimizer64.exe - ему требуется передавать полные пути к каждому файлу в списке, иначе все переданные выделенные файлы skip-аются). Вот такая особенность... И это не единичная программа, так себя ведущая. Так что однозначно нужна опция передавать с выделенными файлами и их пути.
Last edited by dest on Thu 27 Dec, 2018 10:45, edited 1 time in total.

Shmuel
Posts: 6152
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 320 times

Пользовательское меню - потеря переменной и другие глюки

Post by Shmuel »

John Doe wrote:
Thu 27 Dec, 2018 10:19
dest wrote:
Wed 26 Dec, 2018 14:53
перейти в текущую директорию с помеченными файлами (cd !\)
Не очень понимаю что это даёт.
Разве изначально мы не в текущей?
Для комстроки, возможно. Для макросов, в общем случае, нет.

Code: Select all

Macro {
  area="Shell"; key="F1";
  action=function() io.open("myfile","w"):close(); end; 
}

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

Пользовательское меню - потеря переменной и другие глюки

Post by John Doe »

dest wrote:
Thu 27 Dec, 2018 10:42
Так что однозначно нужна опция передавать с выделенными файлами и их пути.
На мантисе есть связанные пожелания:
https://bugs.farmanager.com/view.php?id=99
https://bugs.farmanager.com/view.php?id=3681

Что до вашей задачи, то обратите внимание на следующий метасимвол:

Code: Select all

!@!      Имя файла, содержащего имена помеченных файлов

dest
Posts: 35
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 9 times

Пользовательское меню - потеря переменной и другие глюки

Post by dest »

John Doe wrote:
Thu 27 Dec, 2018 16:33
Что до вашей задачи, то обратите внимание на следующий метасимвол:
Пытался в самом начале - кроме получения имени временного файла ничего добиться не удалось. Передать содержимое файла не удалось. Лучший способ решить задачу - передавать все имена файлов с директориями через дополнительный метасимвол, не изобретая [сложных] механизмов разборки файла из множества строк в одну и передачи в виде параметра, это реально неудобно, и для кого-либо может быть крайне нетривиальной задачей, при том что прочитать хелп и вставить просто новый метасимвол с поддержкой путеи к каждому помеченному файлу, решил бы это элементарно.

UPD: меня нет на мантисе, и я был бы благодарен, если бы у тебя нашлось время и желание, обновить там пожелания с учётом мной написанного. Спасибо.
Last edited by dest on Thu 27 Dec, 2018 23:00, edited 1 time in total.

buniak_a_h
Posts: 1934
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 124 times
Been thanked: 183 times
Contact:

Пользовательское меню - потеря переменной и другие глюки

Post by buniak_a_h »

John Doe wrote:
Thu 27 Dec, 2018 16:33
Что до вашей задачи, то обратите внимание на следующий метасимвол:
Тут, кстати, в 3-м ФАРе (по сравнению с 1.75) появился нюанс: при вызове команд (например, вызов копирования отмеченных файлов при помощи KillCopy) этот временный файл удаляется раньше, чем стартует программа копирования. В результате "искаробочный" макрос для копирования KillCopy не работает. Пришлось делать bat-файл, делающий копию этого файла и вызывающий KillCopy с указанием копии... Это касается вызова не из МЕНЮ, а из "применить команду ко всем отмеченным" (Ctrl-G). Но проблема может вылезти и в случае МЕНЮ - макросимвол же тот же!
Last edited by buniak_a_h on Fri 28 Dec, 2018 04:55, edited 1 time in total.

dest
Posts: 35
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 9 times

Пользовательское меню - потеря переменной и другие глюки

Post by dest »

Вернулся спустя пару с лишним лет к задачке. И быстро решил.
Сначала создал пункт меню, в котором в файл скидываются значения всех метасимволов, посмотреть/убедиться, что там в момент вызова.
Зная, что запускаемой мной программе нужно "находиться" в директории, в которой лежат файлы/директории на обработку, понимаю, что нужно принудительно перейти на диск и в директорию, где эти файлы лежат. Но как было выяснено раньше — отметка файлов слетает после первой же команды выбора диска (C:\, D:\, E:\ etc). Так же слетает выбор и после вызова "cd !\".
Попробовал войти через заднюю дверь — объединить "!:" и "cd !\" в одну команду, и посмотреть, что будет в метасимволах. Результатом стала строка "!:&&cd !\&&echo !&>такой-то_файл.txt". Каково было моё удивление, когда я увидел, что при объединении вызовов в очередь выбор не слетает! Затем разбил на две строки — "!:&&cd !\" и "echo !&>такой-то_файл.txt" — и оказалось, что в таком варианте тоже не слетает! Т.е. по отдельности вызовы "!:" и "cd !\" — оба сбрасывают выбор, а объединив их в одно "!:&&cd !\" — не слетает.
Итак, решение нашлось:
!:&&cd !\
ПолныйПутьКПрограмме\программа.exe !&

и всё работает как надо! Гештальт закрыт %)

User avatar
HaRT
Moderator
Posts: 9486
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 109 times
Been thanked: 226 times

Пользовательское меню - потеря переменной [решено] и другие глюки

Post by HaRT »

dest wrote:
Tue 05 May, 2020 16:24
!:&&cd !\
ПолныйПутьКПрограмме\программа.exe !&
Предлагаю короче: cd /d !\ && "ПолныйПутьКПрограмме\программа.exe" !&
Фар есть инструмент, а не нянька. © 2009 DrKnS

dest
Posts: 35
Joined: Mon 29 Jun, 2015 01:30
Has thanked: 9 times

Пользовательское меню - потеря переменной [решено] и другие глюки

Post by dest »

Как это ни смешно, но на практике объединение в одну строку этих двух команд не работает :) "Синтаксическая ошибка в имени файла, имени папки или метке тома."

Post Reply

Return to “Глюки и баги”