テキスト抜き書きマクロ希望No.07410
白馬の王子様 さん 14/09/20 12:38
 
 初めまして。
秀丸を購入したのが昨日という新参者で、マクロのリクエストをお願いするのが、こ
のフォーラムで、こういう形でよいのかさえ分かりません。もし違っていたら、どこ
に書き込めばよいのか教えてください。
 さて、リクエストしたいマクロは、テキストファイルを読んでいて、「これは面白
い、メモしておこう」と思った箇所を、本文はそのまま残して、別ファイルに抜き書
きしてくれる、というものです。単にこれだけなら、copy & pasteで済みそうですが、
copy & pasteだと、読書の流れが邪魔されてしまいます。このマクロなら、範囲指定
して、マクロ起動だけで、(いわば裏で)抜き書きファイルが作られ、そこにその指
定箇所が次々、書き出されて蓄積されるのです。
 そして、(これが肝心なところですが)抜き書きファイルから、タグジャンプで元
のファイルの当該箇所にジャンプしてくれ、また、そこから抜き書きファイルにジャ
ンプも可能、というのが理想です。
 実は今まで、エーアイソフトという会社のBoon Editorというエディターを使って
いて、そこではこうしたマクロが実現できていたのですが、この度、多摩ソフトウエ
アのLightGrepという優れた検索ソフトのタグジャンプ機能のデフォルトに秀丸が採
用されていて、両者の連携がとても便利なことが分かり、秀丸に乗り換えようとして
いるのです。
 新参者の突然のお願いで恐縮ですが、よろしくお願いいたします。
(実は同内容の書き込みを誤って、別のフォーラムに投稿してしまいました。気づい
たのでそちらは削除し、こちらに投稿させていただきました。)
 
[ △ ]  


[ ]
RE:07410 テキスト抜き書きマクロ希望No.07411
IKKI さん 14/09/20 12:49
 
白馬の王子様さん、はじめまして。ユーザーのIKKIと申します。

ご希望のマクロは、こんな感じでいかがでしょうか。

// nukigaki.mac
$nukigaki = directory + "\\Nukigaki.txt";
$filename = filename;
$key = $filename + "(" + str(lineno) + "):";
$value = gettext2(0, lineno, 1024, lineno, true);
writeinistr $nukigaki, $filename, $key, $value;

このマクロを実行すると、読んでいるファイルと同じフォルダに "Nukigaki.txt" と
いうファイルが作られ、その中に抜き書き内容が保存されます。
INI ファイル形式になっていますが (マクロが簡単に作れるため)、通常のタグジャ
ンプが可能です。
ジャンプ先から抜き書きファイルに戻るには「バックタグジャンプ」コマンドを使い
ます。

以上、ご参考になれば幸いです。

[ ]
RE:07410 テキスト抜き書きマクロ希望No.07412
IKKI さん 14/09/20 12:58
 
すみません、要件を一部読み飛ばしていました。
「範囲指定してマクロ実行。指定箇所が書き出される」仕様でしたね。
これでいかがでしょう。

// nukigaki.mac
$nukigaki = directory + "\\Nukigaki.txt";
$key = basename + "(" + str(lineno) + "," + str(column) + "):";
if (selecting) {
 $value = gettext(seltopx, seltopy, selendx, selendy, true);
} else {
 $value = gettext2(0, lineno, 1024, lineno, true);
}
writeinistr $nukigaki, basename, $key, $value;

なお、タグジャンプ先のカーソル位置は常に行頭となります。
(タグジャンプで桁指定ってできるんでしたっけ? > 識者の皆さん)

[ ]
RE:07412 テキスト抜き書きマクロ希望No.07413
白馬の王子様 さん 14/09/20 13:46
 
IKKIさん、
 初めまして。白馬の王子です。
 こ、こんなに早く!!?びっくりして、言葉もありません。
これから試してみます。取り急ぎ、心よりお礼申し上げます。

白馬の王子

[ ]
RE:07412 テキスト抜き書きマクロ希望No.07414
h-tom さん 14/09/20 13:49
 

h-tom です。

>なお、タグジャンプ先のカーソル位置は常に行頭となります。
>(タグジャンプで桁指定ってできるんでしたっけ? > 識者の皆さん)
デフォルト機能では無理でしょう。
桁も合わせるとなると、専用マクロが必要かな?

INIファイル形式の欠点としては、Unicodeが使えないって所かな?
(Shift_JIS範囲外の文字は、"?"か"・"のどちらかに変換されるはず。)

