Переопределение символа-разделителя при создании папок

Здесь обсуждается всё, что касается макросов.
User avatar
Taciturn
Posts: 645
Joined: Thu 26 May, 2005 17:14
Location: Санкт-Петербург
Has thanked: 101 times
Been thanked: 36 times
Contact:

Переопределение символа-разделителя при создании папок

Post by Taciturn »

Latest post of the previous page:

Smitis, для масок файлов можно использовать \ вместо запятой. В именах файла такого символа быть не может. Хотя, конечно, получается не очень наглядно.
User avatar
Smitis
Posts: 1730
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 57 times

Переопределение символа-разделителя при создании папок

Post by Smitis »

Taciturn, и везде будет по разному. В путях одни разделители, в масках другие. Запутаешься.
Разум когда-нибудь победит.
User avatar
buniak_a_h
Posts: 4557
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 673 times
Contact:

Переопределение символа-разделителя при создании папок

Post by buniak_a_h »

Taciturn wrote: Tue 31 Jan, 2023 15:56 Smitis, для масок файлов можно использовать \ вместо запятой. В именах файла такого символа быть не может.
А как, например, во временной панели (и, возможно, каких-то панелях с полным путём)? Например, хочется отметить все файлы *\Far Manager\* - как быть?
User avatar
Taciturn
Posts: 645
Joined: Thu 26 May, 2005 17:14
Location: Санкт-Петербург
Has thanked: 101 times
Been thanked: 36 times
Contact:

Переопределение символа-разделителя при создании папок

Post by Taciturn »

buniak_a_h, про временную панель я не подумал, там действительно может быть \ и он там работает.
User avatar
buniak_a_h
Posts: 4557
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 673 times
Contact:

Переопределение символа-разделителя при создании папок

Post by buniak_a_h »

Taciturn wrote: Tue 31 Jan, 2023 15:56 Smitis, для масок файлов можно использовать \ вместо запятой.
Smitis wrote: Tue 31 Jan, 2023 16:12 Taciturn, и везде будет по разному. В путях одни разделители, в масках другие. Запутаешься.
На самом деле правильнее было бы в качестве символа-исключения использовать что-то другое. Например, двухсимвольный ||
User avatar
buniak_a_h
Posts: 4557
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 673 times
Contact:

Переопределение символа-разделителя при создании папок

Post by buniak_a_h »

Плохо, что маски файлов участвуют во многих-многих диалогах (и множество это открытое). Поэтому сформулировать условие преобразования строки затруднительно… Кроме как перечислением есть идеи? Можно привязаться к 7-му элементу DI_EDIT-а (History): если он указан, то должен заканчиваться на Masks
User avatar
Smitis
Posts: 1730
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 57 times

Переопределение символа-разделителя при создании папок

Post by Smitis »

buniak_a_h wrote: Tue 31 Jan, 2023 23:52 На самом деле правильнее было бы в качестве символа-исключения использовать что-то другое. Например, двухсимвольный
Я бы предложил символ | в качестве разделителя, а || для исключений (то, что сейчас делает одиночный символ).
Разум когда-нибудь победит.
User avatar
buniak_a_h
Posts: 4557
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 673 times
Contact:

Переопределение символа-разделителя при создании папок

Post by buniak_a_h »

Smitis, ну да, я так и написал.
User avatar
Smitis
Posts: 1730
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 25 times
Been thanked: 57 times

Переопределение символа-разделителя при создании папок

Post by Smitis »

