AppleScript - 删除剪贴板中的前三行文本但保留样式文本?

问题描述 投票:0回答:1

我有一系列保存为富文本文件的 TextEdit 文档。

第一行是树连字符。

第二行是标题。

第三行是四个连字符。

第三行下方是各种其他样式的文本。

---

Long Descriptive Title Her

----

Various Paragraphs of Text Here

按 Command + A 和 Command + C 将内容复制到剪贴板后,我想使用 Applescript 从剪贴板中删除四个连字符以上的任何内容。

这个 AppleScript 可以做到这一点,但它不会保留样式文本。

如何修改它以保留样式文本,但仍删除不需要的行?

set theText to get the clipboard
set questionMarkOffset to offset of "----" in theText
set the clipboard to text (questionMarkOffset + 5) thru -1 of theText
set theText to get the clipboard
set questionMarkOffset to offset of "----" in theText
set the clipboard to text (questionMarkOffset + 5) thru -1 of theText

这个 Applesctipt 可以工作,但不会保留样式文本。

applescript clipboard rtf textedit styledtext
1个回答
0
投票
tell application "TextEdit"
    delete paragraphs 1 thru 2 of document 1
end tell

如果您事先不确定四个连字符始终位于第 3 行,可以使用以下方法让脚本查找仅包含四个连字符的第一行,然后删除其上方的所有行。

tell application "TextEdit"
    set keepLine to "----" & linefeed
    set paraList to paragraphs of document 1

    repeat with c from 1 to length of paraList
        if contents of item c of paraList = keepLine then
            delete paragraphs 1 thru (c - 1) of document 1
            exit repeat
        end if

    end repeat
end tell

该脚本创建文档段落列表,然后浏览它们以查看其中包含四个连字符,但不包含其他内容。

基本上,它使用“----”来标识正确的行,但这与删除过程是分开的。

备注:

  • 段落末尾包含换行符(或回车符)。这就是为什么将

     & linefeed
    添加到 keepLine

  • 如果 keepLine 在四个连字符后面有其他字符,那么您必须将

    if
    语句调整为如下所示:

    if contents of item c of paraList begins with keepLine then

  • 一旦找到四个连字符的第一个实例,

    exit repeat
    命令就会停止重复过程。

  • 对于具有良好(甚至还不错)applescript 支持的应用程序,您通常可以直接操作项目并避免使用剪贴板。

  • 如果您查看文本编辑词典 (

    File > Open Dictionary…
    ),那么您可以查看支持的各种命令和元素。

© www.soinside.com 2019 - 2024. All rights reserved.