如何找到paredit-kill的end,但不执行kill?

我想要一个函数,它给出paredit-kill的end。

我想把它用作evil的text object,效果是:找到这个函数后我把evil-operator-map按键定为L,这样在normal-state下,我按下d L的效果和paredit-kill一样,y L可以复制当前point到paredit-kill将会kill到的point(但不会进行任何kill)。

我看了下paredit-kill里面是cond里各种kill,没有能给出kill终点的函数。另外有个paredit-point-at-sexp-end,但它只是简单用了forward-sexp等等,只能对lisp代码使用,不如paredit-kill智能。

你先kill 再yank不就行了

找到终点 很麻烦 也没有必要

kill可以直接paredit-kill, yank可以paredit-kill再undo,但是我希望用主楼提到的d L y L这样的evil风格按键来保持一致的evil体验。

想到了,先kill一下再undo-tree-undo,计算一下kill前后buffer的总长度,测试了一下这样不支持visual-state,normal-state和operator-state都行

(defun jjpandari/goto-kill-end (kill-fun forward?)
  "When supplied with a kill function `kill-fun', go to the point the kill function kills to."
  (let* ((old-max (point-max))
          (new-max (progn (funcall kill-fun) (point-max)))
          (kill-end (progn
                      (undo-tree-undo)
                      (funcall (if forward? '+ '-) (point) (abs (- new-max old-max))))))
    (goto-char kill-end)))

(defun jjpandari/goto-end-of-sexp ()
  "Go to the end of current expression."
  (interactive)
  (jjpandari/goto-kill-end 'paredit-kill+ t))

(defun jjpandari/goto-beginning-of-sexp ()
  "Go to the end of current expression."
  (interactive)
  (jjpandari/goto-kill-end 'fontux/paredit-kill-backward nil))

paredit-kill+fontux/paredit-kill-backward这个帖子


另外elisp风格的变量forward?应该叫forwardp?但是我看p结尾的好像都是函数,不知道变量应该怎么取名。