Как вы Как можно было догадаться по названию, githud — это заголовок для командной строки, который будет отображать информацию git. Основное внимание уделяется информации и производительности.
Если вы так же без ума, как и я, по поводу своего запроса, вы можете проверить мой несколько связанный projectenvstatus
См. подробное описание элемента за элементом, чтобы узнать, что вы видите
Примечание. этот пример взят из терминала iTerm2 OSX с пользовательскими цветами из темы Solarized Dark
- Почему githud?
- Установить
- Настройка
- Конфигурация
- Общие сведения о приглашении githud
- Преимущества
- Тесты
- Спасибо
Почему githud?
Несколько месяцев назад я был в восторге (середина 2015) быгит-радар. Git-radar делает то же самое, что и githud, но реализован в оболочке. Хотя я какое-то время отлично провел время, я понял, что в моей конкретной настройке git-radar вводил видимую задержку (> 200 мс, слишком длинную для меня) при отображении myprompt.
В то время я искал упражнение для реализации в Haskell, поэтому я создал githud
Install
Каким бы способом вы не установили githud, не забыть завершить установку
Mac OSX с пивом
(поддерживается в каждом выпуске)
- связать мой кран
brew tap gbataille/homebrew-gba
- установить githud
brew install githud
Бинарные пакеты в Linux
Ищете участника, который предоставит рецепт (в форме действий github?)
С Cabal и Nix
(Используется в процессе разработки, поэтому поддерживается и обновляется)
Конфигурация Nix поддерживается в соответствии с файлом cabal. Поэтому, чтобы обязательно использовать совместимую версиюghc и соответствующие библиотеки, просто
nix-shellcabal v2-install
With Stack
(Не поддерживается. Dev использует Nix + Cabal. Не стесняйтесь вносить свой вклад)
Stack — это пакет haskell управляющий делами. 1 команду install можно найти здесь
githud доступен для взлома, но некоторые зависимости должны быть объяснены. Вам нужно добавить следующее в extra-deps в вашем файле stack.yml
extra-deps: - daemons-0.3.0- network-2.8.0.1
тогда вы можете запустить
stack install githud
With Cabal
(Не поддерживается. Dev происходит с использованием Nix + Cabal. Не стесняйтесь вносить свой вклад)
githud доступен для взлома. Поэтому просто загрузите его как обычно
cabal v2-install exe: githud
Затем вы можете обновить свой путь, включив в него вашу установку каталог (обычно ~/.cabal/bin
) или скопируйте установленный исполняемый файл в общее расположение, например /usr/local/bin
Настройка
Если вы просто вызовете исполняемый файл githud, вы получите краткий статус вашего репозитория. Он предназначен для вызова каждый раз, когда вы показываете свое приглашение. Поэтому вы хотите поместить его в свою переменную env PS1.
Оболочки имеют необычный способ управления подсказками, когда вы делаете такие вещи, как автозаполнение и тому подобное. Для этого ему необходимо знать размер приглашения. Специальные символы, используемые для обозначения цвета приглашения, должны быть окружены специальной разметкой, чтобы они не учитывались.
GitHUD знает, как с этим справиться. . Все, что вам нужно сделать, это запустить программу с параметром в зависимости от выбранной оболочки, и эти специальные символы будут использоваться в выводе
Bash
githud bash
Например, в моем файле .bashrc
с исполняемым файлом в /usr/local/bin/ githud
, у меня есть определение подсказки, которое выглядит так:
export PS1 = " [ 033 [0; 37m ] [ A] [ 033 [0m ] [ 033 [0; 36m ] u [ 033 [0m ] W [ 033 [0; 32m ] $ (/usr/local/bin/githud bash ) [ 033 [0m ] $ "
(в нем гораздо больше вещей, включая текущий каталог, час и подсказка ‘$’ завершающий символ)
ZSH
githud zsh
Примечание : эти специальные символы % {
%}
интерпретируются и скрываются только тогда, когда zsh отображает приглашение . Если вы просто вызовете githud с этим параметром ‘zsh’ из командной строки, вы увидите их в выводе!
Собираем его вместе в моем .zshrc
, у меня есть следующая переменная PROMPT с исполняемым файлом в /usr/local/bin/githud
setopt PROMPT_SUBSTexport PROMPT = '% F {белый}% T% F {голубой}% n% {$ reset_color%} $ (/usr/local/bin/githud zsh) $ '
(в нем гораздо больше вещей, включая текущий каталог, текущего пользователя, час и завершающий символ ‘$’)
Fish
Добавьте этот код в свой файл config.fish.
function fish_prompt set_color white echo -n [(date "+% H:% M")] set_color голубой echo -n (whoami): set_color желтый echo -n (prompt_pwd) set_color $ fish_color_cwd echo -n (/usr/local/bin/githud) set_color normal echo -n ">" конец
TMUX
Предложено @Thermatix
githud tmux
Собираем все вместе в мой .tmux.con f
, у меня есть следующая переменная status-right
с
set -g status-right '# {pane_current_command} # (~/. zsh/bin/githud_status "# {pane_current_path}") '
, что требует небольшого скрипта ~/.zsh/bin/githud_status
#!/usr/local/bin/zsh -fcd $ 1 &&/usr/local/bin/githud zsh
и исполняемый файл в /usr/local/bin/githud
NONE
Предложено @Thermatix
Вы можете получить необработанный текстовый вывод (без специального форматирования), вызвав
githud none
Configuration
Формат подсказки легко настраивается. Настройки по умолчанию дают вам вид и ощущения, как на скриншоте выше, с терминалом, настроенным с цветами темы SolarizedDark.
Чтобы изменить эти цвета или маркеры, используемые в приглашении:
- Скопируйте файл
.githudrc
из этого репозитория в ваш домашний каталог, а затем из вашего домашнего каталога
wget https://raw.githubusercontent.com/gbataille/gitHUD/master/.githudrc
- Отредактируйте файл, раскомментировав некоторые поля и изменив их значения (инструкции включены в файл)
Вы можете контролировать, какой раздел вывода будет отображаться (если вы хотите маскировать) с помощью ключей конфигурации, начинающихся с «show_part _»
Демон сборщика
githud
включает в себя демон-компаньон с именем githudd
. Этот демон запустится при первом вызове githud
и будет работать вечно.
Этот демон просто выполнит git fetch
периодически в последнем репозитории git, в котором выполнялся githud
. В стандартной установке, где вы используете githud
в приглашении, это означает, что демон выполняет git fetch
в последнем посещенном репозитории git.
Файл конфигурации .githudrc
может содержать следующую конфигурацию для демона (значения по умолчанию указаны здесь)
# Будет ли githud запускать background daemonrun_fetcher_daemon = True # Как долго демон спит между циклами githudd_sleep_seconds = 30 # Путь, где будет храниться pid-файл githudd. Должен существовать и быть доступным для текущего # usergithudd_pid_file_path =/usr/local/var/run/githudd.pid # Путь, где будет храниться файл блокировки githudd. Должен существовать и быть доступным для текущего # usergithudd_lock_file_path =/$ TMPDIR/githudd.lock # Путь, где будет храниться файл сокета githudd. Должен существовать и быть доступным для текущего # usergithudd_socket_file_path =/usr/local/var/run/githudd.socket # Путь, где будет храниться файл журнала захвата githudd stdout/stderr. # Журналы Githudd могут быть подробными. Они здесь только для отладки. Не рекомендуется # активировать их # Используйте значение/dev/null, чтобы отключить logsgithudd_log_file_path =/dev/null
Чтобы остановить демон, вы можете просто сделать
pkill githudd
Обратите внимание, что из-за нестабильности демон в настоящее время отключен по умолчанию
На работоспособность демона githudd
указывает красный очаг (сломанный, когда неработоспособен) в начале приглашения (только когда демон активирован)
Понимание githud подсказка
См. объяснение подсказки
Преимущества
- githud работает быстро (в моей системе примерно в два раза быстрее, чем git-radar, время выполнения ниже 100 мс)
- githud легко поддерживать с помощью надлежащего тестового покрытия
Единственным недостатком по сравнению с git-radar является то, что вы нужно скомпилировать его на вашей платформе, а не просто в оболочке.
На Mac это теперь просто, так как я упаковал его как бутылку для пива. Что касается Linux, я жду вкладов, чтобы поместить его в пакеты RPM или DEB 🙂
Benchmarks
Итак, конечно, я хотел проверить, что бы я ни делал был полезен. Итак, я провел несколько тестов с библиотекой Haskell Criterion. Он основан на mysystem и не гарантирует каких-либо характеристик, но дает представление об улучшениях. Вот и:
- git-radar — полная реализация оболочки
- githud-syncIO — с обычными операциями ввода-вывода, выполняемыми по одному
- githud-asyncIO — с асинхронным программированием операций ввода-вывода для повышения производительности.
Здесь вы можете найти подробности.
Для информации: я запускал это на Macbook Pro 13 «, 2014 г., полностью загружен, работает с iTerm 2, tmux, о- my-zsh, внутри репозитория git с некоторой информацией для анализа
Спасибо
Ну, спасибо git-radar за отличную идею и toguibou за обзоры кода