2017-08-29 8 views
1

ここで初心者を完全に熟知していますので、質問を明確にしたり、改善したりする必要がある場合はお知らせください。 私は異なるキーワードを使用して複数回検索しており、問題の解決策を見つけることができませんでした。埋め込みリンクを維持しながら、ソース属性とタイムスタンプが付加されたWebテキストクリップを貼り付けるAppleScriptを作成できますか?

トリガーされると、選択したテキスト内に埋め込み可能なリンクを失うことなく、ソース属性とタイムスタンプが付加されたWebテキストクリップを貼り付けることができるスクリプト(AppleScript)を作成します。賢明なプログラミング何の多くを知らない

Here is a screen shot of what I want to achieve:

、私は、Web検索の数日後に次のスクリプト(AppleScriptを)一緒に考え出すことができました。私が使用したときに「設定」埋め込まれたリンクは、選択したWebテキストから抹消しまったコマンドので

-- clear the clipboard 
tell application "Finder" 
set the clipboard to " " 
delay 0.1 
end tell 

-- copy selected text 
tell application "Safari" 
activate 
tell application "System Events" 
    tell process "Safari" 
     keystroke "c" using {command down} 
     delay 0.1 
    end tell 
end tell 
end tell 

-- open and paste web clip into specified TextEdit file 
tell application "TextEdit" 
activate 
open "Macintosh HD:Users:Web:Documents:Web Text Clips:Web_Text_Clips.rtf" 
delay 0.2 
tell application "System Events" 
    tell process "TextEdit" 
     keystroke "v" using {command down} 
     delay 0.1 
    end tell 
end tell 
end tell 

-- get, format and copy source info and timestamp 
tell application "Safari" 
activate 
set theLongDate to current date 
set theWindowName to the name of the front window 
set theURL to the URL of the front document 
set writeString to "- - - - - " & return & "From: " & theURL & return & "Page Title: " & theWindowName & return & "Date: " & theLongDate 
set the clipboard to writeString 
end tell 

-- paste source info and timestamp into predefined position of the specified TextEdit file 
tell application "TextEdit" 
activate 
tell application "System Events" 
    tell process "TextEdit" 
     keystroke (ASCII character 31) using command down 
     keystroke return 
     keystroke return 
     keystroke "v" using {command down} 
     delay 0.1 
    end tell 
end tell 
end tell 

-- copy content of specified TextEdit file 
tell application "TextEdit" 
activate 
tell application "System Events" 
    tell process "TextEdit" 
     keystroke "a" using {command down} 
     keystroke "c" using {command down} 
     delay 0.1 
    end tell 
end tell 
end tell 

-- delete content of specified TextEdit file 
tell application "TextEdit" 
activate 
tell application "System Events" 
    tell process "TextEdit" 
     keystroke "a" using {command down} 
     keystroke "x" using {command down} 
     delay 0.1 
    end tell 
end tell 
end tell 

-- save specified TextEdit file and quit TextEdit 
tell application "TextEdit" 
save "Macintosh HD:Users:Web:Documents:Web Text Clips:Web_Text_Clips.rtf" 
quit 
end tell 

私は、この回避策を余儀なくされました。

このスクリプトは機能しますが、非常に面倒で遅いです。私はいろいろな種類のもの(いくつかのシェルスクリプトコマンドを含む)を試しましたが、今のところ他には何も働いていません。

選択したWebテキストに埋め込みリンクを維持している、よりエレガントで高速なスクリプトの作成にお役立てください。

おかげで、

私はMacOSのシエラを実行しています(バージョン:10.12.6)

+0

きれいにする。フォーマットされたデータリンクリンクを転送するには、クリップボードを使用する必要があります。質問:あなたの最終的な結果は何ですか?リンクとソースのデータがどこかに貼り付ける準備ができていますか?テキストエディット文書からそれを削除していますか? – jweaks

+0

@jweaksフィードバックありがとうございます。私の望む最終結果は、選択したWebテキストクリップ、そのソース情報、クリップボード上に配置されたタイムスタンプを、自分のお気に入りのメモ取りアプリに1つのエントリとして貼り付ける準備ができていることです。 –

+0

最もクリーンで速いアプローチは、テキストエディットの使用を避けるために、スクリプトをメモ帳アプリに貼り付けることです。アプリは何ですか?それはスクリプト可能ですか? – jweaks

答えて

0

ここでスクリプト(ココア-のAppleScript)クリップボードに選択範囲をコピーすると、いくつかのテキストを追加することがありますクリップボードのHTMLデータに追加します。

use framework "Foundation" 
use scripting additions 