Unicodeも必要な場合は、秀丸エディタ本体を使うか、COM経由でUTF-16LEの
ファイルを作るって所ですね。

[ ]
RE:07412 テキスト抜き書きマクロ希望No.07415
白馬の王子様 さん 14/09/20 14:14
 
IKKIさん、
 たった今、試しました。
 できました!!
 テキストファイルのあるドライブ、ディレクトリにちゃんとNukigaki.txtというフ
ァイルが!
 本文ファイルとNukigaki.txtの往復ジャンプも無事できました。
 ここで、改良希望点が2つあります。
 一つは、Nukigaki.txtを現状のように、本文ファイルと同じ所に保存すると同時に、
秀丸上で(裏Window上で)開いておいてほしい、ということ。
 もう一つは、Nukigaki.txtを本文ファイル名毎に作っていただきたいということ。
例えば、本文ファイルが「趣味の本.txt」だとしたら、
「趣味の本_抜き書き.txt」といった感じに。
 あと、できれば、各抜き書きの間は1行分スペースがあると、Nukigaki.txtが読み
やすくなりそうです。
 楽しみにしています。(なお、小生、これから外出の予定があり、帰宅は夕方にな
るかもしれません。お返事はその時までできませんが、あらかじめご了承ください。)

白馬の王子様

[ ]
RE:07415 テキスト抜き書きマクロ希望No.07416
IKKI さん 14/09/20 15:59
 
白馬の王子様さん、こんにちは。
改良版のマクロが末尾にあります。

・抜き書きファイル名を "<本文ファイル名>_抜き書き.txt" とする
・選択範囲が複数行にまたがる場合の対応 (改行を空白に置換する)
・同一行内で複数箇所の抜き書きに対応
・抜き書きファイルを別ウィンドウで開く (すでに開かれている場合は再読み込み)

> Nukigaki.txtを現状のように、本文ファイルと同じ所に保存すると同時に、秀丸
>上で(裏Window上で)開いておいてほしい
対応しましたが、アクティブウィンドウが一瞬切り替わるのは避けられません。
あらかじめ手動で開いておくだけで良いのではないでしょうか。
ファイルの排他制御の設定次第でお好みの動作になります。
《→ その他 - 動作環境 - 上級者向け設定 - 排他制御》

> あと、できれば、各抜き書きの間は1行分スペースがあると、Nukigaki.txtが読
>みやすくなりそうです。
これは可能ですが、INI ファイル形式の「1行1件」という前提と相性が悪く、「読み
やすくする」という目的に対する解決策としては筋が悪いと思います。
単に行間を広く設定するだけではいけませんか?
《→ その他 - ファイルタイプ別の設定 - 体裁 - 詳細 - 行間》

今後のマクロ作成のご参考になれば幸いです。

// nukigaki.mac
loaddll "hmjre.dll";
$nukigaki = leftstr(filename, strrstr(filename, ".")) + "_抜き書き.txt";
if (selecting) {
 $key = basename + "(" + str(seltoplineno) + "," + str(seltopcolumn) + "):";
 $value = gettext(seltopx, seltopy, selendx, selendy, true);
} else {
 $key = basename + "(" + str(lineno) + "," + str(column) + "):";
 $value = gettext2(0, lineno, 1024, lineno, true);
}
$value = dllfuncstr("ReplaceRegular", "\\r?\\n", $value, 0, " ", 2); // 改行
を空白に
writeinistr $nukigaki, basename, $key, $value;
freedll;
// ▼抜き書きファイルを開き、元のウィンドウをアクティブにする
#handle = hidemaruhandle(0);
openfile "/i /m4 " + $nukigaki;
setactivehidemaru #handle;

[ ]
RE:07416 テキスト抜き書きマクロ希望No.07417
白馬の王子様 さん 14/09/20 18:24
 
IKKIさん、
 先ほど帰宅し、早速改良版を試用しました。
 希望が見事に叶っていて、本当に嬉しいです。
 以下、項目毎に感想など。

>・抜き書きファイル名を "<本文ファイル名>_抜き書き.txt" とする
その通りになっていました。

>・選択範囲が複数行にまたがる場合の対応 (改行を空白に置換する)
実は改行のままの方が、原文のレイアウトが保持されて、私としては見やすいのです
が、空白に置換されていても実質困らないのでOKです。

