Latest post of the previous page:
Smitis, для масок файлов можно использовать \ вместо запятой. В именах файла такого символа быть не может. Хотя, конечно, получается не очень наглядно.Переопределение символа-разделителя при создании папок
- buniak_a_h
- Posts: 4557
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 673 times
- Contact:
Переопределение символа-разделителя при создании папок
А как, например, во временной панели (и, возможно, каких-то панелях с полным путём)? Например, хочется отметить все файлыTaciturn wrote: Tue 31 Jan, 2023 15:56 Smitis, для масок файлов можно использовать \ вместо запятой. В именах файла такого символа быть не может.
*\Far Manager\* - как быть? - Taciturn
- Posts: 645
- Joined: Thu 26 May, 2005 17:14
- Location: Санкт-Петербург
- Has thanked: 101 times
- Been thanked: 36 times
- Contact:
Переопределение символа-разделителя при создании папок
buniak_a_h, про временную панель я не подумал, там действительно может быть \ и он там работает.
- buniak_a_h
- Posts: 4557
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 673 times
- Contact:
Переопределение символа-разделителя при создании папок
Taciturn wrote: Tue 31 Jan, 2023 15:56 Smitis, для масок файлов можно использовать \ вместо запятой.
На самом деле правильнее было бы в качестве символа-исключения использовать что-то другое. Например, двухсимвольныйSmitis wrote: Tue 31 Jan, 2023 16:12 Taciturn, и везде будет по разному. В путях одни разделители, в масках другие. Запутаешься.
||- buniak_a_h
- Posts: 4557
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 673 times
- Contact:
Переопределение символа-разделителя при создании папок
Плохо, что маски файлов участвуют во многих-многих диалогах (и множество это открытое). Поэтому сформулировать условие преобразования строки затруднительно… Кроме как перечислением есть идеи? Можно привязаться к 7-му элементу DI_EDIT-а (History): если он указан, то должен заканчиваться на Masks
- Smitis
- Posts: 1730
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 25 times
- Been thanked: 57 times
Переопределение символа-разделителя при создании папок
Я бы предложил символ | в качестве разделителя, а || для исключений (то, что сейчас делает одиночный символ).buniak_a_h wrote: Tue 31 Jan, 2023 23:52 На самом деле правильнее было бы в качестве символа-исключения использовать что-то другое. Например, двухсимвольный
Разум когда-нибудь победит.
- buniak_a_h
- Posts: 4557
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 673 times
- Contact:
- Smitis
- Posts: 1730
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 25 times
- Been thanked: 57 times
Переопределение символа-разделителя при создании папок
А, ну да. Что-то заработался. Половину строчки вижу, половину не замечаю...
Разум когда-нибудь победит.
- buniak_a_h
- Posts: 4557
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 673 times
- Contact:
Переопределение символа-разделителя при создании папок
Вот "развесистый" скрипт:
Проверено для создания папки и отметки файлов; также предусмотрено для ввода/редактирования пользовательского фильтра и копирования/переименования (хотя последнее - лишнее. Но не стал громоздить проверки). Также предусмотрена работа в диалоге, если имя истории элемента ввода оканчивается на
Известная проблема: в диалоге отметки/разотметки запоминается не введённое значение, а то, в которое оно преобразуется; именно оно подставляется в качестве инициального при повторном вызове диалога. При этом в историю пишется именно введённое значение! Такое впечатление, что когда писался этот кусок не было флага DIF_USELASTHISTORY, и запоминание последнего введённого значения реализовано "левым" способом (в переменную внутри ФАРа). Как с этим бороться -я не знаю. Мне кажется, это неудобно. Если авторы сюда заходят, и сочтут замечание логичным и справедливым, то, наверное, привести этот диалог к общим правилам просто.
Ну и для удобства скачивания:
Проверено для создания папки и отметки файлов; также предусмотрено для ввода/редактирования пользовательского фильтра и копирования/переименования (хотя последнее - лишнее. Но не стал громоздить проверки). Также предусмотрена работа в диалоге, если имя истории элемента ввода оканчивается на
Masks (проверялось на диалоге отметки файлов).Известная проблема: в диалоге отметки/разотметки запоминается не введённое значение, а то, в которое оно преобразуется; именно оно подставляется в качестве инициального при повторном вызове диалога. При этом в историю пишется именно введённое значение! Такое впечатление, что когда писался этот кусок не было флага DIF_USELASTHISTORY, и запоминание последнего введённого значения реализовано "левым" способом (в переменную внутри ФАРа). Как с этим бороться -я не знаю. Мне кажется, это неудобно. Если авторы сюда заходят, и сочтут замечание логичным и справедливым, то, наверное, привести этот диалог к общим правилам просто.
Ну и для удобства скачивания:
Last edited by buniak_a_h on Thu 02 Feb, 2023 06:54, edited 1 time in total.
- buniak_a_h
- Posts: 4557
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 673 times
- Contact:
Переопределение символа-разделителя при создании папок
Т.к. исправления ошибки (особенности), описанной здесь, я не дождался, то пытаюсь исправить этот глюк макросом. Получился такой скрипт:
- buniak_a_h
- Posts: 4557
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 242 times
- Been thanked: 673 times
- Contact:
Переопределение символа-разделителя при создании папок
Обращение к Dlg в condition в некоторых случаях вызывает падение ФАРа. Заменён на анализ флагов элемента диалога.
- Taciturn
- Posts: 645
- Joined: Thu 26 May, 2005 17:14
- Location: Санкт-Петербург
- Has thanked: 101 times
- Been thanked: 36 times
- Contact:
Переопределение символа-разделителя при создании папок
Долгое время я был совершенно счастлив с первой версией viewtopic.php?p=173186#p173186 с первой правкой viewtopic.php?p=173189#p173189, но начиная с 6478 скрипт сломался — начал ко всему добавлять кавычки, в начале и в конце. Я обновляю Far не очень часто (точнее отказываюсь от обновления, если что-то в версии названной релизом меня не устраивает), так что долгое время не замечал проблему и заметил только после перехода на 6600.
Развесистый скрипт, из предыдущего сообщения, работает нормально. Однако, кроме замены разделителя при создании каталогов, мне больше ничего не нужно. Как именно отключить всё остальное? Т.к. масками исключения я пользуюсь ну очень редко, то когда пользуюсь, то мне куда важнее поведение в соответствии со справкой, т.к. про || я просто забуду.
Развесистый скрипт тоже добавят кавычки всегда. Вводим «Test1,Test2» — в истории «"Test1,Test2"» и если выбрать пункт из истории, то получаем два каталога и «""Test1,Test2""» в истории.
Нет ли какой-нибудь возможно сделать так, чтобы всё работало как в 6477 и раньше или это надо жаловаться на баг в Far'е?
Развесистый скрипт, из предыдущего сообщения, работает нормально. Однако, кроме замены разделителя при создании каталогов, мне больше ничего не нужно. Как именно отключить всё остальное? Т.к. масками исключения я пользуюсь ну очень редко, то когда пользуюсь, то мне куда важнее поведение в соответствии со справкой, т.к. про || я просто забуду.
Развесистый скрипт тоже добавят кавычки всегда. Вводим «Test1,Test2» — в истории «"Test1,Test2"» и если выбрать пункт из истории, то получаем два каталога и «""Test1,Test2""» в истории.
Нет ли какой-нибудь возможно сделать так, чтобы всё работало как в 6477 и раньше или это надо жаловаться на баг в Far'е?
Last edited by Taciturn on Fri 05 Dec, 2025 18:46, edited 1 time in total.
- zg
- zero-gravity
- Posts: 6207
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 206 times
- Contact:
Переопределение символа-разделителя при создании папок
а вчём вы видите баг в фаре?Taciturn wrote: Fri 05 Dec, 2025 18:38Нет ли какой-нибудь возможно сделать так, чтобы всё работало как в 6477 и раньше или это надо жаловаться на баг в Far'е?
а сделать можно как-то так:
Code: Select all
F=far.Flags
dlgId=win.Uuid far.Guids.MakeFolderId
EditIdx=3
ChkBoxIdx=9
Event
id:'d7e5bd30-1d2c-4d5d-906a-d0114ceaa4de'
group:'DialogEvent'
action:(event,param)->
if event==F.DE_DLGPROCEND and param.Msg==F.DN_CLOSE
dlg=param.hDlg
id=dlg\send F.DM_GETDIALOGINFO
id=id and id.Id or ""
if id==dlgId and 0<dlg\send F.DM_GETCHECK,ChkBoxIdx
data=far.GetDlgItem dlg,EditIdx
data[9]=bit64.bor data[9],F.DIF_MANUALADDHISTORY
dlg\send F.DM_ADDHISTORY,EditIdx,data[10]
res={}
for w in data[10]\gmatch"[^|]+" do res[#res+1]='"'..w..'"'
data[10]=table.concat res,';'
far.SetDlgItem dlg,EditIdx,data- Taciturn
- Posts: 645
- Joined: Thu 26 May, 2005 17:14
- Location: Санкт-Петербург
- Has thanked: 101 times
- Been thanked: 36 times
- Contact:
Переопределение символа-разделителя при создании папок
Если читать только заголовок, то в 6478 скрипт сломался после «1. gh-945: Edit box histories should not be saved on cancelled DN_CLOSE.», т.е. после изменения история не должна была сохраняться после определённого события, а начала. Впрочем почему история не сохранялась до изменения, а начала после я не понимаю, поэтому и спросил, а не побежал сразу жаловаться.
В целом с вашим скриптом всё работает хорошо, но удалось добиться стабильного падения Far'а.
- Far30b6612.x64.20251206.7z, из плагинов только LuaMacro. Никаких настроек. W7-64 или W11-64 со всеми апдейтами.
- Создаём каталог C:\1, в нём файл 2.
- Создаём каталог «Test 1,Test 2», ставим «Process multiple names».
- Удаляем созданный «Test 1,Test 2», снова открываем F7 Make folder, по Ctrl+Down выбираем из истории «Test 1,Test 2», жмём Enter, получаем дамп.
https://taciturn-shadow.spb.ru/far/Far_ ... 62_2404.7z
Last edited by Taciturn on Sat 06 Dec, 2025 07:19, edited 1 time in total.
- zg
- zero-gravity
- Posts: 6207
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 206 times
- Contact:
Переопределение символа-разделителя при создании папок
наоборот, до 6478 история сохранялась даже при неудачной попытке закрытия диалога, после — только после удачной.Taciturn wrote: Sat 06 Dec, 2025 07:18т.е. после изменения история не должна была сохраняться после определённого события, а начала.
как всё сложно в этом вашем фаре. попробуйте так:
Code: Select all
F=far.Flags
dlgId=win.Uuid far.Guids.MakeFolderId
EditIdx=3
ChkBoxIdx=9
Event
id:'d7e5bd30-1d2c-4d5d-906a-d0114ceaa4de'
group:'DialogEvent'
action:(event,param)->
dlg=param.hDlg
id=->
id=dlg\send F.DM_GETDIALOGINFO
id and id.Id or ""
if event==F.DE_DLGPROCEND and param.Msg==F.DN_CLOSE and dlgId==id!
text=dlg\send F.DM_GETTEXT,EditIdx
dlg\send F.DM_ADDHISTORY,EditIdx,text
if 0<dlg\send F.DM_GETCHECK,ChkBoxIdx
res={}
for w in text\gmatch"[^|]+" do res[#res+1]='"'..w..'"'
text=table.concat res,';'
dlg\send F.DM_SETTEXT,EditIdx,text
elseif event==F.DE_DLGPROCINIT and param.Msg==F.DN_INITDIALOG and dlgId==id!
data=far.GetDlgItem dlg,EditIdx
data[9]=bit64.bor data[9],F.DIF_MANUALADDHISTORY
far.SetDlgItem dlg,EditIdx,data