2011-05-23 14 views
4

我一直在玩一个脚本,该脚本将Chrome中的选定文本在Google中查找,并提供四个最佳选择,然后粘贴相关链接。根据当前在Chrome中打开的页面,它以不同的格式粘贴 - 使用DokuWiki打开的DokuWiki格式,使用普通网站的HTML,以及我想要的WordPress WYSIWYG编辑器的丰富文本。如何为pbcopy生成富文本链接

我试着用pbpaste -Prefer rtf看看在粘贴板上没有其他样式的富文本链接,但它仍然输出纯文本。在保存编辑的文本文件,并尝试后,我想出了以下

text = %q|{\rtf1{\field{\*\fldinst{HYPERLINK "URL"}}{\fldrslt TEXT}}}| 
text.gsub!("URL", url) 
text.gsub!("TEXT", stext) 

(我不得不使用gsub,因为在某种程度上使用%Q#{}当插入变量,字符串没有工作)

但是,当我粘贴它时,链接前后会有一个额外的换行符。字符串看起来像什么来避免这种情况?

回答

7

从壳干净的解决方案是这样的:

URL="http://www.google.com/" 
NAME="Click here for Google" 
echo "<a href='$URL'>$NAME</a>" | textutil -stdin -format html -convert rtf -stdout | pbcopy 

因此,使用textutil命令转换正确的HTML ..成RTF ...

红宝石变种:

url = 'http://www.google.com' 
name = 'click here' 
system("echo '<a href=\"#{url}\">#{name}</a>' | textutil -stdin -format html -convert rtf -stdout | pbcopy") 

所以,当你运行上面没有pbcopy部分,你会得到:

{\rtf1\ansi\ansicpg1250\cocoartf1038\cocoasubrtf350 
{\fonttbl\f0\froman\fcharset0 Times-Roman;} 
{\colortbl;\red255\green255\blue255;\red0\green0\blue238;} 
\deftab720 
\pard\pardeftab720\ql\qnatural 
{\field{\*\fldinst{HYPERLINK "http://www.google.com/"}}{\fldrslt 
\f0\fs24 \cf2 \ul \ulc2 click here}}} 

编辑:基于mklement评论删除-prefer

+0

这很整齐,但问题仍然存在 - 此解决方案还会在要复制的文本前后插入换行符。 – 2011-05-25 13:32:09

+1

伟大的解决方案。但是请注意,'-Prefer rtf'实际上并没有做任何事情 - 它是用于'pbpaste'而不是'pbcopy'。 'pbcopy'实际上根据*输入数据*决定要复制的格式(纯文本,RTF或EPS)。 – mklement0 2013-05-15 13:31:30

1

这样做的一种方法是使用的MacRuby,它能够通过Cocoa框架直接访问纸板,而不是使用命令行工具,它给你更多的选择。

例如,您可以使用此功能在HTML代码,包括超链接,这将功能正确插入文本编辑或WordPress的编辑框中粘贴:

framework 'Cocoa' 

def pbcopy(string) 
    pasteBoard = NSPasteboard.generalPasteboard 
    pasteBoard.declareTypes([NSHTMLPboardType], owner: nil) 
    pasteBoard.setString(string, forType: NSHTMLPboardType) 
end 

这工作比命令行要好得多pbcopy,因为它明确地避免了添加空格,并且还避免了为富文本发送RTF,其中HTML以编程方式更容易生成。