>・同一行内で複数箇所の抜き書きに対応
これは私自身気づきませんでした。確かに同一行内で、短い語句や単語を抜き書きし
たいことはあるかもしれませんね。

>・抜き書きファイルを別ウィンドウで開く (すでに開かれている場合は再読み込み)
この機能のお陰で、以前の抜き書きなどを遡って確認するときなど、とても便利にな
りました。

>> Nukigaki.txtを現状のように、本文ファイルと同じ所に保存すると同時に、秀丸
>上で(裏Window上で)開いておいてほしい
>対応しましたが、アクティブウィンドウが一瞬切り替わるのは避けられません。
この一瞬の切り替わり、マクロがきちんと動作している証拠になってかえってありが
たいですよ。

>あらかじめ手動で開いておくだけで良いのではないでしょうか。
なるほど。そういう手もあるのですね。

>ファイルの排他制御の設定次第でお好みの動作になります。
>《→ その他 - 動作環境 - 上級者向け設定 - 排他制御》
これは「上級者向け設定」ということで、私は今のところパスします。

>> あと、できれば、各抜き書きの間は1行分スペースがあると、Nukigaki.txtが読
>みやすくなりそうです。
>これは可能ですが、INI ファイル形式の「1行1件」という前提と相性が悪く、「読
>みやすくする」という目的に対する解決策としては筋が悪いと思います。
 そういう前提があったとは知りませんでした。これについてはこだわりません。

>単に行間を広く設定するだけではいけませんか?
>《→ その他 - ファイルタイプ別の設定 - 体裁 - 詳細 - 行間》
そういう設定もあるのですね。凄いですね。

>今後のマクロ作成のご参考になれば幸いです。
私自身はマクロ作成にチャレンジする気力も体力もないのです。歳が歳ですので、マ
クロを勉強している内に、あの世からお呼びが掛かってしまいます。
 最後に、一つ、気になることが。
 h-tomさんのコメントで、このマクロでは、Unicode文字は扱えないようですね。私
はドイツ語やフランス語のテキストも扱うことがあるので、将来的にはUnicodeの抜
き書きも可能にしていただければ、ありがたいです。(当面は現状で御の字ですが。)
 ともあれ、この度は信じられない素早さで希望を叶えていただき、本当にありがと
うございました。
 今後もまた、何かでお世話になることもあると思います。その節はどうぞよろしく
お願いいたします。

白馬の王子様

[ ]
RE:07414 テキスト抜き書きマクロ希望No.07418
白馬の王子様 さん 14/09/20 18:32
 
h-tomさん、
初めまして。白馬の王子様です。
この度は、私のマクロ要望に対して、コメントをありがとうございました。

>>なお、タグジャンプ先のカーソル位置は常に行頭となります。
>>(タグジャンプで桁指定ってできるんでしたっけ? > 識者の皆さん)
>デフォルト機能では無理でしょう。
>桁も合わせるとなると、専用マクロが必要かな?
IKKIさんが作ってくださったマクロの仕様で、私としては何ら不便を感じないので、
現状で満足しています。

>INIファイル形式の欠点としては、Unicodeが使えないって所かな?
>(Shift_JIS範囲外の文字は、"?"か"・"のどちらかに変換されるはず。)
これは将来的には私にとっても大きな問題になりそうです。これまで私が使っていた
Boon EditorはUnicode非対応で、それも早くBoonから抜け出さないとまずいと思って
いた一因でした。

>Unicodeも必要な場合は、秀丸エディタ本体を使うか、COM経由でUTF-16LEの
>ファイルを作るって所ですね。
これは私には高度すぎる説明で「???」です。
今後ともよろしくお願いいたします。

白馬の王子様

[ ]
RE:07417 テキスト抜き書きマクロ希望No.07420
IKKI さん 14/09/20 19:18
 
白馬の王子様さん、こんばんは。お役に立ったようで何よりです。

> このマクロでは、Unicode文字は扱えないようですね。
はい、扱えません。Unicode を扱えるようにするのは、片手間の範囲を超えて2時間
ぐらいかかるかもしれません。

> 私はドイツ語やフランス語のテキストも扱うことがある
お試しいただければわかると思いますが、ドイツ語とフランス語で使われる Unicode
 文字は次のように変換されます。
・アクセント付きアルファベット → 対応するアクセントなしアルファベット
・エスツェット → s
・ギュメ → ≪≫
・下付き二重引用符 → ?
・上付き二重引用符 → “
なので、とりあえずアクセントを脳内補完していただければ、使い物にはなるんじゃ
ないかと思います。

