Como faço para criar uma função alias do emacs?

2

Em uma tentativa de contornar um aspecto irritante do tmux, eu tenho o seguinte código no meu arquivo .bashrc:

alias emcs="command emacs"

# Fix emacs in tmux
emacs () {
    if [ $TERM != "xterm" ]
    then
        TERM=xterm emacs "$@"
    else
        emacs "$@"
    fi
    return;
}

O alias é simplesmente para facilitar o acesso ao comando original do emacs.

A função deve substituir emacs . . . por TERM-xterm emacs . . . , independentemente dos argumentos listados posteriormente.

Meu problema é que, quando executo emacs , ele é interrompido na linha de comando. Se eu mudar a função para "emaacs" ou qualquer outra coisa que não seja "emacs", ela funcionará sem falhas. Por que está suspenso quando estou usando o nome real do comando e o que posso fazer para que ele funcione?

(Se você está se perguntando por que estou fazendo isso, é porque o tmux muda o terminal para a tela, o que, por algum motivo, altera as cores do emacs, onde comentários e nomes de variáveis são da mesma cor.)

    
por Ness 25.04.2018 / 18:25

2 respostas

3

Dê uma olhada na sua função. Neste exemplo, mudei alguns nomes para indiciar os culpados e identifiquei algumas irrelevâncias para o seu problema:

recurse{} (
    recurse "$@"
}

O que você acha que isso fará quando invocado?

Para corrigir isso, você pode chamar o binário explícito:

emacs () {
    if [ $TERM != "xterm" ]
    then
        TERM=xterm /usr/bin/emacs "$@"
    else
        /usr/bin/emacs "$@"
    fi
    return;
}

Ou você pode confiar em seu caminho estar corretamente definido:

emacs () {
    if [ $TERM != "xterm" ]
    then
        TERM=xterm command emacs "$@"
    else
        command emacs "$@"
    fi
    return;
}
    
por 25.04.2018 / 18:31
2
alias emacs='TERM=xterm emacs'

Eu acredito que isso é tudo que você precisa. Define TERM para xterm incondicionalmente e executa emacs .

Se você deseja fazer isso apenas em tmux :

emacs () {
    if [ -n "$TMUX" ]; then
        TERM=xterm command emacs "$@"
    else
        command emacs "$@"
    fi
}

Isso usa command para não chamar a função recursivamente. Isso não é necessário no alias. Também não há necessidade de return nesta função.

    
por 25.04.2018 / 18:35