FIN alt. — Fix Incorrect Names

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 11240
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 14 times
Been thanked: 81 times

FIN alt. — Fix Incorrect Names

Post by John Doe » Sat 06 Apr, 2013 23:25

Автор — Shmuel.
Макрос получен из LuaFAR-плагина LF_FIN, представляющего собой аналог другого плагина (автор Тигренок).
Плагин перехватывает закрытие диалогов «Сохранить файл как» редактора и «Открыть/создать файл», «Копировать», «Переименовать или перенести», «Создать папку», «Создать ссылку» панелей, а также диалога «Распаковка архива» плагина ArcLite, удаляя с конца введённого имени пробелы и точки


P.S.
В случае если всё-таки необходимо создать файл/папку, имя которой оканчивается пробелами — можно завершить имя кавычкой.

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

Re: FIN alt. — Fix Incorrect Names

Post by John Doe » Sun 07 Apr, 2013 01:51

В отличии от оригинального плагина не обрабатываются точки.

Это можно преодолеть задав local Pattern = "[%s.]+$"
Но необходимо учитывать, что
1) ".." и "xxx\.." это корректные имена.
2) "..." и "xxx\..." - некорректные, но исправлять их молча нельзя, потому что результат исправления может сильно отличаться от задуманного (не знаю как поступает оригинальный FIN).
И имена, начинающиеся на \\?\, тоже лучше пропускать.

Возможно стоит использовать такой код:
  1. local str = FarDialogItem[10]
  2.           if str:match([[^\\%?\]]) then return end
  3.           local lastname = str:match("[^\\/]*$")
  4.           local extra = lastname:match("%.%.?[%s.]$")
  5.           if extra then return extra~="" and mf.beep() end
  6.           local str, n = str:gsub(Pattern, "")
  7.           if n > 0 then
  8.             SendDlgMessage(hDlg, "DM_SETTEXT", item, str)
  9.           end
  10.           break
В случае если завершающая часть пути представляет собой "..." (или ".. . . . . .") то диалог не закроется, плюс об ошибке сообщит звуковой сигнал (но это на любителя)

User avatar
Тигрёнок
Posts: 388
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Re: FIN alt. — Fix Incorrect Names

Post by Тигрёнок » Sun 07 Apr, 2013 04:35

John Doe wrote:1) ".." и "xxx\.." это корректные имена.
2) "..." и "xxx\..." - некорректные, но исправлять их молча нельзя, потому что результат исправления может сильно отличаться от задуманного (не знаю как поступает оригинальный FIN).
Оригинальный FIN помнит, что операции, скажем, создания папки и копирования – операции существенно разные. Поэтому для первой будут с имён вида xxx\.. и xxx\... будут срублены все финальные точки, а для второй – оставлены две.
Съешь мыша – стань настоящим клавишником!

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

Re: FIN alt. — Fix Incorrect Names

Post by Shmuel » Sun 07 Apr, 2013 06:10

John Doe wrote:В отличии от оригинального плагина не обрабатываются точки.

Это можно преодолеть задав local Pattern = "[%s.]+$"
Манипуляции с точками убраны сознательно. Точки видны, поэтому мне такой искусственный интеллект не нужен.
(Теперь уже и пробелы концевые видны, но во время создания плагина на Lua этого ещё не было).

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

Re: FIN alt. — Fix Incorrect Names

Post by John Doe » Sun 07 Apr, 2013 11:31

Тигрёнок wrote:Оригинальный FIN помнит, что операции, скажем, создания папки и копирования – операции существенно разные. Поэтому для первой будут с имён вида xxx\.. и xxx\... будут срублены все финальные точки, а для второй – оставлены две.
Да, но согласитесь что ситуация эта редкая и странная, и например если в диалоге копирования стоит "..." это не обязательно значит, что пользователь будет рад копированию в родительскую папку.
Поэтому в таких случаях я предлагается ничего не делать, оставлять диалог открытым, предлагая пользователю самому разобраться что он там хотел.
Код, предложенный выше, именно такое поведение и реализует.
Shmuel wrote:Манипуляции с точками убраны сознательно. Точки видны, поэтому мне такой искусственный интеллект не нужен.
(Теперь уже и пробелы концевые видны, но во время создания плагина на Lua этого ещё не было).
Есть ведь стереотипные действия типа "CtrlV Enter", во время которых никто и не смотрит что там видно. Плюс возможно пользователь это не сам делает, а другим макросом.
(В любом случае, макрос в шапке ваш, и его я не трогаю)

User avatar
Тигрёнок
Posts: 388
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Re: FIN alt. — Fix Incorrect Names

Post by Тигрёнок » Sun 07 Apr, 2013 12:42

John Doe wrote:если в диалоге копирования стоит "..." это не обязательно значит, что пользователь будет рад копированию в родительскую папку.
А чему он будет рад, написав в путь три точки?