[ ]
RE:07414 テキスト抜き書きマクロ希望No.07421
IKKI さん 14/09/20 19:21
 
h-tom さん、コメントありがとうございました。

>桁も合わせるとなると、専用マクロが必要かな?
ですね。
ちなみにサクラエディタは filename(行,桁): 形式のタグジャンプに対応してるっぽ
いです。

>INIファイル形式の欠点としては、Unicodeが使えないって所かな?
>(Shift_JIS範囲外の文字は、"?"か"・"のどちらかに変換されるはず。)
もう少し賢く、なるべく (人間にとって) 意味が失われないように変換してくれるよ
うでした。

>Unicodeも必要な場合は、秀丸エディタ本体を使うか、COM経由でUTF-16LEの
>ファイルを作るって所ですね。
ht_tools.dll の INI ファイル関連機能は Unicode 非対応ですか?

[ ]
RE:07420 テキスト抜き書きマクロ希望No.07422
白馬の王子様 さん 14/09/20 19:49
 
IKKIさん、
 今日は一日中、付きっ切りでお世話になりました。本当にありがとうございました。

>> このマクロでは、Unicode文字は扱えないようですね。
>はい、扱えません。Unicode を扱えるようにするのは、片手間の範囲を超えて2時間
>ぐらいかかるかもしれません。
長年「Boon Editorが使えなくなったら、抜き書きマクロも使えなくなる、どうしよ
う…」と思い悩んでいたのが、秀丸使用2日目で解決してしまったのですから、贅沢
は言えません。将来、いつの日か、ということで、お願いできればと思います。完成
したら、マクロライブラリーに登録していただければ、きっと喜ぶユーザーも出てく
ると思います。

>> 私はドイツ語やフランス語のテキストも扱うことがある
>お試しいただければわかると思いますが、ドイツ語とフランス語で使われる Unicod
>e 文字は次のように変換されます。
>・アクセント付きアルファベット → 対応するアクセントなしアルファベット
>・エスツェット → s
>・ギュメ → ≪≫
>・下付き二重引用符 → ?
>・上付き二重引用符 → “
>なので、とりあえずアクセントを脳内補完していただければ、使い物にはなるんじ
>ゃないかと思います。
それは朗報です。そうでしたか。それで当面は十分役立ちます。

白馬の王子様

[ ]
RE:07421 テキスト抜き書きマクロ希望No.07424
h-tom さん 14/09/20 20:30
 

h-tom です。

>ht_tools.dll の INI ファイル関連機能は Unicode 非対応ですか?
・WriteIniStrW
・GetIniStrW
というワイド文字用関数がありますが、iniファイルで、Unicodeを使うのは、
注意が必要です。

最初に書き込む場合、空のファイルをUTF-16LEであらかじめ作っておかないと、
システムロケール(Shift_JIS)になってしまうんですよね。
Unicode版WindowsAPIを呼び出しているはずなのに、なぜかUnicodeにならない
ので、Unicodeで作っているつもりが、中身はShift_JISという状態になります。

現状、その辺り手を抜いているので、使いづらいです。

別件で、ht_tools.dll を修正するかもしれないので、ちょっと考えます。
Unicode用iniファイル作成用関数を追加するか、"WriteIniStrW"でファイルが
なければ問答無用でファイルを作ってしまうか。

[ ]
RE:07424 テキスト抜き書きマクロ希望No.07425
IKKI さん 14/09/20 20:36
 
なるほど…

> 問答無用でファイルを作ってしまうか。
やるならこっちでしょうね。

# ところで ht_tools 用スペルチェックマクロはお蔵入りですか? (^^)

[ ]
RE:07425 テキスト抜き書きマクロ希望No.07429
h-tom さん 14/09/20 22:08
 

h-tom です。

>> 問答無用でファイルを作ってしまうか。
>やるならこっちでしょうね。
やっぱりそうですよね。

># ところで ht_tools 用スペルチェックマクロはお蔵入りですか? (^^)
お蔵入りどころか、hunspellがバージョンアップしていたので、コンパイル
作業中です。躓いてますが・・・。
#DLLと辞書ファイルがあればいいので、インストールは楽なんですよね。

タイマー系の自動起動マクロ使って、表示している範囲だけスペルチェック
とかやってみたけど、さすがに処理速度が問題でした。

結局、秀丸マクロのチェックや、webページ内の表記統一などにつかってます。

[ ]