有効なemacsエイリアス関数を作成する方法は?

有効なemacsエイリアス関数を作成する方法は?

tmuxの迷惑な問題を解決するために、.bashrcファイルに次のコードを追加しました。

alias emcs="command emacs"

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

エイリアスは、元のemacsコマンドにアクセスしやすくするためのものです。

この関数は後でリストされた引数で置き換える必要がありますemacs . . .TERM-xterm emacs . . .

私の問題は、それを実行するときにemacsコマンドラインで停止することです。機能を「emaacs」または「emacs」以外に変更すると、完全に機能します。コマンドの実際の名前を使用すると動作が停止するのはなぜですか。それを機能させるにはどうすればよいですか?


(私がなぜこれをしたのか疑問に思うなら、tmuxは端末を画面に変更するからです。何らかの理由でコメントと変数名が同じ色であるemacsの色を変更するからです)。

答え1

あなたの機能を見てください。この例では、有罪を起訴するためにいくつかの名前を変更し、あなたの質問に関係のないいくつかの名前を削除しました。

recurse{} (
    recurse "$@"
}

呼び出されたらどうなると思いますか?

この問題を解決するには、明示的なバイナリを呼び出すだけです。

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

あるいは、パスが正しく設定されていると信じることができます。

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

答え2

alias emacs='TERM=xterm emacs'

私はこれがあなたに必要なものだと思います。無条件に設定されてTERM実行xtermされますemacs

この操作を以下でのみ行う場合tmux:

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

これはcommand次の目的に使用されます。いいえこの関数を再帰的に呼び出します。エイリアスには必要ありません。returnこの機能でも必要ありません。

関連情報