首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为pbcopy生成富文本链接

如何为pbcopy生成富文本链接
EN

Stack Overflow用户
提问于 2011-05-23 17:47:26
回答 3查看 2.6K关注 0票数 7

我一直在玩一个脚本,这个脚本获取Chrome中的选定文本,然后在Google中查找它,提供四个首选,然后粘贴相关链接。它被粘贴在不同的格式取决于哪个页面是当前打开的Chrome - DokuWiki格式与DokuWiki打开,超文本标记语言与正常的网站,我想为我的WordPress所见即所得编辑器丰富的文本。

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

代码语言:javascript
复制
text = %q|{\rtf1{\field{\*\fldinst{HYPERLINK "URL"}}{\fldrslt TEXT}}}|
text.gsub!("URL", url)
text.gsub!("TEXT", stext)

(我不得不使用gsub,因为不知何故在使用%Q#{}插入变量时,字符串无法工作)

这是可行的,但是当我粘贴它的时候,在链接的前后有一个额外的行移。为了避免这种情况,字符串应该是什么样子的?

EN

回答 3

Stack Overflow用户

发布于 2011-05-24 00:50:00

在shell中,干净的解决方案是:

代码语言:javascript
复制
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变体:

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

因此,在不使用pbcopy部分的情况下运行上面的代码时,您将得到:

代码语言:javascript
复制
{\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

票数 12
EN

Stack Overflow用户

发布于 2012-02-12 12:43:35

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

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

代码语言:javascript
复制
framework 'Cocoa'

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

这比命令行pbcopy工作得更好,因为它绝对避免了添加空格,也避免了必须为富文本发送RTF,在富文本中,HTML更容易通过编程生成。

票数 4
EN

Stack Overflow用户

发布于 2019-01-19 18:02:43

macOS的pbcopy命令可以检测RTF。下面的示例(使用pandoc将markdown转换为RTF)在粘贴缓冲区中放置一个格式文本片段:

代码语言:javascript
复制
echo '**foo**' | pandoc -t rtf -s | pbcopy
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6095497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档