ユニバーサルパレットをスクリプトメニューで代用2

  • 投稿日:
  • by
  • カテゴリ:

エルゴソフトのパッケージソフト事業終了を受け、egbridge-Universalに依存している私としては、使っている機能を他の形で実現する必要が出てきた。持っているソフトをそのまま使い続けることは可能だが、さすがにOSのアップグレードなどに対応してくれはしないだろうからだ。

さて、私はいまだに基本的なHTMLは直打ちで書いているのだが、そのタグ付けをegbridge-Univarsalのユニバーサルパレットを使ってやっていた。
egblidge Universalの使い方 2 (うむらうす)(strongとかtable)
egbridge Universalの使い方 3 (うむらうす)(タイトル付きaタグ)

この機能は便利なので、他のやり方で達成したい。ユニバーサルパレットは、異なるアプリに対して使えるところがよかったのだが、さてどうするか・・・。普通に考えると、スクリプトメニューにAppleScriptを置いて、そこから起動するのが良かろう。

まとめると、やりたいことは以下のようになる。
・ユニバーサルパレットで行えるHMTLタグ付けを、ユニバーサルパレットから行えるようにする
・具体的には、スクリプトメニューのAppleScriptで、色々なアプリ上で選択している文字列を<tag> </tag>で囲む。例えば「強調」を「<strong>強調</strong>」のようにする

と思ったら昔そういう記事を書いていたことが判明した。えらいぞ自分。えへへほめられちった(一人二役)。
ユニバーサルパレットをスクリプトメニューで代用 (うむらうす)

どれどれ・・・

色々調べてみた結果、以下のような結論に達した。

結論:ムリ。

理由:ユニバーサルパレットでAppleScriptを走らせると便利なのは、 IMと連動していることで、どのアプリケーションに対しても 文字列を操作できることが重要だった。

一方AppleScript単体では「tell application ""」の縛りをまぬがれず、 対象となるアプリケーションを指定してやらなければならない。 つまり、ブラウザ上、エディタ上、メモアプリ上など、 どれに対しても一つのscriptで対応するということはできないようなのだ。

えらくないじゃん!!
ほめて損した!すみません。(一人二役)
しょうがない、調べ直すか。



(調査中)

わかった。がんばればできる。ユニバーサルパレットをこういう風に使っていて「これからどうしよう」と思い悩んでいる全国1億2000万人のユーザのためにやり方を書いておこう。

以下やり方。

調べた結果

  1. アプリケーションの名前を取得
  2. そのアプリに対して「⌘+c」の指令を出しコピー
  3. コピーした内容をタグで囲む
  4. アプリに対して「⌘+v」でペースト

AppleScriptは「あるアプリケーションに対して」「ある操作を行わせる」的な書き方をするため、「任意のアプリ」に対して命令は出しにくいので、上のようにアプリケーションの名前を取得し、指定してコピペの指令を出すわけだ。
(参考:文字列の取得 by AppleScript

ということで作ったスクリプトが以下のもの。
スクリプトダウンロード:strong_tag.zip

使い方:
上のzipファイルを解凍してできたAppleScriptファイル「strong_tag.scpt」を、ホームフォルダ内の「ライブラリ→Scripts」に移すと、スクリプトメニューにstrong_tagという項目が表示される。

スクリプトメニューって何?と言う方は以下の記事の「方法2:スクリプトメニューに登録する」を参照されたい。
NBA TVのvideoを手軽に楽しむ (うむらうす)

使用上の注意:
実行に2,3秒かかるので、その間にコピーしたいアプリケーションを切り替えてしまうと、うまくタグで囲めないことがある。焦らずしっかり動作を見届けていただきたい。ただ5秒とか10秒とかかかって何も起きない場合、それはうまく動かなかったということなので、何時間も辛抱強く待ち続けないで欲しい。

ということでできたが、美しくない・・・使い勝手もイマイチ・・・もっと簡単にできないものか?そもスクリプトメニューから探すよりも、「文字を選択」→「右クリックから選択」とかの方が良くないか?そのあたりは今後の課題ということで。


まとめ:

  • ユニバーサルパレットから行っていたHTMLタグ付けを、スクリプトメニューから行えるようにした
  • ⌘+c,v でコピペしたりしているので動作が遅い
  • もうちょっとなんとかしたい

以下、興味のある人向け、AppleScriptのソース。

property theElement : "strong"
on run

set clipData to the clipboard

set startTag to "<" & theElement & ">"
set endTag to ""

-- get the name of the active application
set frontmostApp to path to frontmost application

tell application "Finder"
set appName to name of frontmostApp
end tell

-- in case the name ends with ".app"
if appName ends with ".app" then

set appName to text 1 thru -5 of appName

end if

try
activate application appName
tell application "System Events"
keystroke "c" using command down

-- adjust delay time below depending on your environment
delay 1

set the clipboard to (startTag & (the clipboard) & endTag) as text
keystroke "v" using command down

end tell

on error err_msg number err_num
display dialog err_msg & "(" & err_num & ")"

end try

set the clipboard to clipData
end run