编辑剪贴板文本而不会丢失格式样式并连续运行脚本

时间:2011-03-24 15:44:40

标签: macos background format applescript clipboard

我正在使用AppleScript来编辑我的剪贴板数据。但是有一些我无法弄清楚如何做的事情:

  1. 此脚本删除剪贴板中文本的整个格式样式。有没有办法保留所有格式?

  2. 我尝试将此脚本作为应用程序运行(在保存时保持打开状态),但它只是在重新启动后运行一次,并且不会编辑任何新的复制文本。如何让这个脚本连续运行?

  3. 这是我的剧本:

    on idle
    
        get the clipboard
        replacement of "SqlConnection" by "OleDbConnection" for the result
        replacement of "SqlDataAdapter" by "OleDbDataAdapter" for the result
        set the clipboard to (replacement of "SqlCommand" by "OleDbCommand" for the result)
    
    end idle
    
    on replacement of oldDelim by newDelim for sourceString
        set oldTIDs to text item delimiters of AppleScript
        set text item delimiters of AppleScript to oldDelim
        set strtoks to text items of sourceString
        set text item delimiters of AppleScript to newDelim
        set joinedString to strtoks as string
        set text item delimiters of AppleScript to oldTIDs
        joinedString
    end replacement
    

2 个答案:

答案 0 :(得分:3)

保持格式化的最简单方法是坦率地使用样式文本编辑器(如Text Edit或Pages)作为中间阶段并在那里进行操作。即在Pages中打开一个新文档,粘贴文本,执行查找和替换以修改文本,使用GUI脚本选择所有文档,然后将其复制回剪贴板。

您也可以使用此技术设置样式化模板,填写数据库信息,然后打印或将其放在剪贴板上。我用了很多东西。我只是希望你能用Numbers做到这一点。 (数字的查找和替换没有键盘选项)

编辑:这是一个快速而又脏的示例脚本,可以使用Pages作为中间位置来查找和替换将保持格式化的文本。

tell application "Pages"
    activate
    make new document
end tell

tell application "System Events"
    tell process "Pages"
        -- paste clipboard
        keystroke "v" using (command down)
        -- go to top of document
        key code 126 using (command down)
        -- open find window
        keystroke "f" using (command down)
        -- set word to replace
        keystroke "original"
        -- tab to replace field
        keystroke tab
        -- set word to replace with
        keystroke "newword"
        -- press replace all button
        click button "Replace All" of tab group 1 of window "Find & Replace"
        -- close find window
        keystroke "w" using (command down)
        -- select all text
        keystroke "a" using (command down)
        -- copy back to clipboard
        keystroke "c" using (command down)
    end tell
end tell

答案 1 :(得分:2)

首先,applescript仅适用于文本,而不适用于格式化文本。因此,一旦将剪贴板带入Applecript,您就会丢失所有格式。你无能为力。其次,为了使“on idle”处理程序工作,您需要返回一个时间值,这是处理程序再次运行的时间。因此,在“结束空闲”语句之前添加“返回10”,这意味着每10秒运行一次脚本。