История команд, запущенных из текущего каталога

Здесь выкладываются готовые к использованию макросы и скрипты.
fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

История команд, запущенных из текущего каталога

Postby fml2 » Wed 23 Oct, 2013 18:27

Предлагаемый вашему вниманию макрос показывает историю команд, запущенных из текущего каталога (см. также хотелку на Мантис: http://bugs.farmanager.com/view.php?id=2208). Т.е., по сути, это история команд с наложенным фильтром "показывать только те, что были запущены из текущего каталога".

Минимальная требуемая сборка -- Far 3, 3713.

Внимание: записи, помещенные в историю команд до установки сборки 3713, макросом показаны не будут, т.к. для них в истории команд еще не сохранялся каталог запуска команды.

Установка
Файл с макро нужно поместить в каталог %farprofile%\Macros\scripts

Использование
Для вызова макроса нажмите Ctrl+Shift+F8. Это кнопкосочетание может быть изменено -- см. самый конец файла с макро. (Alt+Shift+F8 было бы, наверное, более логично с точки зрения уже имеющихся кнопкосочетаний для вызова истории команд, но лично мне Ctrl+Shift+F8 нажимать проще.)

Во время отображения списка команд действуют следующие клавиши:
Ctrl+F1: показать список возможных действий и соответствующих кнопкосочетаний
Ctrl+F3: сортировать список по команде (повторное нажатие сортирует в обратном порядке). Индикатор в левом верхнем углу: "C".
Ctrl+F4: сортировать список по дате запуска (повторное нажатие сортирует в обратном порядке). Индикатор в левом верхнем углу: "T". (Для сортировки по дате я вначале хотел использовать Ctrl+F5, но Far перехватывает это сочетание и обрабатывает его сам)
Enter: запустить выбранную команду
Ctrl+Enter: поместить выбранную команду в командную строку, но не запускать ее
Shift+Enter: запустить выбранную команду в отдельном окне
Del: удалить выбранную команду из истории
Esc: погасить список и ничего не делать

Изначально комады сортируются по возрастанию по дате запуска, т.е. последние запущенные команды находятся снизу.

Если фильтрация по текущему каталогу будет встроена в стандартную историю или в плагины "AltHistory" или "MoreHistory" (тогда появится возможность поиска по фрагменту), то этот макрос станет излишним.

Attachments
CmdsFromCurDir.zip
(2.59 KiB) Downloaded 110 times
Last edited by fml2 on Fri 21 Mar, 2014 16:32, edited 9 times in total.

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Как читать историю команд из Lua-макро?

Postby Shmuel » Wed 23 Oct, 2013 19:23

fml2 wrote:Хочу на досуге попробовать реализовать идею, описанную тут: http://bugs.farmanager.com/view.php?id=2208 Пробовать думаю с помощью макро на Lua.

Не подскажете, как из макро прочитать историю запущенных команд, включая также дополнительную информацию (если таковая имеется), сохраненную с каждой командой в истории.

  1. local settings = far.CreateSettings("far")
  2. local items = settings:Enum("FSSF_HISTORY_CMD")
  3. settings:Free()
  4.  
  5. far.Message("Total items: "..#items)
  6.  
  7. -- inspect the first item
  8. for k,v in pairs(items[1]) do
  9.   far.Show(k, v, type(v))
  10. end

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

Re: Как читать историю команд из Lua-макро?

Postby fml2 » Thu 24 Oct, 2013 19:25

Спасибо, Shmuel!

А где эта история хранится физически? В каких-то таблицах SQLite? Или где? Спрашиваю просто из интереса, т.к. приведенный фрагмент действительно читает историю.

Теперь бы еще сохранять в истории каталог, из которого была запущена команда... (как это сделать, вроде понятно и было написано тут: http://bugs.farmanager.com/view.php?id=2208#c10369 Но у меня сейчас нету среды компиляции).

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Как читать историю команд из Lua-макро?

Postby Shmuel » Thu 24 Oct, 2013 19:40

fml2 wrote:А где эта история хранится физически? В каких-то таблицах SQLite? Или где?

Если не ошибаюсь, история хранится в %farlocalprofile%\history.db.

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

Re: Как читать историю команд из Lua-макро?

Postby fml2 » Tue 12 Nov, 2013 00:10

Вот, написал макро на Луа. По-моему, работает. Может, кто посмотрит и скажет, что там можно сделать лучше? Лично мне бы хотелось реализовать фильтрацию и сортировку прямо через SQLite, но только я не знаю, как это делается.

Чтобы этот макрос работал, нужно сделать изменение в коде Фар, а именно в файле cmdline.cpp заменить вызов Global->CtrlObject->CmdHistory->AddToHistory(strStr); на Global->CtrlObject->CmdHistory->AddToHistory(strStr, 0, nullptr, nullptr, strCurDir.data(), false);


Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Как читать историю команд из Lua-макро?

Postby Shmuel » Tue 12 Nov, 2013 08:33

fml2 wrote:Вот, написал макро на Луа. По-моему, работает. Может, кто посмотрит и скажет, что там можно сделать лучше?

В целом нормально. В заключительной части есть ошибка и излишества, правильнее сделать так (не тестировалось):

Если поместите виш на Мантис, шансы на принятие изменения в Фаре несколько повысятся.

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

Re: Как читать историю команд из Lua-макро?

Postby fml2 » Tue 12 Nov, 2013 08:50

Shmuel wrote:правильнее сделать так (не тестировалось)


А разве это правильно? В пояснении к функции far.Menu (luafar_manual.chm) написано:
The second return value (Position) does not necessarily correspond to the position of the menuitem that the user have chosen

Я это понимаю так, что лучше ориентироваться на первый возвращаемый параметр. К тому же это "красивее", на мой взгляд: зачем доставать элемент по индексу, если он есть "прямо так"? Тогда и SelectedIndex не нужен. Он лишний, я его ввел по аналогии с RecentScreens. Но там он необходим, а тут не нужен. А откуда в Item берется поле BreakKey? Это недокументированная фича?

Shmuel wrote:Если поместите виш на Мантис, шансы на принятие изменения в Фаре несколько повысятся.

Запись на мантис есть уже давно (см. первое сообщение в этой ветке), но особого интереса у разработчиков она, похоже, не вызывает. Хотя мне бы эта функция сильно облегчила бы жизнь. До того, что я даже взялся писать макро :-)

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Как читать историю команд из Lua-макро?

Postby Shmuel » Tue 12 Nov, 2013 08:59

Поскольку и far.Menu, и его описание писал ваш покорный слуга, то он не стал бы делать замечания зря. :)

Первое возвращаемое значение при закрытии меню с помощью BreakKey - это не элемент массива menuItems, а элемент массива breakKeys.

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

Re: Как читать историю команд из Lua-макро?

Postby fml2 » Tue 12 Nov, 2013 09:16

Shmuel wrote:Поскольку и far.Menu, и его описание писал ваш покорный слуга, то он не стал бы делать замечания зря. :)
Ой! :-)

