喔喔,我折腾了一个四不像出来,最懒的方法,没用 Overlay:
(global-set-key (kbd "C-c y")
'(lambda ()
(interactive)
(let* ((trim (lambda (str)
(when (stringp str)
(setq str (string-trim str))
(while (equal (string-to-char str)
(string-to-char "\n"))
(setq str (string-trim-left (substring str 1)))))
str))
(trim-kill-ring (lambda (tkr kr)
(when (consp kr)
(setcar kr (funcall trim (car kr)))
(funcall tkr tkr (cdr kr))))))
(funcall trim-kill-ring trim-kill-ring kill-ring)
(setcdr yank-menu (mapcar (lambda (item)
(let ((str (funcall trim (car item))))
(cons str (cdr item))))
(cdr yank-menu)))
(popup-menu 'yank-menu))))
其实lambda里只要最后一行的(popup-menu 'yank-menu)就行,不过在terminal环境有个问题,就是如果开头是换行符的话,字符串的内容显示不出来,所以多了这一大堆。不过这个问题还是有。。。
还有一个就是我不太想改kill-ring和yank-menu的内容。
期待你的结果。喔,不对,我有空再看看 Overlay相关的。。。