大佬能展开细说下这个怎么实现吗?我看了filter-buffer-substring-function
的相关文档,还是没搞懂怎么用这个让yank-pop自动join line
我目前的方案是这样的 @SPQR
(defun eli/org2plaintxt (string)
"Export string to HTML, and convert it into plain text."
(let ((string (org-export-string-as string 'html t)))
(shell-command-to-string
(format "echo \"%s\" | pandoc --from=html --to=plain" string))))
(defun eli/join-line (string)
(if (and (memq major-mode '(org-mode
mu4e-view-mode
Info-mode
elfeed-show-mode
nov-mode))
current-prefix-arg)
(thread-last
string
eli/org2plaintxt
(replace-regexp-in-string "\\([A-Za-z0-9]\\)\n" "\\1 ")
(replace-regexp-in-string "\n" "" ))
string))
(advice-add 'buffer-substring--filter :filter-return #'eli/join-line)
我的使用场景多是从 org-mode 等模式中复制纯文本到其他应用,因此去除了 org-mode 的一些标记,需要时 C-u M-w
就好了,没有什么记忆负担。
不知道大家是怎么复制硬折行下的文本的?
5 个赞
zqso
2023 年2 月 20 日 10:58
2
相当好用,用上了。感谢大佬分享。
顺便捉个小虫: add-advice → advice-add
1 个赞
SPQR
2023 年2 月 20 日 15:58
3
感谢大佬解答,受大佬启发我糊了一个功能差不多但是不用pandoc的版本
(defun eli/org2plaintxt (string)
(cl-flet ((drop-markup (_ content _) (identity content)))
(cl-letf (((symbol-function #'org-ascii-bold) #'drop-markup)
((symbol-function #'org-ascii-italic) #'drop-markup)
((symbol-function #'org-ascii-strike-through) #'drop-markup)
((symbol-function #'org-ascii-underline) #'drop-markup))
(let ((org-ascii-bullets nil)
(org-ascii-underline nil)
(org-ascii-verbatim-format "%s"))
(org-export-string-as string 'ascii t)))))
2 个赞
试用了一下 在 macos上使用完美。能够自动转换成相当美观的格式。
不能确保能百分百正确理解你的硬折行。我试了一下,如下的 org 我复制到 mac 的备忘录里面会变压缩成一行
* heading 1
line 1
line 2
line 3
会变成
Table of Contents
1. heading 1
line 1 line 2 line 3
1 个赞
zqso
2023 年2 月 21 日 06:16
8
嗯,多谢提醒。我也贴到notes.app里看了一下,确实处理了硬折行了。
谢谢大佬,恕我愚钝,我还是不太懂怎么使用这段代码,这些加入配置文件后,然后执行 C-u M-w
自动就能够把去掉了硬折行的 plain text 加入剪切板了吗?我在一段话上试了一下,复制出来是一个 "<p>
标志
谢谢!这个版本可以了。
还有一个小问题,就是比如下面的段落
sentence sentence sentence
sentence
1. abc
2. bcd
3. cdf
sentence
用这个方案复制出来是 sentence sentence sentence sentence 1. abc 2. bcd 3. cdf sentence
,有办法可以识别到其中有的折行其实是真正的分段落吗?也就是希望输出是:
sentence sentence sentence sentence
1. abc
2. bcd
3. cdf
sentence
(defun eli/join-line (string)
(if (and (memq major-mode '(org-mode
mu4e-view-mode
Info-mode
elfeed-show-mode
nov-mode))
current-prefix-arg)
(eli/org2plaintxt string)
string))
1 个赞