【问题标题】:create emacs alias that starts in background?创建在后台启动的emacs别名?
【发布时间】:2010-02-16 23:14:04
【问题描述】:

如果 emacs 守护进程已经在运行,我在 bash 中有一个别名运行 emacsclient,否则启动 emacs。但是,如果启动了新的 emacs 实例,我可以让它在后台运行,以便我仍然可以使用该终端(或关闭它)吗?在我的 bash 个人资料中,我有

alias ec="/usr/bin/emacsclient.emacs-snapshot -n -c -a /usr/bin/emacs-snapshot"

我可能会在终端输入

$ ec newfile

如果 emacs 守护程序尚未运行,是否可以创建一个别名来使上面的行相当于

$ emacs newfile &

而不是

$ emacs newfile

(我还应该提到,我使用的是 Linux Ubuntu,并且 emacs-snapshot 被分配给别名“emacs”)。

非常感谢!

【问题讨论】:

    标签: linux bash unix emacs emacs23


    【解决方案1】:

    不要直接调用/usr/bin/emacs-snapshot,而是写一个后台调用/usr/bin/emacs-snapshot然后返回的脚本:

    #!/bin/sh
    case $# in
      0) /usr/bin/emacs-snapshot &
      *) /usr/bin/emacs-snapshot "$@" &
    esac
    

    然后你以普通的方式调用脚本;它将启动一个后台 emacs 进程并立即返回。

    如果你想变得花哨,你可以使用/bin/bashdisownesac之后的进程(使用$!获取pid)。

    【讨论】:

    • 为什么是case?当 $# 为 o 时,仅使用 myscript "$@"myscript 的工作方式相同。
    • @profjim:可能在 bash 中,但在旧版本的 /bin/sh 中没有。 case 保证可移植性。在旧版本中,当$# 为 0 时,myscript "$@" 的行为与 myscript "" 相同。当你和我一样大时,你会学会保持“bug 对 bug 的兼容性”...
    • 谢谢 - 我有必要否认这个过程吗?
    • @Stephen:我不明白disown 和我想的一样。我会选择更简单的解决方案,但是如果你发现你的 shell 不会退出或者你的 emacs 莫名其妙地崩溃(或者当你的 shell 退出时你的 emacs 崩溃了),那么我会尝试放弃它。
    • 谢谢 - 虽然我的 .emacs 文件没有使用这种方法加载,但似乎可以按原样工作而不必否认。我会调查一下...但是谢谢。
    【解决方案2】:

    虽然这不是您问题的直接答案,但这是“启动 emacs 守护程序或以其他方式运行 emacsclient”的更优雅的方式。创建以下别名:alias emacs=emacsclient -c -a ""。截至man emacsclient

    -a, --alternate-editor=EDITOR ... 如果 EDITOR 的值为空字符串,运行 `emacs --daemon' 以守护模式启动 Emacs,并尝试连接。

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多