『求教』tmux+Emacs+SLIME 如何自动化?

最近(Aliyun)服务器又出问题没反应准备重启,不是第一次了,所以准备把重启后要运行的命令都写到一个shell script里,例如启动 nginx/postgress ,有2个问题请教(搜索无果):

  1. 能否自动 tmux new-session 一个session然后运行 Emacs?
    例如搜索后试了 tmux new-session -d -s test "emacs",不行

  2. Emacs启动后(自动)运行对应的SLIME脚本启动服务器,例如启动命令写成
    emacs '--eval=(progn (slime) (cd "~") (slime-switch-to-output-buffer) (insert "(start-server-example)") (slime-repl-return))
    但是只有前半部分可以运行 启动(slime) (cd ~)) ,进去后再人工eval后面那段代码是可以自动达到效果

懒惰是程序员的美德,尽量“自动化”,让多任务都“一步到位”啊

另外阿里云的问题不知道是什么,很久没有登陆运行什么,CPU小号一般不超过1%,忽然之间。。

last查阅一下登陆历史好像没有什么异常情况

我似乎也是类似这样玩的,开机自动启动emacs,然后emacs自动打开shell,运行apache,然后又启动另一个shell,运行nginx、然后又启动其它shell运行node等在后台有一堆进程,我是写在emacs配置文件里面的,用elisp定义了win-apachewin-nginx这样的函数。

不过是在我自己电脑windows系统这样做,在服务器linux上没有敢这样折腾

with-current-buffer

最后发现关键是要多加一个 (sleep-for 1) 就可以了!!
这样又可以再懒一点了! (在shell里一个 wecat就帮我打开了Emacs+SLIME+[wecat-server]

第一个问题 tmux+Emacs 大家都还没有遇到过吗?咱这用tmux的还比较少?
现在只能人工 tmux new -s some_session 打开后再运行 wecat

我虽然在用 tmux,但具体的 tmux 用法基本上忘光了,只记得几个自己设置的快捷键。

我也是用 tmux 开启一个 session,然后在里面执行 emacs 并且启动一些东西。

手机回复的,不太方便手打,我就直接把我自己的配置贴上了供参考了:

if [ -e /usr/bin/tmux ] && [ "$TERM" != "screen-256color" ] && [ "$EMACS_START" != "emacs_start" ]
then
    tmux has-session -t emacsserver &> /dev/null
    if [ $? != 0 ]; then
        tmux new-session -s emacsserver -d
    fi
    emacsclient -e '(server-running-p)' &> /dev/null
    if [ $? != 0 ]; then
        tmux send-keys -t emacsserver \
             '/usr/local/bin/emacs -f server-start -f vesie-mode -nw' C-m
    fi
    mylocation=$(tty|cut -d'/' -f3)
    if [ "$mylocation" == "pts" ]; then
        tmux
        exit
    fi
fi


挺多多余的东西的,大致思路就是先开一个 session,然后借由 send-keys 去发送启动 emacs 的命令……

最后的 C-m 估计是回车……

1 个赞

通过关键词send-keys 搜到了解答:
https://www.atjiang.com/pragmatic-tmux-scripting-customized-envs/

今天学到不少,之前对tmux的如此关键有用功能 send-keys 居然还毫不知情。。。

问题得到了完美解决,以后可以每次重启后自动执行我的任务,我的Web Server(Common Lisp开发的,基于Hunchentoot/Hunchensocket打造了自己的 smart-server)会自动运行起来了~~

又可以更懒一点了!!

1 个赞