如何为pbcopy生成富文本链接

时间:2011-05-23 09:47:26

标签: ruby macos clipboard rtf

我一直在播放一个脚本,该脚本会在Chrome中显示所选文本并在Google中查找,提供四个首选,然后粘贴相关链接。它以不同的格式粘贴,具体取决于当前在Chrome中打开的页面 - DokuWiki格式,DokuWiki打开,HTML与普通网站,我想要WordPress WYSIWYG编辑器的富文本。

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

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

(我必须使用gsub,因为以某种方式使用%Q#{}插入变量时,字符串不起作用)

然而,当我粘贴它时,链接之前和之后还有一个额外的换档符号。字符串会是什么样的,以避免这种情况?

3 个答案:

答案 0 :(得分:8)

从shell开始,干净的解决方案就是:

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 ...

ruby​​变体:

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}}}

编辑:删除-Prefer基于mklement注释

答案 1 :(得分:2)

这样做的一种方法是使用MacRuby,它可以通过Cocoa框架直接访问粘贴板,而不是使用命令行工具,它提供了更多选项。

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

framework 'Cocoa'

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

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

答案 2 :(得分:0)

macOS的pbcopy命令可以检测RTF。以下示例(使用pandoc将markdown转换为RTF)将富文本片段放入粘贴缓冲区:

echo '**foo**' | pandoc -t rtf -s | pbcopy