You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:实现Helm风格Org模式缓冲区选择界面失败

问题分析与修复

你的代码核心问题是**cl-remove-if-not的参数位置错误**,导致无法正确筛选出Org模式的缓冲区。具体来说,你把(buffer-list)放在了lambda表达式的闭合括号外面,违反了cl-remove-if-not的调用语法(正确语法为(cl-remove-if-not 筛选函数 目标序列))。

修正后的代码

(defun helm-org-buffers ()
  "Use Helm to select an Org mode buffer."
  (interactive)
  (let ((org-buffers
         (cl-remove-if-not (lambda (buffer)
                             (with-current-buffer buffer
                               (eq major-mode 'org-mode)))
                           (buffer-list)))) ; 将buffer-list移至此处,作为cl-remove-if-not的第二个参数
    (helm :sources (helm-build-sync-source "Org Buffers"
                     :candidates (mapcar #'buffer-name org-buffers)
                     :action #'switch-to-buffer)
          :prompt "Select Org buffer: ")))

额外优化建议

如果想让代码更简洁可靠,可直接用缓冲区对象作为Helm候选(Helm会自动显示缓冲区名称),省去mapcar #'buffer-name的步骤,同时switch-to-buffer直接接收缓冲区对象也更稳妥:

(defun helm-org-buffers ()
  "Use Helm to select an Org mode buffer."
  (interactive)
  (helm :sources (helm-build-sync-source "Org Buffers"
                   :candidates (cl-remove-if-not (lambda (buf)
                                                   (with-current-buffer buf
                                                     (eq major-mode 'org-mode)))
                                                 (buffer-list))
                   :action #'switch-to-buffer)
        :prompt "Select Org buffer: "))

内容的提问来源于stack exchange,提问作者Emmanuel Goldstein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:57:06