Удаление пунктов истории с использованием SettingsControl

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Удаление пунктов истории с использованием SettingsControl

Post by buniak_a_h »

Я сделал маленький скрипт, выводящий историю команд:
  1. -- История команд
  2.  
  3. local obj = far.CreateSettings('far')
  4.  
  5. local enum = obj:Enum(far.Flags.FSSF_HISTORY_CMD)
  6.  
  7. --Поля: Lock, Time, File, Name, Param, PluginId
  8.  
  9. local names = {}
  10.  
  11. for _,v in ipairs(enum) do names[#names+1] = v.Name end
  12.  
  13. --return names
  14.  
  15. Menu.Show(table.concat(names,'\n'))
  16.  
  17. obj:Free()
Теперь хотелось удалить те пункты, которые начинаются с @.
После строки с Menu.Show добавляю удаление:
  1. … … …
  2.  
  3. for _.v in ipairs(names) do
  4.  
  5.  if v:sub(1,1) == '@' then
  6.  
  7.   obj:Delete(far.Flags.FSSF_HISTORY_CMD, v) -- не работает!!!
  8.  
  9.  end
  10.  
  11. end
  12.  
  13. obj:Free()
По описанию у obj:enum и obj:Delete первый параметр - Root (флаг). Но почему-то obj:Delete не срабатывает (возвращает false). Более того! Если не указать второй параметр (Name:string), то по описанию должны быть удалены все элементы. Но… Тоже не работает. То ли я чего-то не понимаю (основы!), то ли в мануале для LuaFAR3 чего-то нужного нету. Не напишете, как можно из истории удалить строку? Не используя SQLite!
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Удаление пунктов истории с использованием SettingsControl

Post by Shmuel »

buniak_a_h wrote: Thu 24 Nov, 2022 14:02 Не напишете, как можно из истории удалить строку? Не используя SQLite!
Мне кажется, что удаление из истории Фара с помощью API Settings не предусмотрено.
Если ошибаюсь, пусть zg меня поправит.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Удаление пунктов истории с использованием SettingsControl

Post by buniak_a_h »

Shmuel wrote: Thu 24 Nov, 2022 18:09 удаление из истории Фара с помощью API Settings не предусмотрено
  1. Опять неполнота функционала? Получить список можно, а удалить - нельзя?
  2. Кстати, из истории диалогов при помощи API Settings можно удалить любое вхождение. Примерно вот так:

    Code: Select all

    local subkey = obj:OpenSubkey(0, key) -- key - имя истории
    obj:Delete(subkey, DelString)
    
    Увы, ни OpenSubkey, ни CreateSubkey для истории команд не открывают/создают Subkey. Хотя, вроде, история - и есть история. несимметричность какая-то… :twisted: :bang:
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Удаление пунктов истории с использованием SettingsControl

Post by zg »

Shmuel wrote: Thu 24 Nov, 2022 18:09Мне кажется, что удаление из истории Фара с помощью API Settings не предусмотрено.
так и есть.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Удаление пунктов истории с использованием SettingsControl

Post by buniak_a_h »

zg wrote: Sat 26 Nov, 2022 23:44так и есть.
Грустно. Специально заблокирована такая возможность, или просто недоделка?
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Удаление пунктов истории с использованием SettingsControl

Post by zg »

buniak_a_h wrote: Sun 27 Nov, 2022 03:44 Специально заблокирована такая возможность, или просто недоделка?
специально. настройки нельзя менять из кода.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Удаление пунктов истории с использованием SettingsControl

Post by buniak_a_h »

zg wrote: Sun 27 Nov, 2022 13:55 специально. настройки нельзя менять из кода
  1. Вы мне как-то это уже писали. Но... Это - не запрет, это просто усложнение. Никто не запрещает делать это же через KeyStroke
  2. История команд-папок-просмотра/редактирования - это всё же не настройка. Это ближе к истории диалогов (для элементов DI_EDIT), но там-то разрешается удалять строки! Пример кода я приводил… Дискриминация какая-то… В одной истории можно удалять, а в другой - нет.
  3. А уж имея SQLite вообще нет проблем.
История вопроса восходит к бывшей замечательной возможности не вносить в историю команды, начинающиеся с @. Эта возможность была в 1-м ФАРе, по слухам - во втором. А вот из третьего её исключили. Пришлось делать автостартующий макрос на базе SQLite для очистки истории. Интересующимся
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Удаление пунктов истории с использованием SettingsControl

Post by zg »

buniak_a_h wrote: Sun 27 Nov, 2022 14:15 Это ближе к истории диалогов (для элементов DI_EDIT), но там-то разрешается удалять строки! Пример кода я приводил…
напомните, о чём речь.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Удаление пунктов истории с использованием SettingsControl

Post by buniak_a_h »

zg wrote: Sun 27 Nov, 2022 17:13о чём речь.
Элемент DI_EDIT с флагом DIF_HISTORY и непустым 7-м полем (History). Именованная история введённых в поле значений. В этой истории легко можно удалить значение (у меня есть такие скрипты). Хотя с идеологической точки зрения это - тоже история. Ну, правда, в операторе far.CreateSettings параметр GUID не 'far', а nil (видимо, имеется в виду плагин LuaMacro). В остальном удаление из истории работает
Post Reply

Return to “Нужна помощь”