Idl*_*ool 10 emacs emacsclient
我使用启动 emacs 服务器
emacs --daemon
Run Code Online (Sandbox Code Playgroud)
然后使用打开文件
emacsclient filename.ext
Run Code Online (Sandbox Code Playgroud)
但第一个文件必须使用打开
emacsclient -c filename.ext
Run Code Online (Sandbox Code Playgroud)
为了创建一个新框架,以后可以在不使用-cemacsclient 的命令行标志的情况下由后续文件使用该框架。
我想自动化这个。“如果没有 emacs 框架,emacsclient 应该创建一个框架,否则它应该使用当前框架”。怎么做到呢?
Jim*_*ker 13
这就像 dimitri 的解决方案,但它处理 emacs 作为emacs --daemon. emacs --daemon制作一个隐藏窗口,导致xprop在检查现有窗口时给出误报。
#!/bin/bash
emacsclient -n -e "(if (> (length (frame-list)) 1) 't)" | grep -q t
if [ "$?" = "1" ]; then
emacsclient -c -n -a "" "$@"
else
emacsclient -n -a "" "$@"
fi
Run Code Online (Sandbox Code Playgroud)
如果还没有框架,您可以先创建一个框架,然后在现有框架中打开文件。这是一个片段,如果现在在窗口显示上没有打开任何框架,它会在初始显示上创建一个框架。您可能希望通过多种方式进行调整,例如检查显示器上是否已经有一个带有x-display-list. 你需要(require 'cl)在你的`.emacs 中。这可能需要进行一些调整才能在 Windows 或 Aqua 上工作。
emacsclient -e '(unless (find-if (lambda (f)
(let ((p (frame-parameters f)))
(assq '\''window-system p)))
(frame-list))
(make-frame-on-display (getenv "DISPLAY")))'
emacsclient filename.ext
Run Code Online (Sandbox Code Playgroud)
这是我在 Linux 下使用的 emacs-client.sh 脚本来完全满足您的要求:
#!/bin/sh
xprop -name emacs >/dev/null 2>/dev/null
if [ "$?" = "1" ]; then
emacsclient -c -n -a "" "$@"
else
emacsclient -n -a "" "$@"
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3964 次 |
| 最近记录: |