我的意图是在按RET时为每个提示使用bm.el Visible Bookmarks。我已经在一定程度上做到了这一点。如果缺少一些重要的问题,请在下面的代码中发表评论:除了将args传递给默认函数外,我不知道是否需要处理args。

当我在一个空的命令行上按RET时,我不想为该行添加书签。在将contol传递给默认函数eshell-send-input之前,如何截获命令行内容?

(defun eshell-send-input-zAp (&optional use-region queue-p no-newline)
  "eshell-send-input, customized to add bm-bookmark to prompt line"
 (interactive)
  (bm-bookmark-add)
  (eshell-send-input use-region queue-p no-newline))

(add-hook 'eshell-mode-hook
          #'(lambda ()
              (define-key eshell-mode-map
                [return]
                'eshell-send-input-zAp)))

最佳答案

您的代码看起来不错。如果阅读eshell-send-input的代码,您将看到如何获取当前输入。

另请阅读interactive参数。需要"P"才能将用户区域传递给eshell-send-input

(defun eshell-send-input-zAp (&optional use-region queue-p no-newline)
  "eshell-send-input, customized to add bm-bookmark to prompt line"
  (interactive "*P")
  (unless (string-equal (eshell-get-old-input use-region) "")
    (bm-bookmark-add))
  (eshell-send-input use-region queue-p no-newline))

09-30 19:51