Como obter cor de fundo no Emacs?

5

No Emacs no modo de janela, o fundo é automaticamente o mesmo que o terminal (gnome-terminal). Quando olho para (frame-parameters) , vejo que (background-color . "unspecified-bg") . Bem, para mim, o pano de fundo é preto. Existe uma maneira de descobrir qual é a cor de fundo real para uma sessão do Emacs?

    
por Jeff 06.03.2013 / 01:33

1 resposta

2

Se você souber como descobrir a partir do terminal, você pode usar o mesmo comando para descobrir a partir do Emacs.

No meu caso, eu faria um roteiro como este:

#!/bin/zsh

cat .Xresources | grep 'URxvt\*background\:' | cut -d" " -f2

(Nota: -d é definir o delimitador de campo, -f é definir o campo a ser exibido: o primeiro campo é 1 , não 0 )

O comando tem a mesma aparência porque .Xresources , o arquivo que define a cor do plano de fundo, se parece com isso:

# ...
URxvt*background: black
# ...

Torne o script executável ( chmod +x ) e coloque-o no seu PATH ( echo $PATH ).

Se o script for chamado de what_bg , no Emacs, M-x shell-command RET what_bg .

Editar (em resposta ao comentário):

Veja se isso funciona. Eu testei do Emacs e em urxvt, xterm e rxvt. Embora seja mais portátil que o primeiro script, ele assume a configuração .Xresources (que, embora não seja incomum, obviamente não está em todos os lugares).

Estou começando a me perguntar, por que você precisa disso para começar?

E, se você realmente precisar, você não pode apenas procurar na janela para determinar sua cor?

De qualquer forma, o script:

#!/bin/zsh

terminal_emulator_parents='pstree -As $$'
tep_list='echo $terminal_emulator_parents | tr -s "-" | tr "-" " " \
          | tac -s' ' | tr '\n' ' ''

found="false"
for process in 'echo $tep_list'; do
    if [[ $process =~ ("urxvt"|"xterm"|"rxvt") ]]; then # here: add all
        found="true"                                    # terminal emulators
        break                                           # configurable
    fi                                                  # (and *configured*)
done                                                    # in ~/.Xresources

if [[ $found == "true" ]]; then
    echo -n "$process: "
    cat ~/.Xresources | grep -ie ^$process'\*background\:' \
                      | tr -s " " | cut -d" " -f2
else
    echo "Couldn't determine the terminal emulator."
fi
    
por 06.03.2013 / 20:19