Você pediu an answer drawing from credible and/or official
sources
, então vou citar alguma documentação oficial neste
resposta.
Primeiramente, precisamos encontrar uma maneira de determinar se estamos executando dentro de X
sessão. Poderíamos fazer isso, por exemplo, verificando se $DISPLAY
variável está definida. Como está descrito em man X
:
DISPLAY
This is the only mandatory environment variable. It must point to an X server. See section "Display Names" above.
No entanto, pode não ser uma boa ideia porque alguém pode definir
DISPLAY
para um valor falso, mesmo fora de X
. Uma maneira melhor é
sugerido em esta resposta :
if xhost >& /dev/null ; then echo "Display exists"
else echo "Display invalid" ; fi
Você deve ter um programa chamado xhost
já instalado no seu
máquina, verifique se você tem isso:
$ type -a xhost
xhost is /usr/bin/xhost
Agora, podemos definir diff.external
para apontar para um wrapper
chamaria um diff externo se estivermos dentro de X
e executar o padrão
git diff
mechanism se não estivermos dentro de X
. Infelizmente eu não sou
capaz de criar uma maneira simples de executar um git diff
padrão em
diff.external
, então vamos criar um alias para git
que seria
defina diff.external
temporariamente usando -c
. Conforme descrito em man git
:
-c < name>=< value>
Pass a configuration parameter to the command. The value given will override values from configuration files. The is expected in the same format as listed by git config (subkeys separated by dots).
Note that omitting the = in git -c foo.bar ... is allowed and sets foo.bar to the boolean true value (just like [foo]bar would in a config file). Including the equals but with an empty value (like git -c foo.bar= ...) sets foo.bar to the empty string.
Seria algo como:
$ git -c diff.external=diff-wrapper.sh ...
Para resumir:
-
Crie um script chamado
~/git-wrapper.sh
e substitua<YOUR_DIFF_WRAPPER>
com o que você quiser:#!/usr/bin/env sh if xhost >/dev/null 2>&1 then git -c diff.external=<YOUR_DIFF_WRAPPER> "$@" else git "$@" fi
-
Defina um bit executável:
$ chmod +x ~/git-wrapper.sh
-
Defina o alias no seu arquivo de inicialização do shell, por exemplo
~/.bashrc
e reload shell:alias git=~/git-wrapper.sh
-
Use
git
normalmente:$ git diff
Ele usará
<YOUR_DIFF_WRAPPER>
se você estiver dentro deX
e usará padrãogit-diff
fora deX
.