Возможно, вы стали жертвой того же замешательства, что и я. Есть тема Adwaita, а есть libAdwaita.so, которая является частью стандарта gnome -themes -. Эта общая библиотека представляет собой механизм тем Adwaita, который используют приложения GTK, независимо от того, какая тема используется. Предупреждения выдаются из-за отсутствия стандартного пакета gnome -themes -. Попробуйте установить это, чтобы удалить предупреждения.
Если --git-dir
присутствует в командной строке, код завершения распознает его и учитывает при поиске вещей для завершения, если ваш zsh достаточно свежий (≥5.3 ). Это делается путем передачи аргумента в --git-dir
в качестве переменной окружения GIT_DIR
. Например, чтобы завершить удаленные имена после git fetch
, zsh запускает git remote
. После git --git-dir=/some/where
zsh запускает git remote
с GIT_DIR=/some/where
в среде. Так что эта часть работает.
К сожалению, в текущей версии zsh (5.7.1+ )он передает нерасширенный аргумент . Поэтому, если вы напишете что-то вроде git --git-dir=~/repositories/foo.git
, zsh пройдет GIT_DIR=~/repositories/foo.git
, а не GIT_DIR=/home/aaa/repositories/foo.git
.
Код завершения zsh не поддерживает аналогичную --work-tree
.
Я думаю, вы можете исправить проблему расширения с --git-dir
и добавить поддержку --git-worktree
, отредактировав файл _git
и заменив строку
(( $+opt_args[--git-dir] )) && local -x GIT_DIR=$opt_args[--git-dir]
по
(( $+opt_args[--git-dir] )) && local -x GIT_DIR=${(e)~opt_args[--git-dir]}
(( $+opt_args[--work-tree] )) && local -x GIT_WORKTREE=${(e)~opt_args[--work-tree]}
Я не проверял это.
У меня недостаточно мотивации, чтобы публиковать сообщения в списке рассылки zsh, но, пожалуйста, сделайте :это (или его рабочую версию, если она не работает, )будет полезным патчем.
Если вы поместите --git-dir
или --work-tree
в псевдоним, это будет прозрачно :zsh расширяет псевдонимы перед выполнением завершения (при условии, что вы не отключили параметрcomplete_aliases
). Если вы поместите их в функцию или скрипт, это непрозрачно :zsh не увидит их и даже не узнает, что функция или скрипт вызывает git, если вы не скажете ему об этом.
Если вы не можете заставить этот патч работать или не хотите поддерживать свою собственную версию _git
, вы можете обойти это, определив пользовательскую команду с пользовательской функцией завершения, которая охватывает git.
gitx () {
git --git-dir=/some/where --work-tree=/else/where "$@"
}
_gitx () {
local -x GIT_DIR=/some/where GIT_WORKTREE=/else/where
_git "$@"
}
compdef _gitx gitx
Если у вас есть несколько оберток, вам понадобится функция завершения для каждой из них. Кроме того, вы можете добавить некоторую логику в функцию завершения, чтобы выяснить, какое значение GIT_DIR
и GIT_WORKTREE
использовать. Имя функции находится в $service
.