以下函数允许在 org jupyter src 块中使用eglot(在https://github.com/joaootavora/eglot/issues/216#issuecomment-1051931693之后)
(defun org-babel-edit-prep:jupyter-python (babel-info)
(setq-local buffer-file-name (expand-file-name (->> babel-info caddr (alist-get :tangle))))
(eglot-ensure))
(defun mb/org-babel-edit:jupyter-python ()
(interactive)
(org-babel-tangle '(4))
(org-edit-special))
打开一个 org 文件并执行暂存缓冲区中的函数,就像一个魅力,但我想在我的初始化文件中使用这种方法。在我天真的方法中,我认为我将函数放在像这样的钩子上:
(add-hook 'org-mode-hook 'org-babel-edit-prep:jupyter-python)
(add-hook 'org-mode-hook 'mb/org-babel-edit:jupyter-python)
唉,这与使用
C-M-x
不一样,而且不起作用。更糟糕的是,它搞砸了字体锁定。
将未定义的函数添加到挂钩并不会定义该函数。如果您需要评估
*scratch*
中的函数定义以定义它,那么您需要从 init 文件中的某处评估它。
如果它在某个库中定义,则
require
在您的初始化文件中定义该库。如果没有,请将定义它的代码放入您的初始化文件中。
在
org-mode-hook
上放置一个函数只是告诉 Org 模式在模式打开时调用该函数。它没有定义该函数。