Shmuel wrote:Первое возвращаемое значение при закрытии меню с помощью BreakKey - это не элемент массива menuItems, а элемент массива breakKeys.
А-а-а, Семен Семеныч! Теперь понятно как оно работает. А то я ломал голову, как это action попадает в item. Еще бы это в manual написать... А то между строк читать приходится.

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Как читать историю команд из Lua-макро?

Postby Shmuel » Tue 12 Nov, 2013 09:27

Перечитал описание far.Menu - действительно местами оно вводит в заблуждение.
Исправил и несколько сократил.

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

Re: Как читать историю команд из Lua-макро?

Postby fml2 » Tue 12 Nov, 2013 10:18

А как насчет этого: "Лично мне бы хотелось реализовать фильтрацию и сортировку прямо через SQLite"? Сортировку, может, лучше оставить макро, ведь ее можно проводить по разным критериям (команда, дата вызова), но фильтрацию хорошо бы реализовать через SQLite.

Shmuel
Posts: 4997
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 132 times

Re: Как читать историю команд из Lua-макро?

Postby Shmuel » Tue 12 Nov, 2013 10:43

fml2 wrote:А как насчет этого: "Лично мне бы хотелось реализовать фильтрацию и сортировку прямо через SQLite"?

1. Shmuel @ Чтение базы данных Фара (sqlite)
2. http://lua.sqlite.org/
Есть ещё много чего - гугл вам в помощь.

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

Re: Как читать историю команд из Lua-макро?

Postby fml2 » Tue 12 Nov, 2013 11:02

Нет, это слишком муторно. Я думал, это можно как-то через фаровское API, т.е. что Фар (settings API) позволяет сделать какие-то вызовы, которые потом переводятся в "where" в SQLite. Если нет, то пусть уж лучше остается как есть. И спасибо за ответы и ссылки!

fml2
Posts: 490
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 5 times

Re: Как читать историю команд из Lua-макро?

Postby fml2 » Thu 14 Nov, 2013 14:58

Вот, еще подправил макрос и навесил его на Ctrl+Shift+F8 (свободная кнопка, удобно нажимать на клавиатуре, присутствует F8). Но чтобы это работало, надо чуть-чуть подправить Фар (сохранять каталог запуска команды в истории). Уважаемые разработчики, может, все же включить это в Фар? Пусть эта функция управляется опцией и будет неактивна по умолчанию. Но чтобы это было возможно. А?


2useven10
Posts: 2900
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 76 times

Re: Как читать историю команд из Lua-макро?

Postby 2useven10 » Thu 14 Nov, 2013 16:05

Простой патч, который Вы просите сделать, скорее всего приведёт к тому, что история сохраняться будет, но из 2-команд dir в разных каталогах сохранена будет только последняя (если опции одинаковые).
Это то о чём Вы мечтаете?

User avatar
DrKnS
Posts: 4500
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 110 times
Contact:

Re: Как читать историю команд из Lua-макро?

Postby DrKnS » Thu 14 Nov, 2013 16:16

История искаропки должна работать как сейчас.
Однако, можно сохранять каталог в бд и отдавать желающим через api, а дальше они уже как-то разберутся.


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

Who is online

Users browsing this forum: No registered users and 1 guest