yPh*_*hil 5 emacs elisp defadvice advising-functions
当我这样做时C-u C-SPC,emacs将我带到"我之前的位置".随后的C-u C-SPC印刷机会回到之前的位置.那太棒了,我经常使用它.
但总有一些事情让我感到困惑:标记环中唯一缺少的标记是我在第一个位置调用的地方!这就像把面包屑留在身后,然后去"哎呀,我可能会迷路,我可以回去检查一下",然后回去而不留下面包屑,你现在就在哪里!
我试过建议这个功能,但我不能以我的生活方式来编程模拟一个C-SPC C-SPC.
C-SPC C-SPC?以下是手册中对后者的说法(强调我的)C-SPC运行命令set-mark-command,它是`simple.el'中的交互式编译Lisp函数.
它与C- @,C-SPC绑定.
(set-mark-command ARG)
设置点所在的标记,或跳转到标记.设置标记也会改变区域,即点和标记之间的文本; 这是Emacs中最接近的等同于某些编辑所称的"选择".
如果没有前缀参数,请在点处设置标记,然后按下本地标记环上的旧标记位置.如果先前的标记设置在另一个缓冲区中,也要在全局标记环上按下旧标记.
但是,当我尝试使用它(非交互式)"没有前缀参数"以"在点设置标记"时,我得到一个调试器错误"错误的参数数量"..?(我意识到参数和前缀参数之间的区别).
即使有一个哲学的,非实际的答案,我也会没事的.我只想了解这里的想法.
好的,这就是我所做的
(defun px-push-mark-once-and-back ()
"Mark current point (`push-mark') and `set-mark-command' (C-u C-SPC) away."
(interactive)
(let ((current-prefix-arg '(4))) ; C-u
(if (not (eq last-command 'px-push-mark-once-and-back))
(progn
(push-mark)
(call-interactively 'set-mark-command))
(call-interactively 'set-mark-command))))
(global-set-key (kbd "<s-left>") 'px-push-mark-once-and-back)
Run Code Online (Sandbox Code Playgroud)