|
でるもんた・いいじま@秀丸ユーザ です。
> 下書き中は画像を入れる場所にhogehoge.pngみたいに書くだけで、
> WordPressに投稿してから画像の確認をします。
>
> つまり下書き中に正しい画像かどうか、文章と画像が合っているか
> どうか確認しできないのです。
> 『
> 秀丸エディタの中(orプレビュー画面の類のもの or アウトプット枠)で
> 画面を見る事はできないでしょうか?
> またはそういうマクロは無いでしょうか?
> 』
> ※こうやるといいよという、良いお知恵をお持ちの方がいらっしゃれば
> ぜひ教えてください。
というわけで、いくつか検討してみます。結論から言うと、私の考えでは
「マクロを書いて外部のビューワを呼び出すのが手っ取り早い」という
ことになりました。
というわけで、もし他の方にマクロの作成をお願いする予定でしたら、
マクロを作ってもらうために色々と状況の特定が必要ですので、次の
各質問にお答えください。
(かなり細かく訊いていますが、色々な例外の可能性まで考えていると、
これだけの分量になってしまいました。)
Q1.メモ中に書かれている画像ファイルのファイル名は「ASCII文字のうち、
半角スペースと % を除いたもの」だけに限られていますか?
Q2.半角スペース、半角 %、あるいは、ASCII文字以外が含まれる場合、
メモの中ではどのように書いていますか?
具体的には、%XX や %uXXXX にしていますか、それともそのままですか?
Q3.スペースを使っていて、%20にはしていない場合、どんな書式で
「ここからここまでがファイル名」と示していますか?
(回答例 [green apple.gif])
Q4.想定している画像の拡張子は何と何ですか? 大文字は使いますか?
(回答例 gif/jpg/png のみ・小文字に統一・jpeやjpegは使わない)
Q5.メモ中に書いてあるパス名はどのようなっていますか?
(回答例 パス名なしで apple.gif、/images/icons/apple.gif、
https://images.xxx.com/xxx/apple.gif など)
Q6.上記のパスに対応するWindows上での実際のパスはどうなりますか?
(回答例 C:\Users\xxx\Documents\www.xxx.com\images\icons\apple.gif、
C:\Users\xxx\Pictures\site1\icons\apple.gif など。複数のサイトが
ある場合は、2つ以上のサイトのフォルダを例示してください。
なお、ユーザ名の部分や実際のホスト名は伏字で結構です。)
Q7.ローカルのディスクに保管していない画像、つまり、ブラウザを
起動して http(s) で取ってこないといけない画像も観られるように
したいですか? その場合、その画像のフォルダ名は。
(回答例 自分のサイトと同じサーバの /images/common/、
http://www.yyy.jp/photo/ など)
Q8.本文のテキストデータを置いているフォルダはどこですか?
(回答例 C:\Users\xxx\Documents\www.xxx.com\text\1234.utf.txt
など。こちらもユーザ名やホスト名は伏字で結構ですが、テキストと
画像が別々のユーザのホームディレクトリ中にある場合は、その旨
お書き添えください。)
Q9.Windows上で、上記の各拡張子はどのアプリに関連付けられていますか?
言い換えれば、Explorer上で画像ファイルをダブルクリックしたら
何が起動するようになっていますか?
(回答例 Windowsの画像ビューワで表示される、Photoshopで開く、
ImageMagickのビューワで開く など)
Q10.Windows上の画像ファイルのフルパス(ユーザ名を含む)に、
Shift_JISの範囲外の文字が含まれる可能性はありますか?
Q11.同様に、画像ファイルのフルパス(ユーザ名を含む)に半角の % が
含まれる可能性はありますか?
質問は以上となります。
☆ ☆ ☆
以下はマクロを作る方のためのメモです。
[1] DLLを自分で作って、それをマクロから呼び出せば、秀丸のエディタ枠の
内側に画像を表示することも不可能ではありません(Emacsには標準でこの
機能があるようです)。しかしながら、DLLを作るのはちょっと面倒ですし、
特に、自分で作れずに誰か他の人に作ってもらった場合には、何かトラブルが
あったときにたちまち立ち往生してしまいますので、お勧めしません。
☆ ☆ ☆
[2] 秀丸の組み込みコマンドに「...を開く」があります。
標準では右クリックメニューの中にあるようです。これを使うと、
カーソル位置のファイル名をExplorerに渡して、関連付けに従って
開いてくれます。
ただしこれは、次の2つの条件を満たしていることが必要です。
i) テキスト中に記載している画像ファイルのパス名が、Windowsでの
パス名と一致していること。このため、たとえば、テキスト中では
WordPressに <img src="/images/apple.gif" /> と流し込むという
前提で /images/apple.gif と書いてある場合には、画像は x:\images
に置く必要があります。
(x: は本文データを保存しているドライブ名。C:\images を使うのは
望ましくありませんが、USBメモリやSDカード、外付けハードディスク
等を使えば、そのドライブの \images が利用可能です。)
ii) テキスト中にはパス名を「/」で区切って記載してして、しかるに
関連付け先のアプリが「/」でのパス区切りを受け付けない場合には、
この方法は利用できません。
☆ ☆ ☆
[3]というわけで、マクロで外部プログラムを呼び出すことを考えます。
「ファイル名の位置にカーソルを置いて何かキーを押す、あるいは
ファイル名をダブルクリックする」という操作をトリガーにして、
「外部アプリで当該画像を開く、またはExplorerで関連付けされている
アプリを起動する」、ということであれば、マクロでできそうです。
以下、その前提で処理手順を記載します。
i) まず、秀丸マクロには colorcode というキーワードがあります。
(colorcode & 0x400)!=0 で、カーソル位置の文字が「...を開く」の対象、
(具体的にはURL・メールアドレス・ファイル名)を構成する文字として
認識されているかどうかがわかります。
ii) 次に、カーソル位置を含む単語を選択するには、selectword または
selectword2 が使えます。(私は使ったことがないので、どちらが
今回の場合にベターなのかはわかりません。)
#スペースの入ったファイル名をそのまま書く可能性があって、
#[Sample Picture.png] や "today's photo.jpg" のように記入
#している、という場合は一工夫が必要です。
iii) 範囲を選択すると、seltopx、seltopy、selendx、selendy、gettext
(もしかしたらgettext2かも)を使ってその範囲の文字列、つまり
URL・メールアドレス・ファイル名を取得することができます。
iv) 取得したファイル名に、次のような加工・修正を施します。
a) ファイル名から拡張子を取得(たとえば strrstr($selection, ".")
で取得した数値を利用する)し、画像ファイルとして想定している
拡張子かどうかをチェックします。もしそれに該当しなければ、
当該マクロの対象ではないので、その時点でマクロ打ち切りです。
なお、この段階で、
「拡張子は小文字で統一する」
「.jpe や .jpeg は使わず、.jpg で統一する」
といったローカルルールのチェックが可能です。
※ テキスト中に拡張子を大文字で記入する可能性がある場合は、
適宜 tolower() を使います。
b) 必要ならば、自分のサイト内の画像かどうかをチェックします。
たとえば、別サーバにのみ保管されている画像を参照していてそれを
http(s):// から記載している場合には、c) 以降の処理は不要で、
openbyshell や runsync2 などでブラウザを呼び出すだけです。
(run、runex を使うと "%" の処理が面倒なので、デフォルトの
ブラウザでよければopenbyshell、他の軽量なブラウザを使い
たければ runsync2 が無難でしょう。なお、runsync2 の場合、
ブラウザを閉じるまで秀丸に復帰しないので、それが嫌なら "%"
の処理を頑張って run/runex にするか、それともデフォルトの
ブラウザをopenbyshellで呼び出すかです。)
あるいは、同じWebサーバでも別の人が管理していて手元に画像がない
場合も、http(s):// から始まるURLに加工して同様に呼び出します。
以下は、画像がローカルマシンに保管されている(もしくは、Windowsの
ファイル共有機能でアクセスできる)場合について検討します。
c) ファイル名から取得したURL用のパス名(たとえば /images/)を
ハードディスク上のパス名(たとえば ..\images\)に変換します。
最終的に起動したい画像ビューワがフルパスのファイル名しか受け
付けないない場合(例:Windows標準の画像ビューワ)は、この段階で
フルパスにします。
※ b) 後段のケースとは逆に「画像はWordPressとは別のサーバに
置くことになっているため本文中には http(s):// から記載している
けど、手元では両者を同じマシンからアクセス可能」という場合は、
そのパス名の架け替えもこの段階で処理します。
<ちょっと手の込んだ話>
・複数のWordPresssサイトのデータを別々のフォルダに置いている
場合で、マクロでどのサイトなのかを判別したい場合、あるいは
画像のファイル名をフルパスにする場合は、マクロの directory
キーワードが利用可能です。
・画像を「ピクチャ」フォルダに置いている場合、ホームディレクトリを
取得するには getenv("USERPROFILE") が使えますが、Windows XPの
「My Pictures」とVista以降の「Pictures」とを自動判別するには
もう一工夫が必要です。
</ちょっと手の込んだ話>
d) 本文中に「%nn」または「%uXXXX」の形で特殊文字をエスケープした
ものがあり、それを解除しなければアプリや関連付けに渡せない場合
には、そのデコードを行います。
e) Shift_JISの範囲外の文字を % でエンコードせずにビューワに
渡すには runex コマンドを使って UTF-16 で呼び出す必要があり、
その runex では "%" という文字が特別な意味を持つので、もし
「Shift_JISの範囲外の文字が含まれる可能性」と「"%" が含まれる
可能性」の両方がある場合には、d) でデコードした結果に含まれる
"%" をすべて "%%" に置き換えます。
f) 以上の結果、半角スペースが出てきた場合には、必要に応じて
ダブルクォートでくくります。次の v) で呼び出す先によっては
ダブルクォートをつけてはいけない場合もあるので、注意が必要です。
v) 画像ファイルへの関連付けが画像ビューワの類になっている場合は、
そのまま上記のファイル名(フルパス、ダブルクォートあり)を
openbyshell に渡します。関連付けがPhotoshop等になっている場合は、
別途適宜の方法で画像ビューワを呼び出します。
たとえば、 Windows XP で試した限りでは、次のようなマクロを実行
すると、標準の「Windows 画像と FAX ビューア」が開きます。
runsync2 "rundll32 shimgvw.dll,ImageView_Fullscreen " +
getenv("USERPROFILE")+ @"\My Documents\My Pictures\WP\xxx.gif";
rundll32.exe に文字列を渡す場合、ダブルクォートでくくってはいけません。
また、このshimgvw.dll を使う場合には、デスクトップ以外のファイルは
絶対パスで指定する必要があります。
なお、rundll32.exe を使わずにdllfuncw() で直接このDLLを呼び出そうとも
してみたのですが、ちょっと試した限りではうまくいきませんでした。
もしこれが可能であれば上記の e) f) が省けるので、どなたか、その方法を
ご存知でしたら教えてください。
--
でるもんた・いいじま
|
|