对于symbol value为空有没有什么好的处理方法?

我自己对一些minor mode习惯用hydra进行开关,并通过%`minor-mode来判断当前 minor mode 是开是关。

在Emacs刚开启的情况下这些 minor mode 我通常是关闭的,以hl-line-mode为例,最开始我考虑用symbol-value判断这个 minor mode 有没有开启,但是这个函数在 symbol value 为空时会报错。

所以我又用 %(if hl-line-mode t nil)来判断,但是这样会出现一个问题就是打开相关的 hydra 的时候会出现Symbol’s value as variable is void: hl-line-mode,对这种情况我的解决办法是提前定义和这个 minor-mode 通用的变量(defvar hl-line-mode nil)

这样的问题就是我默认这个 mode 在开启状态下是关闭的,不知道大家有没有什么办法能使 symbol 的 value 为空时,使其显示的值为nil

难道要考虑用%(if (ignore-errors (symbol-value 'yas-minor-mode)) t nil)的方法来判断吗? :joy:

不知道大家有没有什么更好的处理方法?

你想要的大概是bound-and-true-p

1赞

写成 (if (bound-and-true-p hl-line-mode) t nil)的样子吗?谢谢

不知道这些函数都是从哪里找到的,都是读了elisp intro吗 :sweat_smile:

bound-and-true-p本来就会返回tnil吧,不知道为啥要加个if?忘了从哪看的了,大概是哪个包用了以后看到了。

目前电脑不在身边,所以还不知道结果是啥,看来写了个最蠢的实现 :expressionless:

另外是想之后用if判断下display-line-numbers-modelinum-mode哪个开启了,哪个没有,有了这个函数后看来就很轻松了