Как я могу сгенерировать расширенную текстовую ссылку для pbcopy? - PullRequest
4 голосов
/ 23 мая 2011

Я играл со скриптом, который берет выбранный текст в Chrome и ищет его в Google, предлагая четыре основных варианта, а затем вставляя соответствующую ссылку. Он вставляется в разных форматах в зависимости от того, какая страница в данный момент открыта в Chrome - формат DokuWiki с открытым DokuWiki, HTML с обычными веб-сайтами, и я хочу форматированный текст для моего редактора WordPress WYSIWYG.

Я попытался использовать pbpaste -Prefer rtf, чтобы посмотреть, как выглядит расширенная текстовая ссылка без какого-либо другого стиля на монтажном столе, но она все равно выводит простой текст. После сохранения файла в Text Edit и экспериментов я получил следующее

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

(мне пришлось использовать gsub, потому что каким-то образом при использовании %Q и #{} для вставки переменных строка не работала)

Это работает, однако, когда я вставляю его, появляется дополнительное смещение строк до и после ссылки. Как будет выглядеть строка, чтобы избежать этого?

Ответы [ 3 ]

8 голосов
/ 23 мая 2011

Из скорлупы чистый раствор выглядит так:

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

2 голосов
/ 12 февраля 2012

Один из способов сделать это - использовать 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 намного проще генерировать программно.

0 голосов
/ 19 января 2019

Команда macOS pbcopy может обнаружить RTF. В следующем примере (используя pandoc для преобразования уценки в RTF) помещается фрагмент расширенного текста в буфер вставки:

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