John Doe wrote:Поэтому в таких случаях предлагается ничего не делать, оставлять диалог открытым, предлагая пользователю самому разобраться что он там хотел.
Диалог по Еnter'у должен закрываться и что-то делать, т.к. может быть вызван из макроса.
Съешь мыша – стань настоящим клавишником!

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

Re: FIN alt. — Fix Incorrect Names

Post by John Doe » Sun 07 Apr, 2013 12:57

Три точки в некоторых ОС означают папку на уровень выше родительской.
Также это может быть нечто случайно попавшее в поле ввода.
Вообще, вероятность того, что мы вставили в поле вводе произвольное имя случайно оканчивающееся точкой достаточно высока.
Но вероятность того, что мы вставили именно "..", со случайно добавленными в конец точками - стремится к 0.

А "делать по Enter что-то полезное" и "делать нечто непотребное" это разные вещи, и при вызове диалога из макроса всё то же самое.

User avatar
Тигрёнок
Posts: 388
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Re: FIN alt. — Fix Incorrect Names

Post by Тигрёнок » Sun 07 Apr, 2013 13:15

John Doe wrote:А "делать по Enter что-то полезное" и "делать нечто непотребное" это разные вещи, и при вызове диалога из макроса всё то же самое.
Оставить диалог открытым - это "делать что-то непотребное", т.к. дальше макрос туда может чего-то доввести и таки сделать это.
Съешь мыша – стань настоящим клавишником!

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

Re: FIN alt. — Fix Incorrect Names

Post by John Doe » Sun 07 Apr, 2013 13:24

А ничего, что при закрытии диалога могут всплывать всякие подтверждения перезаписи, запросы элевации, и всё такое?
Это вашему гипотетическому макросу не помешает?
Любой приличный макрос должен проверять, что он таки попал в панели, а если нет, то или обрабатывать дополнительные диалоги, или останавливаться.

User avatar
Тигрёнок
Posts: 388
Joined: Wed 03 May, 2006 06:07
Location: Россия
Contact:

Re: FIN alt. — Fix Incorrect Names

Post by Тигрёнок » Sun 07 Apr, 2013 16:29

John Doe wrote:А ничего, что при закрытии диалога могут всплывать всякие подтверждения перезаписи, запросы элевации, и всё такое?
Это вашему гипотетическому макросу не помешает?
Перезапись - нет. О ней можно позаботиться заранее.
John Doe wrote:Любой приличный макрос должен проверять, что он таки попал в панели, а если нет, то или обрабатывать дополнительные диалоги, или останавливаться.
Как он проверит, закрылся диалог или нет?
Съешь мыша – стань настоящим клавишником!

Smitis
Posts: 1467
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 14 times
Been thanked: 24 times
Contact:

Re: FIN alt. — Fix Incorrect Names

Post by Smitis » Sun 07 Apr, 2013 17:14

Тигрёнок wrote:Как он проверит, закрылся диалог или нет?
Area.Dialog
Всегда приходится проверять, закрылся ли диалог, открылся ли диалог и т.п. То же для меню. По Area, Title, Id и пр. Иначе макросы фиг знает куда занесёт.
Разум когда-нибудь победит.

Skaramush
Posts: 43
Joined: Mon 16 May, 2011 04:03
Has thanked: 3 times

FIN alt. — Fix Incorrect Names

Post by Skaramush » Wed 13 May, 2015 09:31

Прошу подсказать как добавить в макрос обработку вводимых данных в пользовательском меню. В частности для обработки ввода в конструкциях вида: !?<title>?<init>!

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

FIN alt. — Fix Incorrect Names

Post by Shmuel » Wed 13 May, 2015 10:02

Skaramush wrote: для обработки ввода в конструкциях вида: !?<title>?<init>!
Нужно в Фаре присвоить GUID этому диалогу (конкретно - вызываемому посредством !?<title>?<init>!). После чего этот GUID добавить в макрос в его список GUID'ов.

Skaramush
Posts: 43
Joined: Mon 16 May, 2011 04:03
Has thanked: 3 times

FIN alt. — Fix Incorrect Names

Post by Skaramush » Wed 13 May, 2015 10:33

Shmuel wrote: Нужно в Фаре присвоить GUID этому диалогу
Спасибо за информацию. А как присвоить GUID диалогу?

Shmuel
Posts: 5202
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 148 times

FIN alt. — Fix Incorrect Names

Post by Shmuel » Wed 13 May, 2015 10:51

Skaramush wrote: А как присвоить GUID диалогу?
Это делается в исходниках Фара. Смотрите, например, в чейнжлоге Фара - билд 3868 и ему подобные.

Skaramush
Posts: 43
Joined: Mon 16 May, 2011 04:03
Has thanked: 3 times

FIN alt. — Fix Incorrect Names

Post by Skaramush » Wed 13 May, 2015 11:07

Shmuel wrote:Это делается в исходниках Фара.
И снова спасибо за информацию. Жаль, что без внесения изменений в исходники Фара нельзя решить проблему.

Post Reply

Return to “Полезные макросы и скрипты”