buniak_a_h wrote: Wed 01 Feb, 2023 14:33 Smitis, ну да, я так и написал.
А, ну да. Что-то заработался. Половину строчки вижу, половину не замечаю... :(
Разум когда-нибудь победит.
User avatar
buniak_a_h
Posts: 4557
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 673 times
Contact:

Переопределение символа-разделителя при создании папок

Post by buniak_a_h »

Вот "развесистый" скрипт:

Проверено для создания папки и отметки файлов; также предусмотрено для ввода/редактирования пользовательского фильтра и копирования/переименования (хотя последнее - лишнее. Но не стал громоздить проверки). Также предусмотрена работа в диалоге, если имя истории элемента ввода оканчивается на Masks (проверялось на диалоге отметки файлов).
Известная проблема: в диалоге отметки/разотметки запоминается не введённое значение, а то, в которое оно преобразуется; именно оно подставляется в качестве инициального при повторном вызове диалога. При этом в историю пишется именно введённое значение! Такое впечатление, что когда писался этот кусок не было флага DIF_USELASTHISTORY, и запоминание последнего введённого значения реализовано "левым" способом (в переменную внутри ФАРа). Как с этим бороться -я не знаю. Мне кажется, это неудобно. Если авторы сюда заходят, и сочтут замечание логичным и справедливым, то, наверное, привести этот диалог к общим правилам просто.
Ну и для удобства скачивания:
MakeFolders.lua
(1.9 KiB) Downloaded 63 times
Last edited by buniak_a_h on Thu 02 Feb, 2023 06:54, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4557
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 673 times
Contact:

Переопределение символа-разделителя при создании папок

Post by buniak_a_h »

Т.к. исправления ошибки (особенности), описанной здесь, я не дождался, то пытаюсь исправить этот глюк макросом. Получился такой скрипт:
MakeFolders.lua
(4.21 KiB) Downloaded 79 times
User avatar
buniak_a_h
Posts: 4557
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 673 times
Contact:

Переопределение символа-разделителя при создании папок

Post by buniak_a_h »

Обращение к Dlg в condition в некоторых случаях вызывает падение ФАРа. Заменён на анализ флагов элемента диалога.
MakeFolders.lua
(4.29 KiB) Downloaded 67 times
User avatar
Taciturn
Posts: 645
Joined: Thu 26 May, 2005 17:14
Location: Санкт-Петербург
Has thanked: 101 times
Been thanked: 36 times
Contact:

Переопределение символа-разделителя при создании папок

Post by Taciturn »

Долгое время я был совершенно счастлив с первой версией viewtopic.php?p=173186#p173186 с первой правкой viewtopic.php?p=173189#p173189, но начиная с 6478 скрипт сломался — начал ко всему добавлять кавычки, в начале и в конце. Я обновляю Far не очень часто (точнее отказываюсь от обновления, если что-то в версии названной релизом меня не устраивает), так что долгое время не замечал проблему и заметил только после перехода на 6600.
Развесистый скрипт, из предыдущего сообщения, работает нормально. Однако, кроме замены разделителя при создании каталогов, мне больше ничего не нужно. Как именно отключить всё остальное? Т.к. масками исключения я пользуюсь ну очень редко, то когда пользуюсь, то мне куда важнее поведение в соответствии со справкой, т.к. про || я просто забуду.

Развесистый скрипт тоже добавят кавычки всегда. Вводим «Test1,Test2» — в истории «"Test1,Test2"» и если выбрать пункт из истории, то получаем два каталога и «""Test1,Test2""» в истории.
Нет ли какой-нибудь возможно сделать так, чтобы всё работало как в 6477 и раньше или это надо жаловаться на баг в Far'е?
Last edited by Taciturn on Fri 05 Dec, 2025 18:46, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Переопределение символа-разделителя при создании папок

Post by zg »

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
User avatar
Taciturn
Posts: 645
Joined: Thu 26 May, 2005 17:14
Location: Санкт-Петербург
Has thanked: 101 times
Been thanked: 36 times
Contact:

Переопределение символа-разделителя при создании папок

Post by Taciturn »

zg wrote: Sat 06 Dec, 2025 01:33 а вчём вы видите баг в фаре?
Если читать только заголовок, то в 6478 скрипт сломался после «1. gh-945: Edit box histories should not be saved on cancelled DN_CLOSE.», т.е. после изменения история не должна была сохраняться после определённого события, а начала. Впрочем почему история не сохранялась до изменения, а начала после я не понимаю, поэтому и спросил, а не побежал сразу жаловаться.

В целом с вашим скриптом всё работает хорошо, но удалось добиться стабильного падения Far'а.
  1. Far30b6612.x64.20251206.7z, из плагинов только LuaMacro. Никаких настроек. W7-64 или W11-64 со всеми апдейтами.
  2. Создаём каталог C:\1, в нём файл 2.
  3. Создаём каталог «Test 1,Test 2», ставим «Process multiple names».
  4. Удаляем созданный «Test 1,Test 2», снова открываем F7 Make folder, по Ctrl+Down выбираем из истории «Test 1,Test 2», жмём Enter, получаем дамп.
    https://taciturn-shadow.spb.ru/far/Far_ ... 62_2404.7z
Насколько я понял важно выбирать пункт из истории, чтобы выскочило предложение дополнения и чтобы стояла галка «Process multiple names».
Last edited by Taciturn on Sat 06 Dec, 2025 07:19, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

Переопределение символа-разделителя при создании папок

Post by zg »

Taciturn wrote: Sat 06 Dec, 2025 07:18т.е. после изменения история не должна была сохраняться после определённого события, а начала.
наоборот, до 6478 история сохранялась даже при неудачной попытке закрытия диалога, после — только после удачной.
Taciturn wrote: Sat 06 Dec, 2025 07:18но удалось добиться стабильного падения 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)->
    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
Post Reply

Return to “Обсуждение макросов”