(use-package realgud
:defer t
:commands (realgud:pdb)
:config
(defun my/realgud-delete-icon-manully()
(interactive)
(realgud-bp-remove-icons (progn (beginning-of-line) (point)) (1+ (progn (beginning-of-line) (point)))))
(define-key realgud:shortkey-mode-map (kbd "t") #'realgud:cmd-tbreak)
(define-key realgud:shortkey-mode-map (kbd "d") #'my/realgud-delete-icon-manully)
(setq realgud-safe-mode nil)
)
我在配置中写了这一段, 但执行 realgud:pdb, my/realgud-delete-icon-manully 仍然没有被定义, 说明 use-package 这一段没有被执行.
我观察到, 一开始 realgud 没有被完全 load, 只有 realgud:pdb 等命令. 为什么 use-package 没有起作用? 就算我用 C-x C-e 手动执行这一段, my/realgud-delete-icon-manully 也还是没有定义. spacemacs debug layer 中有关于 realgud 的配置, 用的也是 use-package realgud
.
emacs 29.1.90+spacemacs.
human
2
use-package的defer关键字就是这么个作用,至于你的函数为什么没有被定义,是因为config关键字中的东西,会在包被加载之后才处理
realgud 已经被加载了, 我都在用 realgud:pdb 调试了
human
4
你自己说的realgud没有被完全load,你能用realgud:pdb命令是因为你写在了commands关键字里,autoload自动加载了该函数,不代表这时包就被加载了,如果你不调用这个函数或没有别的hook,这个包将会一直不加载,这就是defer的作用
抱歉没说清楚, 我的意思是我已经执行了 realgud:pdb, 已经开始调试了, 仍然没有加载
你这一段展开是
(progn
(straight-use-package 'realgud)
(unless (fboundp 'realgud:pdb)
(autoload #'realgud:pdb "realgud" nil t))
(eval-after-load 'realgud
'(progn
(defun my/realgud-delete-icon-manully nil
(interactive)
(realgud-bp-remove-icons (progn (beginning-of-line) (point)) (1+ (progn (beginning-of-line) (point)))))
(define-key realgud:shortkey-mode-map (kbd "t") #'realgud:cmd-tbreak)
(define-key realgud:shortkey-mode-map (kbd "d") #'my/realgud-delete-icon-manully)
(setq realgud-safe-mode nil) t)))
执行这个 realgud:pdb
,加载了一些 realgud
里的其他文件,但是并没有加载 realgud.el
,所以就无法触发你下面的代码
1 个赞