set beginningStr to return & return & "- - - - - " & return & "From: " 
set theLongDate to current date 
tell application "Safari" 
    if (do JavaScript "document.execCommand('copy')" in document 1) then -- copy the selection to the clipboard 
     set {theTitle, theURL} to {name, URL} of the front document 
     set writeString to beginningStr & theURL & return & "Page Title: " & theTitle & return & "Date: " & theLongDate 
     set r to my appendStringToClipboard(writeString, theURL, length of beginningStr) 
     if r is "" then 
      my goToNoteApp() 
     else 
      display alert r 
     end if 
    else 
     display alert "Error: can't copy to clipboard, check the selection" 
    end if 
end tell 

on goToNoteApp() --**** you must change the name of the application to the name of your note-taking app 
    activate application "Notes" 
    -- now you can paste 
end goToNoteApp 

on appendStringToClipboard(t, u, n) -- params: t = the text to append, u = the url, n = the number of characters in the text before the url 
    tell current application 
     set pboard to its NSPasteboard's generalPasteboard() 
     -- ** if the clipboard contains HTML data ** 
     if (pboard's availableTypeFromArray:{its NSPasteboardTypeHTML}) is missing value then return "No HTML data in the clipboard" 
     set tData to (pboard's stringForType:(its NSPasteboardTypeHTML))'s dataUsingEncoding:(its NSUnicodeStringEncoding) -- get the HTML data 

     set attrString to its (NSMutableAttributedString's alloc()'s initWithHTML:tData documentAttributes:(missing value)) -- get an attributed string from the HTML data 
     if attrString is missing value then return "The HTML data can’t be decoded." 
     set t_RTFD to (pboard's availableTypeFromArray:{its NSRTFDPboardType}) -- if the clipboard contains an image 

     set myFont to its (NSFont's fontWithName:"Helvetica" |size|:14) -- *** the font and the size of the appended text (you can change it) *** 
     set myColor to its (NSColor's blackColor()) -- *** the color of the appended text (you can change it)*** 

     set theDict to its (NSDictionary's alloc()'s initWithObjectsAndKeys_(myColor, its NSForegroundColorAttributeName, myFont, its NSFontAttributeName, missing value)) 
     set stringToAppend to its ((NSMutableAttributedString's alloc)'s initWithString:t attributes:theDict) -- create an attributed string (the text, url, title and the timestamp) 
     stringToAppend's addAttribute:(its NSLinkAttributeName) value:u range:{location:n, |length|:length of u} -- add attribute for the URL (make a clickable link) 
     attrString's appendAttributedString:stringToAppend --- append the text, the url, the title and the timestamp to the attrString (the contents of the selection) 
     pboard's declareTypes:{its NSPasteboardTypeRTF, its NSPasteboardTypeHTML} owner:me 

     -- *** the HTML data and the appended text *** 
     set {tData, err} to attrString's dataFromRange:{location:0, |length|:attrString's |length|()} documentAttributes:{DocumentType:"NSHTML"} |error|:(reference) 
     pboard's setData:tData forType:(its NSPasteboardTypeHTML) ---- put the new HTML data into the clipboard 

     -- *** the RTF data and the appended text *** 
     set tData to attrString's RTFFromRange:{location:0, |length|:attrString's |length|()} documentAttributes:{DocumentType:"NSRTF"} 
     pboard's setData:tData forType:(its NSPasteboardTypeRTF) ---- put the new RTF data into the clipboard 

     if t_RTFD is not missing value then -- the clipboard contains an image 
      -- *** the RTFD data and the appended text *** 
      pboard's addTypes:{its NSPasteboardTypeRTFD} owner:me -- add the RTFD type 
      set tData to attrString's RTFDFromRange:{location:0, |length|:attrString's |length|()} documentAttributes:{DocumentType:"NSRTFD"} 
      pboard's setData:tData forType:(its NSPasteboardTypeRTFD) ---- put the new RTFD data into the clipboard 
     end if 
     return "" 
    end tell 
end appendStringToClipboard 

スクリプトでこれらの行を削除し、選択から画像を取得する必要がない場合:あなたのアプローチは、スクリプトのニーズの多くが、一般的には、悪いことではありません

if t_RTFD is not missing value then -- the clipboard contains an image 
    -- *** the RTFD data and the appended text *** 
    pboard's addTypes:{its NSPasteboardTypeRTFD} owner:me -- add the RTFD type 
    set tData to attrString's RTFDFromRange:{location:0, |length|:attrString's |length|()} documentAttributes:{DocumentType:"NSRTFD"} 
    pboard's setData:tData forType:(its NSPasteboardTypeRTFD) ---- put the new RTFD data into the clipboard 
end if 
+0

jackjr300ありがとうございます。私のレベルを上回るあなたの方法は、簡単なワークフローを可能にし、私の要求を完全に満たします。 –

+0

@jweaks jweaksご協力いただきありがとうございます。 jackjr300の寄稿が私の問題を解決しました。 –

関連する問題