Agenda capture 录入完后报 Warning

我用C-c c录入完一条todo项目后,再按C-c C-c时,录入的buffer自动关闭了,但是却弹出了一个新的buffer,里面有如下提示:

Warning (with-editor): Cannot determine a suitable Emacsclient

Determining an Emacsclient executable suitable for the
current Emacs instance failed.  For more information
please see https://github.com/magit/magit/wiki/Emacsclient.

查看我的gtd文件可以发现刚刚录入的todo项目已经有了。

我不明白为什么会有这个warning,看给出的提示是关于magit的,可我的magit其实用的好好的呀!? org agenda capture跟magit没啥关系吧。

我的版本:GNU Emacs 25.1.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.10.8)

with-editor 需要emacs server是开着的。

(unless (server-running-p)
    (server-start))

或者 daemon 模式就可以

这个应该不是org capture 的问题哦

with-editor是什么,很奇怪我的spacemacs配置里并没有。 你说的这两句话在我的.emacs.d/init.el里是有的,该文件的完整内容如下:

(setq gc-cons-threshold 100000000)
(defconst spacemacs-version         "0.105.21" "Spacemacs version.")
(defconst spacemacs-emacs-min-version   "24.4" "Minimal version of Emacs.")
(if (not (version<= spacemacs-emacs-min-version emacs-version))
    (message (concat "Your version of Emacs (%s) is too old. "
                     "Spacemacs requires Emacs version %s or above.")
             emacs-version spacemacs-emacs-min-version)
  (load-file (concat (file-name-directory load-file-name)
                     "core/core-load-paths.el"))
  (require 'core-spacemacs)
  (spacemacs/init)
  (spacemacs/maybe-install-dotfile)
  (configuration-layer/sync)
  (spacemacs-buffer/display-info-box)
  (spacemacs/setup-startup-hook)
  (require 'server)
  (unless (server-running-p) (server-start)))

难道是上面有多余的语句?

我只在org capture 的时候遇到了这个问题,太诡异了。

Margit 的东西 emacsclient 没有在 、path、里面 应该是

你的意思是emacsclient可在terminal中运行吗?那它的路径是哪里呢? 我的不行:

X@XX:~$ emacsclient
emacsclient: command not found

X@XX:~$ echo $PATH
/home/ziyuan/anaconda3/bin:/home/ziyuan/anaconda2/bin:/home/ziyuan/MySoft/emacs/src:/usr/local/texlive/2016/bin/i386‐linux:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

emacs 一个目录

我没有在我的电脑里找到emacsclient, 看来是丢失了, 网上有人问过一样的问题 , 这里给出了一种解决方案。

但是,我的Emacs是git编译安装的,版本是25.1.50.1,运行apt-file find bin/emacsclient 我得到的输出是:

emacs23-bin-common: /usr/bin/emacsclient.emacs23
emacs24-bin-common: /usr/bin/emacsclient.emacs24

别人说的是:

由于我使用的Emacs版本是 24.3.1,所以我用如下命令重装Emacs: sudo apt-get install --reinstall emacs24-bin-common 然后,emacsclient命令就回来啦!

那对于我的而言,就没有我能运行的emacsXX-bin-common版本啊!

搞不好就在你编译的 --prefix bin 里面。不知道什么apt-file

确实就在编译的路径里,不过是 --prefix/lib-src里面。

  • 我把这个路径加到PATH里面。完成这一步后,我使用org capture(C-c c)同样还报出上面的warning!

  • 下面这种操作就不会出现warning:

    1. 先运行spacemacs;
    2. 然后到系统terminal里运行 emacsclient xx,其中xx是任意字符。此时在已打开的spacemacs中会新出现一个名为xx的buffer;
    3. 这时再使用org capture(C-c c)就没有warning了。

我第一次注意到emacsclient,不明白其原理,不知道我遇到的问题有没有好的解决方式。

终于可以了,要改exec-path

 (setenv "PATH" "/usr/local/bin:path to emacsclient/lib-src");;仅为示例,应用前需修改为正确路径
    (setq exec-path (split-string (getenv "PATH") path-separator))

想顺便问一下,怎样把系统的PATH保留在exec-path中(不是采用复制到上面第一句的方式)?

可能是我没表达清楚。 我只有一个emacs版本,当然它的可执行文件路径是在系统的$PATH里的。 现在我发现系统的$PATH并不等同于Emacs的exec-path,需要使用这两句来设置exec-path:

我是想问emacs里有没有哪个lisp语句能直接让exec-path等同于系统的$PATH(我是linux系统)。

这并不是说我装了emacs23和emacs24,apt-file find xxx的作用是找到 若要安装xxx,系统缺失的东西。