風邪です。風邪。もう、しんどーい。
さて、以前に掲載した問題ですが、掲示板の方でお答えをいただきました。どうも、ありがとうございました。返答が長くなるのでこちらで答えさせていただきます。
『エディタごとに Wrapper となるスクリプトオブジェクトを用意する』(注、意訳。原典は、掲示板の方を)、というのが頂いた答えでした。書いてくださった方も常套手段と書かれているように、おそらく基本的な解答なのだと思います。
では、問題を作ったときに私が作ったスクリプトを掲載しておきます。
script QuoEdit
on selectedText()
tell application "QuoEdit"
text of selection
end tell
end selectedText
end script
script CotEditor
on selectedText()
tell application "CotEditor"
contents of selection
end tell
end selectedText
end script
script KEdit
on selectedText()
tell application "KEdit"
selected text of front document
end tell
end selectedText
end script
script EnhanceEditor
on currentEditor()
tell application "System Events"
return ((name of processes whose frontmost is true) as Unicode text)
end tell
end currentEditor
on selectedText()
set apps to currentEditor()
if apps is "QuoEdit" then
selectedText() of QuoEdit
else if apps is "CotEditor" then
selectedText() of CotEditor
else if apps is "KEdit" then
selectedText() of KEdit
else
return ""
end if
end selectedText
end script
display dialog (EnhanceEditor's selectedText())
ラッパーとなるスクリプトオブジェクトを用意して...というのはこういう感じでしょうか?
おそらく、こういう形が基本的かと思います。ただ、もっと簡潔に簡要に簡便に書けないものなのかと思うのです。例えば、このスクリプトの EnhanceEditor オブジェクトの selectedText() は、if 文が続きます。対象とするエディタが増えるとそれだけ if 文が増えます。どう考えても、不細工です。問題として提起したのは、この if 文が引っかかったからなのでした。もっとスマートな書き方があるはずだ、と。
引き続き、この問題に対する答えは受け付けています。iTMS カードは、やっぱりないですが(笑
「仕方ないな...このサイトの管理人はこんなことも分からないのか。手間がかかるが教えてやろう」という気骨のある方、どうかよろしく。
0 件のコメント :
コメントを投稿