[О блоге] [наверх] [пред] [2021-02-02 21:30:56+03:00] [77ede978e9c24bc8e68ee4e900b9dc5bf94b29f6]
Темы: [tip][tmux][zsh]

Быстрый выбор файла

Наткнулся на Facebook PathPicker утилиту:
https://github.com/facebook/pathpicker/ (fpp)
Давно хотел что-то похожее, но сделал только жалкое подобие в виде qq:
5d2d9f386d547b8e436829db5c6533b17feffe8e. Утилита временами странно себя
ведёт при выборе. Из коробки не работает с zsh, ибо shell скрипты для
неё писал человек явно не сведущий в shell-е совсем. В целом штука
понравилась: захотел выбрать несколько файлов -- вызвал через tmux её
(https://github.com/tmux-plugins/tmux-fpp -- тоже кстати из коробки не
работающий скрипт, бл@, ну bash не стоит на куче систем из коробки, с
чего вы взяли!? да и не используют его опытные пользователи)
интерактивно выбрал, а дальше либо в редактор, либо команду набирай. Но
при выборе всего буфера, всего окна -- она ощутимо медленно работает.
Мне приходится ждать пока она отпарсит окно. Да и ввод команды там не
самый удобный. git add -- ещё терпимо. Но что-то сложнее уже хотелось бы
в shell-е, а результат этой команды добавить к уже набранному тексту.

Нашёл ещё ряд утилит которые интерактивно позволяют что-то выбирать:
* https://github.com/mooz/percol -- не пробовал, ибо на Python, поэтому
  не хотелось бы (скорость)
* https://github.com/peco/peco -- тоже самое, только на Go. Попробовал
  -- не работает. Точнее вывод в окне показывает, так сказать, первый
  кадр, но вообще не реагирует ни на какие нажатия -- делаю kill.
* https://github.com/mptre/pick -- очень минималистичная утилита на Си.
  Работает. Но выбирает только один элемент. Для выбора нескольких
  файлов для git add (например) не подойдёт
* https://github.com/junegunn/fzf -- fzf вообще известнейшая штука, но
  как-то у меня не срастается с ней дружелюбие. Да и несколько элементов
  не выбрать
* https://github.com/robbiev/numberwang -- среди вывода просто ищет всё
  что похоже на файлы и даёт номерами выбрать интересующие, копируя
  результат в буфер обмена. Никакого красивого интерактива, очень всё
  примитивно, но... вообще выглядело именно как то что мне надо.
  Однако... на большом выводе (буфер tmux) он жутко тормозит! Да и когда
  файлов много, то хотелось бы поплотнее умещать в несколько столбцов,
  чтобы не прокручивать экран
* https://github.com/edi9999/path-extractor -- штука которая занимается
  только выборкой файлов из ввода. Самое главное: поддерживает
  "файл:строка" формат. В отличии от numberwang-а, работает очень
  быстро. Остаётся только заиметь для неё TUI какой-нибудь

Но мне же по сути достаточен выхлоп numberwang, только бы в колонки в
его. Помню что print команда из zsh, который у меня и так стоит, умеет
делать в несколько колонок. Поэтому я взял и написал на zsh (один из
первых опытов программирования именно на нём) отображение и спрашивание
вариантов выбора:
http://www.git.stargrave.org/?p=dotfiles.git;a=commitdiff;h=62bccf2a97581ed475dd46068621d0dffa21d5c9
Ну и синтегрировал с tmux-ом. Теперь могу где угодно нажать P-o,
отобразиться выбор "файлов", ввожу их номера, enter, и на 20 секунд оно
будет в буфере обмена (если программа полностью закроется, то и у буфера
обмена не будет источника), и я могу вставить в командную строку или ещё
куда результат.

Для git команд это точно будет полезно. А вот выбирать одиночный файл
пока выходит не супер быстро, ибо сырое представление файлов отличается
от разукрашенного и структурированного и не сразу находишь нужный файл,
чтобы ввести его номер. Возможно нужно сделать отдельный popup с выбором
единичного файла на основе pick утилиты. А вообще разукрашенный вывод
fpp, который внешне полностью похож на входные данные -- действительно
помогает для восприятия (только плохо и медленно работает). Может всё же
напишу на Go fpp аналог, тем более что самая сложная часть по
выпарсиванию имён файлов уже есть готовая.

    [оставить комментарий]