テーマ:未分類(甘党)

日々、思いついたことを記録します。

キーボードマクロの一時退避して、それを実行するマクロを作成中

2007年06月29日 05時41分40秒 | 秀丸エディタ Tips
セキセイニャンコ(nyan)さんの秀丸マクロ集 NYANKEY ver 3 ...文字列 Cut&Paste バッファ× 280個 なども使い始めました。

ちなみに、NYANKEYのデフォルトの「Alt+[英字]」だと、メニュー操作ができなくなってしまうので、私は、「Shift+Ctrl+Alt」で登録、「Shift+Alt」挿入にしてみました。さすがに、「Shift+Ctrl+」は、いろいろと、すでに、割り当て済みのものが多く、Altに関連したショートカットは、システムのものしか使っておらず、「Shift+Ctrl+Alt」と「Shift+Alt」が、まるまる、空いていたもので。

あとは、昨日作った「CBHistCap」と、longringさん作のクリップボード履歴から貼り付けマクロを、あわせると、もう、テキストを一時的に保存する場所が、これまでのクリップボード一つから、とんでもなく、たくさん用意ができて、すごいことになってきました。(使いこなすまで、少し、慣れが必要そうですが。)

まずは、テキストのバッファ場所については、もう、満足した感じなのですが、あと、欲しいのが、キーボードマクロのバッファ領域ですね。

私は、キーボードマクロは、非常に、頻繁に使用していて、さらに、キーボードマクロを、その場で、ちょっと、テンポラリに保存して、別のキーボードマクロを作って、また、テンポラリに復帰したキーボードマクロを復帰させるようなこともしています。

このキーボードマクロをちょっと保存/復帰するのが、今は、ちょっと、面倒で、以前から、なんとかしたいなぁと思っていました。特に、大昔、DOS版のMifesを使っていた頃は、キーボードマクロを、すぐに、英字キーバッファに登録ができて、いくつかのキーボードマクロを連続的に指定して編集作業をしていたりしていたので、その点では、DOS版の頃の方が、快適な部分のありました。

で、昨日作った「CBHistCap」を拡張していくと、たぶん、テキストのバッファ機能については、とりあえず、満足しつつあるので、こんどは、調子付いて、キーボードマクロのバッファについて、作ろうと思い始めてしまっています。

ところが、秀丸エディタのマクロで、キーボードマクロの内容を保存する方法が分からずに、難儀をしています。
キーボードマクロで、キーボードマクロの保存や復帰を記録して、秀丸エディタが作ったマクロを参照すると、どうやら、loadrecordとか、saverecordなんて文を吐き出しましたが、ただ、これらの文は、単にダイアログボックスを開いて、そのダイアログボックスを閉じるまで、マクロの実行が止まってしまいます。

こうなると、どうしようもなくて、もしかしたら、レジストリに、キーボードマクロの内容が入っているのかもしれませんが、それより、思いついてしまったのが、この秀丸エディタが出したダイアログボックスをWSHのVBScriptで操作してしまおうと考えてしまいました。

で、いろいろ、試行錯誤した挙句に、とりあえず、キーボードマクロを登録するエンジン部分が実験的に動いて、ほっとしたのですが、ただ、今、Shift+Ctrl+Alt+[数字]に、このキーボードマクロ登録のマクロを割り当てたら、ちょっと、秀丸エディタが、おかしな動きをしています。(例えば、Shift+Ctrl+Alt+1に割り当てたマクロは、Shift+Ctrl+Altを押しながら、[1]を押して、Shift+Ctrl+Altをおしたままの状態にして、もう一度、[1]を押さないと、マクロにキックがかかりません???)

ちょっと、さっきから、いろいろと、WSHを吹っ飛ばしているが、システムが変にしてしまっているのかなぁ、、、。

で、とりあえず、ここまで、コーディングしたところをバックアップしたいのですが、さすがに、全くの作成途中なので、保管庫に、アーカイブファイルを置くのもなんなので、v0.00000000000000000000000000000001として、このあとに、テキストをペーストしておこうと思います。


このできた暁には、複数のキーボードマクロを[1]~[9]に関連したショートカットキーに割り当てて、キーボードマクロを組み合わせて、編集ができるようになるはずで、昔のDOS版Mifesの操作感に近づきそうです。

KBMCap.mac v0.00000000000000000000000000000001

2007年06月29日 05時28分17秒 | 秀丸エディタ Tips
以下は、作りかけのソースのバックアップです。
---------------------

//
// キーボードマクロ取り込み用秀丸マクロ
$TITLE_STRING = "KBMCap.mac v0.00000000000000000000000000000001";
//
// Copyright (C) 2007 ymiz777
//
// このマクロは、[1]~[9]に関連したショートカットキー(Shift++Ctrl+Alt+[数字]等)に割り付けてください。
// キーボードマクロの内容を、[1]~[9]に関連したショートカットキー(Shift+Alt+[数字]等)に割り付けます。
// $SAVE_DIRに指定されたディレクトリに、キーボードマクロの内容のマクロファイルを作成します。
// 数字キーに対応して、保存した日時をiniファイルに保存します。

// 同じフォルダに、以下のファイルを置いてください。
$INI_FNAME = currentmacrodirectory + "KBMCap.ini";     // iniファイル名
// CBHistCapCall.mac v0.01                                // このマクロと対で使用する、このマクロで保存したマクロファイル呼び出し用マクロ
//なお、CBHistCapCall.macのマクロは、数字キー[1]~[9][0]に関連したショートカットキーを割り当ててください。
//
// 秀丸エディタのマクロでは、「キー操作の保存」ダイアログを表示しかできない。このため、WSHで、外部からキー操作をシミュレーションして、保存する。

// タイトルの変更
$titlebar = $TITLE_STRING + "の実行中";
title $titlebar;

///////////////////////////
// 押されたキーのスキャン([0]~[9]キー) (なんとなく、早めにチェックしてみた。)
///////////////////////////
#key = 1;    // [0]=0x30 ~ [9]=0x39
while ( #key < 10 ) {
    if (iskeydown(#key+0x30)) {
        break;
    }
    #key = #key + 1;
}


///////////////////////////
// iniファイルの処理
///////////////////////////
//デバッグモード(0:通常モード、1:デバッグモード)
#DEBUG_FLAG = getininum($INI_FNAME, "HidemaruControl", "DEBUG_FLAG");
if (#DEBUG_FLAG == 1) {
    $debuginfo_title = "[" + currentmacrobasename + "]";    // debuginfo出力のタイトル
    debuginfo 1;        // debuginfo出力の有効化
    debuginfo $debuginfo_title + "Debug Mode : On";
//    $run_options = " //Nologo //X ";        // .macのdebuginfoとVBスクリプトのデバッガ有効にする場合。今回は、デバッガは、使えない。
    $run_options = " //Nologo ";            // .macのdebuginfoだけで、VBスクリプトのデバッガ無効にする場合
}

//取り込んだキーボードマクロの保存ファイルを作成するディレクトリ
$SAVE_DIR = getinistr($INI_FNAME, "CaptureFunction", "SAVE_DIR");
if (leftstr($SAVE_DIR,1)==".")
    // 現在実行中のマクロのフォルダの下にディレクトリを作成する場合
    $SAVE_DIR = currentmacrodirectory + rightstr($SAVE_DIR,strlen($SAVE_DIR)-1);
else if ((leftstr($SAVE_DIR,1)=="%") && (rightstr($SAVE_DIR,1)=="%"))
    // 環境変数を参照する場合
    $SAVE_DIR = getenv(midstr($SAVE_DIR,1,strlen($SAVE_DIR)-2));
debuginfo $debuginfo_title + "$SAVE_DIR : "" + $SAVE_DIR + """;

// キーボードマクロを保存するファイル名のプリフィックスと拡張子
$SAVE_FNAME_PREFIX = getinistr($INI_FNAME, "CaptureFunction", "SAVE_FNAME_PREFIX");
debuginfo $debuginfo_title + "$SAVE_FNAME_PREFIX : "" + $SAVE_FNAME_PREFIX + """;
$SAVE_FNAME_EXT = getinistr($INI_FNAME, "CaptureFunction", "SAVE_FNAME_EXT");
debuginfo $debuginfo_title + "$SAVE_FNAME_EXT : "" + $SAVE_FNAME_EXT + """;

//キーボードマクロ履歴を保存する個数
#MAX_NUM_OF_CAPTURE = getininum($INI_FNAME, "CaptureFunction", "MAX_NUM_OF_CAPTURE");
debuginfo $debuginfo_title + "#MAX_NUM_OF_CAPTURE : " + str(#MAX_NUM_OF_CAPTURE);

// 呼び出しメニューデータのセクション名とキープリフィックス
$CALL_MENU_SECSSION_NAME = getinistr($INI_FNAME, "CaptureFunction", "CALL_MENU_SECSSION_NAME");
debuginfo $debuginfo_title + "$CALL_MENU_SECSSION_NAME : "" + $CALL_MENU_SECSSION_NAME + """;
$CALL_MENU_KEY_PREFIX = getinistr($INI_FNAME, "CaptureFunction", "CALL_MENU_KEY_PREFIX");
debuginfo $debuginfo_title + "$CALL_MENU_KEY_PREFIX : "" + $CALL_MENU_KEY_PREFIX + """;

// WSHのEXEファイル名
$WSH_EXE_FNAME = getinistr($INI_FNAME, "CaptureFunction", "WSH_EXE_FNAME");
debuginfo $debuginfo_title + "$WSH_EXE_FNAME : "" + $WSH_EXE_FNAME + """;

// VBSファイル名
$VBS_FNAME = currentmacrodirectory + "" + getinistr($INI_FNAME, "CaptureFunction", "VBS_FNAME");
debuginfo $debuginfo_title + "$VBS_FNAME : "" + $VBS_FNAME + """;


//////////////
//秀丸エディタにおける「キー操作の保存」ダイアログボックス関連のキー
//////////////
//ダイアログ上のキーシーケンス(クリップボード貼付、[Enter]キー)
$KEY_SEQUENCE = getinistr($INI_FNAME, "SaveRecordDialogBox", "KEY_SEQUENCE");
debuginfo $debuginfo_title + "$KEY_SEQUENCE : "" + $KEY_SEQUENCE + """;

//タイムアウト時のエラーメッセージ
$TIMEOUT_ERROR_MESSAGE = getinistr($INI_FNAME, "SaveRecordDialogBox", "TIMEOUT_ERROR_MESSAGE");
debuginfo $debuginfo_title + "$TIMEOUT_ERROR_MESSAGE : "" + $TIMEOUT_ERROR_MESSAGE + """;

//ウィンドウタイトル
$WINDOW_TITLE_OPTION = getinistr($INI_FNAME, "SaveRecordDialogBox", "WINDOW_TITLE_OPTION");
debuginfo $debuginfo_title + "$WINDOW_TITLE_OPTION : "" + $WINDOW_TITLE_OPTION + """;

//タイムアウト値(秒)
$TIMEOUT_OPTION = getinistr($INI_FNAME, "SaveRecordDialogBox", "TIMEOUT_OPTION");
debuginfo $debuginfo_title + "$TIMEOUT_OPTION : "" + $TIMEOUT_OPTION + """;


///////////////////////////
// 各種初期化
///////////////////////////
//ディレクトリ作成コマンド
$MD_COMMAND = getenv("ComSpec") + " /C " + "MKDIR ";
$MD_COMMAND_OPT = " >NUL";

//ファイル削除コマンド
$DEL_COMMAND = getenv("ComSpec") + " /C " + "DEL ";
$DEL_COMMAND_OPT = " >NUL";

// 表示メッセージ作成用一時変数
$message_str = "";

// 保存ファイル作成用一時変数
$save_fname = "";

// ★[TODO]まずは、クリップボード履歴が有効になっているかどうかをチェック


// ファイルを保存するディレクトリ作成
// ★[TODO]新規であれば、ディレクトリ作成の確認をしたい。
$md_commandline = $MD_COMMAND + " "" + $SAVE_DIR + """ + $MD_COMMAND_OPT;
debuginfo $debuginfo_title + "$md_commandline=" + $md_commandline;
run $md_commandline;


///////////////////////////
// メイン処理部スタート
///////////////////////////

if ((1<=#key) && (#key<=#MAX_NUM_OF_CAPTURE)) {
    // このマクロが、[1]~[#MAX_NUM_OF_CAPTURE]の数字キーに関連したショートカットキーで起動された場合

    //キーボードマクロ保存ファイル名の生成
    $save_fname = $SAVE_DIR + "" + $SAVE_FNAME_PREFIX + str(#key) + $SAVE_FNAME_EXT;
    debuginfo $debuginfo_title + "$save_fname=" + $save_fname;

    // キーボードマクロ保存ファイルの削除(★[TODO]本当は、削除できているかどうかを確認したいところ。->ROの場合など)
    $del_commandline = $DEL_COMMAND + " "" + $save_fname + "" " + $DEL_COMMAND_OPT;
    debuginfo $debuginfo_title + "$del_commandline=" + $del_commandline;
    run $del_commandline;

    // VBSのキー操作は、クリップボード経由で、「キー操作の保存」ダイアログボックスのファイル名にペーストして、[Enter]というキー操作をシミュレーションする。
    // ★[TODO] クリップボードを壊さないように、ヒストリ機能が有効/無効をチェックして、無効であれば、一時、現在のクリップボードの内容を退避する必要がある。
    beginclipboardread;
    setclipboard $save_fname;
    debuginfo $debuginfo_title + "set clipboard...";

    // vbsの呼び出し : $run_commandline = "wscript //Nologo KBMCap.vbs "^V{Enter}" "キーボードマクロを保存できませんでした。" /W:"キー操作の保存" /T:3";
    $run_commandline = """ + $WSH_EXE_FNAME + "" " + $run_options + " "" + $VBS_FNAME + "" "" + $KEY_SEQUENCE + "" "" + $TIMEOUT_ERROR_MESSAGE + "" " + $WINDOW_TITLE_OPTION + " " + $TIMEOUT_OPTION;
    debuginfo $debuginfo_title + "$run_commandline=" + $run_commandline;
    run $run_commandline;

    // キー操作の読込みダイアログボックスを開く
    saverecord;

    // ★[todo]念のため作成ファイルのチェックと、クリップボードの復帰

    // ★[todo]iniへの登録
}
else {
    // このマクロが、[1]~[9]の数字キーに関連しないショートカットキーで起動された場合

    // ★[TODO]メニューを表示して、登録させる
}

endmacro;


KBMCap.vbs v0.00000000000000000000000000000001

2007年06月29日 05時26分48秒 | 秀丸エディタ Tips
以下は、作りかけのソースのバックアップです。
---------------------

'=============================================
'KBMCap.vbs v0.00000000000000000000000000000001
'
' Copyright (C) 2007 ymiz777
'=============================================
'
'■ 機能
' 与えられた起動パラメータに従って、WSHShell.SendKeysを発行します。
'
' 起動方法については、DispUsageプロシージャの内容を参照してください。
'
' WSHShell.SendKeysのキーシーケンスについては、以下を参照
'http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/script56/html/wsmthsendkeys.asp
'
'■ バージョン履歴
'○ v0.01 (2007/6/28)
'機能評価用(α版)/バックアップ版
'
'
Option Explicit         ' 変数宣言をチェック
const APP_NAME = "KBMCap"
const VBS_TITLE = "KBMCap.vbs v0.01"    ' メッセージボックスのタイトルとバージョン
const SUCCESS_MESSAGE = "SUCCESS"
const FAIL_MESSAGE = "FAIL"

' 引数処理関連
Dim objWshUnnamed        ' /なし引数コレクション
Set objWshUnnamed = WScript.Arguments.Unnamed
Dim objWshNamed         ' /から始まる引数コレクション
Set objWshNamed = WScript.Arguments.Named
Dim strSendKeys            ' SendKeysするキー列
Dim strErrorMsg            ' /Wに指定されたウィンドウ検索がタイムアウトしたときのエラーメッセージ
Dim strAppActivate        ' アクティベートするウィンドウタイトル
Dim strAbortTime        ' アクティベートウィンドウ待ち時間

'時間監視用
Dim timeStart            '時間監視スタート時点のかTime関数値
Dim timeDiff
Dim boolFindStat        'アクティベートウィンドウ検索結果
boolFindStat = False

' その他
Dim objWSHShell        ' "WScript.Shell"オブジェクト
Dim numReturn        ' スクリプトの戻り値 (0が正常終了、その他は、DispUsageを参照のこと。)
numReturn = -1        ' デバッグ用


'-----------------------------
' メイン処理スタート
'-----------------------------
' "キーシーケンス" /W:ウィンドウ名 /T:時間の形式のチェック
If (objWshUnnamed.Count <= 2) And objWshNamed.Exists("W") And objWshNamed.Exists("T") Then
    ' SendKeysするキー列
    strSendKeys = objWshUnnamed(0)

    If objWshUnnamed.Count = 2 Then
        ' /Wに指定されたウィンドウ検索がタイムアウトしたときのエラーメッセージ
        strErrorMsg = objWshUnnamed(1)
    Else
        strErrorMsg = ""
    End If

    ' アクティベートするウィンドウタイトル
    strAppActivate = objWshNamed.Item("W")

    ' アクティベートウィンドウ待ち時間
    strAbortTime = CInt(objWshNamed.Item("T"))

    Set objWSHShell = WScript.CreateObject("WScript.Shell")

    timeStart = Timer
    timeDiff = Timer - timeStart
    Do While timeDiff < strAbortTime
        boolFindStat = objWSHShell.AppActivate( strAppActivate )
        If  boolFindStat = True Then
            Exit Do
        Else
            WScript.Sleep 300         '0.3秒ウェイト
        End If
        timeDiff = Timer - timeStart
    Loop

    If boolFindStat = True Then
        WScript.Sleep 100     '0.1秒ウェイト
        objWSHShell.SendKeys strSendKeys
'        WScript.Echo SUCCESS_MESSAGE
        numReturn = 0        ' 正常終了
    ElseIf strErrorMsg <> "" Then
        WScript.Echo strErrorMsg
    Else
        ' メッセージ無し
    End If
Else
    DispUsage
    numReturn = 1        ' 指定形式の間違え
End If

WScript.quit numReturn



' 使用方法の表示
Private Sub DispUsage
    WScript.Echo _
        VBS_TITLE & vbCrLf & vbCrLf & _
        "○ 使用方法" & vbCrLf & _
        "  cscript.exe " & APP_NAME & ".vbs ""キーシーケンス"" ""エラーメッセージ"" /W:ウィンドウ名 /T:時間 //Nologo" & vbCrLf & _
        "    キーシーケンス : WSHShell.SendKeysに引き渡す文字列" & vbCrLf & _
        "    エラーメッセージ : /Wに指定されたウィンドウ検索がタイムアウトしたときのエラーメッセージ" & vbCrLf & _
        "    ウィンドウ名 : WSHShell.AppActivateに引き渡す文字列" & vbCrLf & _
        "    時間 : WSHShell.AppActivateループ時間(秒)" & vbCrLf & _
        "○ 機能" & vbCrLf & _
        "  与えられた起動パラメータに従って、WSHShell.SendKeysを発行します。" & vbCrLf & _
        "○ 戻り値" & vbCrLf & _
        "  0 : 正常終了" & vbCrLf & _
        "  1 : 指定形式間違え" & vbCrLf & _
        "  2 : ウィンドウが見つからない" & vbCrLf & _
        ""
End Sub



KBMCap.ini v0.00000000000000000000000000000001

2007年06月29日 05時18分20秒 | 秀丸エディタ Tips
以下は、作りかけのソースのバックアップです。
---------------------


; キーボードマクロ取り込みコンフィグレーション v0.00000000000000000000000000000001

;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
[HidemaruControl]
;デバッグモード(0:通常モード、1:デバッグモード)
DEBUG_FLAG=1

;KBMCap.mac割り当てる数字キーと組み合わせるショートカットキー
;INS_SHORTCUTKEY=Alt
;INS_SHORTCUTKEY=Shift+Ctrl
;INS_SHORTCUTKEY=Shift+Alt
;INS_SHORTCUTKEY=Ctrl+Alt
INS_SHORTCUTKEY=Shift+Ctrl+Alt

;CBHistCapCall.mac割り当てる数字キーと組み合わせるショートカットキー
;INS_SHORTCUTKEY=Alt
;INS_SHORTCUTKEY=Shift+Ctrl
INS_SHORTCUTKEY=Shift+Alt
;INS_SHORTCUTKEY=Ctrl+Alt
;INS_SHORTCUTKEY=Shift+Ctrl+Alt

;;;;;;;;;;;;;;
;;;;;;;;;;;;;;
[CaptureFunction]
;取り込んだキーボードマクロの保存ファイルを作成するディレクトリ(「.」はマクロファイルのあるディレクトリパス、「%..%」で環境変数)
SAVE_DIR=.KBMCapDat
;SAVE_DIR=.
;SAVE_DIR=%TEMP%
;SAVE_DIR=C:TempKBMCapDat

; キーボードマクロを保存するファイル名のプリフィックスと拡張子
SAVE_FNAME_PREFIX=~KBMCapKey
SAVE_FNAME_EXT=.mac

;キーボードマクロ履歴を保存する個数(注意:現状のKBMCap/CBHistCapCallは、最大9個までしか対応していません。)
MAX_NUM_OF_CAPTURE=9

; 呼び出しメニューキーのプリフィックス

; 呼び出しメニューデータのセクション名とキープリフィックス
CALL_MENU_SECSSION_NAME=CallMenu
CALL_MENU_KEY_PREFIX=CallKey

; WSHのEXEファイル名
WSH_EXE_FNAME=wscript.exe

; VBSファイル名
VBS_FNAME=KBMCap.vbs

;;;;;;;;;;;;;;
;秀丸エディタにおける「キー操作の保存」ダイアログボックス関連のキー
;;;;;;;;;;;;;;
[SaveRecordDialogBox]
;ダイアログ上のキーシーケンス(クリップボード貼付、[Enter]キー)
KEY_SEQUENCE="^V{Enter}"
;KEY_SEQUENCE="^V"  ; for debug

タイムアウト時のエラーメッセージ
TIMEOUT_ERROR_MESSAGE="キーボードマクロを保存できませんでした。"

;/W:ウィンドウタイトル
WINDOW_TITLE_OPTION=/W:"キー操作の保存"

;/T:タイムアウト値(秒)
TIMEOUT_OPTION=/T:5


;;;;;;;;;;;;;;
;秀丸エディタにおける「キー操作の読込み」ダイアログボックス関連のキー
;;;;;;;;;;;;;;
[LoadRecordDialogBox]
;ウィンドウタイトル
WINDOW_TITLE=キー操作の読込み

;ダイアログ上のキーシーケンス(クリップボード貼付、[Enter]キー)
KEY_SEQUENCE=^V{Enter}

;タイムアウト値(秒)
TIMEOUT=5

タイムアウト時のエラーメッセージ
TIMEOUT_ERROR_MESSAGE=キーボードマクロを読込みできませんでした。


[CallMenu]
; 空白は、未登録。登録時は、登録時の日付を付与。
CallKey1=
CallKey2=
CallKey3=
CallKey4=
CallKey5=
CallKey6=
CallKey7=
CallKey8=
CallKey9=


秀丸エディタのマクロって、、、公開マクロがありすぎるのも大変、、、

2007年06月28日 04時52分17秒 | 秀丸エディタ Tips
最近、秀丸エディタのマクロばかり、書いていて、そろそろ、秀丸エディタ本体のマクロの機能は、だいたい、把握できていて、最初の頃のように、ヘルプファイルを読んでいる時間がなくなった分、軽快にマクロを書くことができるようになったような気がします。

ただ、秀丸エディタのマクロは、世の中に、たくさんありすぎて、まずは、自分の要求を満たすようなマクロを探したり、似たようなものがいくもあったりして、どれが一番良いのかを比較/評価したりするのが、大変ですね。

今は、HTMLのタグや特殊文字を、簡単に挿入できるようなマクロを探そうとしていますが、このあたりのHTML関連のマクロは、何が、良いかを決めるのは、大変そうですね。

ちょっと前までメインで、長年使っていたAkiraエディタは、それ自体の基本的な機能、使い心地と、自分で作ったマクロ群で、大体満足仕切ってしまっていて、たぶん、10年以上使い続けてしまっていたのですが、あとは、HTML関連の編集機能が組み込めれば、Akiraエディタと、大体、同程度の使い心地になりそうです。(ただ、やはり、実は、タブより、MDIの方が、性にあっているが、これは、時代の趨勢にあわせるしかないですね。)

あと、ここまでは、秀丸エディタ本体のマクロ機能しか理解していませんが、杉浦まさき氏作成の「田楽DLL」とかも便利そうですし、ませま氏作成の「キー割り当て拡張マクロ」及びその関連マクロ、とか、IKKI氏作成の「CompleteX」及びその関連マクロ、とか、いろいろと便利そうなものがたくさんあるので、このあたりの調査して、使いこなすと、すごい環境になるかもしれませんね。


GoogleCalcのToDo

2007年06月28日 04時21分35秒 | 秀丸エディタ Tips
GoogleCalcのToDo以降、ちょっとずつしか使っていませんが、その後に、思ったことを忘れないうち、メモにしておこうと思います。

・秀丸エディタの閲覧モードの考慮

・結果が10進数値のときの3桁区切りが、スペースになっているのをカンマ(,)に置き換えたい。

・GoogleCalも最初の一回目が遅いが、これは、たぶん、技術的に回避不能なはずなので、考えないことにする。(ただ、ちょっとした単純計算で、わざわざ、Googleを呼び出さなくても良いかと思い出している。)

・どうやら、PCの環境(というかウィルスチェックソフト)によっては、WSHが使用できなかったり、警告がでたりするようだ。要調査。

※ それにより、実際に、使っていて、結構、面白いマクロだと思い出してきて、それに、単純な機能の割りに、苦労したこともあいまって、正式なところに、アップロードして、公開版を作り出してきたくなってきました。とっとと、評価したり、せめて、ソースコードは、綺麗にしないとね。


CBHistCapのToDo

2007年06月28日 04時11分46秒 | 秀丸エディタ Tips
秀丸エディタのクリップボード履歴機能についての最後の方で、longringさん作のクリップボード履歴から貼り付けマクロ 2007/04/22を便利に使い出したのですが、当然ですが、クリップボードに新たなデータを追加すると、この履歴は、動いてしまい、そのうちに、参照していたデータが、このメニューから消えてしまうわけです。

そこが、今一歩、使いづらかったので、今回、CBHistCapのようなものを作ろうとしています。

とりあえず、動作するような、機能評価用のものを作ってみたので、まずは、動作確認がてら、自分で使って、使い勝手等をみたいとチェックしようか思っていますが、今のところ、以下のようなことを考えています。

○ 動作速度問題
特に、キャプチャ時に、ちょっと、思考を止めてしまうほどの速度になってしまっているような気がする。
現状のデータ構造は、各データをファイル化して、挿入時に、insertfileを使って、安直な構造で実現してしまったが、構造が単純すぎたのだろうか?
メニュー作成の処理は、たいしたことがなさそう。メニューの幅を変えてみたが、あまり、処理時間に影響は無く、やはり、登録個数に比例しているような感じがする。(まだ、実測はしておらず、感じなので、まずは、何が遅いのかを突き止める必要がありますね。)
もしかしたら、(ステルスモードの)秀丸エディタを使ってのファイル作成ではなく、標準入出力に関連したものを利用して、ファイル化すると速くなるかもしれない。
さらには、たぶん、複数のファイルを作成しているのが、一番の根本原因のようだから、データ構造を大きく見直して、ひとつのファイルに、データを集めることも検討する必要があるかも?(ここまでやることは、ないような気がするが、忘れないうちに、メモをしておいただけ。)

○ その他の細かい確認
取り込み時のメッセージが変か?
文字コードの混合でうまく動作するのか?
条件出しができていないが、異常終了するときが何度かあった。


<< 今後の機能拡張のアイデア >>
・挿入メニューでのクリップボードに取り出すモード
秀丸エディタ上で、普通に使うときは、カーソル位置に挿入するが、メニューの下に、クリップボードへの転送モードに切り替える項目を追加して、クリップボードへの転送モードに切り替えてから、メニューから選択するようにすると、便利なるケースがあるかなぁ???

・取り込み時のリバースモード
取り込みのためのテキストを選択しているときに、最初のテキストを選ぶときに心の中で"1"とつぶやき、次のテキストを"2"とつぶやいているのですが、結局、貼り付けるときは、これが反対になるので、一度は、挿入メニューを表示させて、内容を確認する必要があります。そこで、「取り込み時のリバースモード」を、挿入メニューの下に追加したいなぁ。「取り込み時のリバースモード」にすると、まず、そこで、クリップボード履歴がクリアされて、新たに、履歴を取り出すことになり、そして、クリップボード履歴をキャプチャすると、こんどは、古いものから順にキャプチャをするような感じの機能。(一度、キャプチャしたら、通常のモードに戻す必要がありそう。)

・削除モード、最新の内容を追加
一度、キャプチャしたものから、データを削除したり、最新(現在のクリップボード)の内容を追加するような機能を追加できると、便利になるかも?

・ ショートカットキーの割り付け変更とか、自動割付とか
今回、即挿入で使用するショートカットキーを[1]~[9]に関連したキーに固定してしまったが、もう少し、柔軟にコンフィグレーションできるようにすると、良いかもしれない。ただ、それより、[1]~[9]に関連したショートカットキーの割付作業が、あまりに、面倒すぎるので、iniファイルを参照して、自動的に、割付るような機能は、ぜひ、実現したいなぁ。

※ このブログのテキストを書くときから、大活躍中で、結構、便利かも。

クリップボード履歴の取り込み用秀丸マクロ v0.01 << 機能評価用(α版) >>

2007年06月28日 03時27分42秒 | 秀丸エディタ Tips
秀丸エディタのクリップボード履歴の機能は、素晴らしいものですが、履歴されたクリップボードの内容を、秀丸エディタのクリップボード履歴ダイアログボックスを使って、ランダムに参照するのは、少し、手順が面倒なところがあります。

また、あとから、何度も参照するようなテキストを、クリップボード履歴から取り出すような使い方をした場合、編集作業中に、クリップボードを使用していると、参照したいデータが何番目にあるのか、不確定で、すばやく参照することも困難です。

このマクロが実現する以下の機能により、後から参照するであろうテキスト群を、とりあえず、クリップボードにコピーして、クリップボードの履歴に入れ、その時点のクリップボードの履歴を取り込んで、あとから、簡単に挿入することができるようになります。

・クリップボード履歴のその時点での最新9個分の内容の取り込み

・ 取り込みデータをメニューから選択して、カーソル位置に挿入

・ 取り込みデータを[1]~[9]の数字キーに関連したショートカットキー(例えば、Alt+[1]~Alt+[9])で、メニュー番号に対応したデータを即時挿入

ファイルのダウンロードは、以下からできるようにしてあります。
甘党のプログラマのファイル保管庫」の「秀丸エディタ関連のマクロ」ページの「■ クリップボード履歴ダンプマクロ」

秀丸エディタのクリップボード履歴機能について

2007年06月26日 16時35分30秒 | 秀丸エディタ Tips
秀丸エディタのクリップボード履歴機能について

ここのところ、秀丸エディタのマクロ作成を楽しんでいます。

で、先ほど、ちょこっと、作ってみたのが、秀丸エディタのクリップボード履歴の全データを吐き出すマクロでした。(ほとんど、私がマクロを作って楽しむことが目的のもので、他の人にとっては、有用な感じがしないような気もしますが、、、。)

ところで、秀丸エディタも含めて、クリップボード履歴機能を使って、文章を構成するような使い方ができないでいます。

次につくる文章を予想しながら、再利用するだろうテキストを、クリップボード履歴にプッシュしていくよう使うことが想定されているんでしょうが、以前、使っていたエディタにもあったのですが、やる気の問題なんだか、慣れの問題なのか、頭が悪いのか、クリップボードにテキストをプッシュ/ポップする機能を活用するような使い方ができないでいます。

ただ、秀丸エディタのクリップボード履歴機能って、他のアプリケーションで、クリップボードを使っても、この秀丸エディタのクリップボード履歴にテキスト情報が記録されることに気が付いて、100個も入っているし、結構、編集中に、ちょっと前(といっても、かなり前)の文章は、確か、クリップボード経由で、テキストを移動したはずで、どんなテキストだったけなぁ、と思って、秀丸エディタのクリップボード履歴のダイアログボックスを漁ることがママあります。

このときに、いつも、欲しいのが、テキストの検索機能なので、それであれば、エディタ上に、クリップボード履歴の全データを吐き出してしまえば、いいんじゃないかと思って、今回、秀丸エディタのクリップボード履歴に関連したマクロを探していたのですが、どうも、自分に、しっくりくるものがありませんでした。で、そんなに難しいものでもないし、自分が気に入るように、作ってしまえと思って、今回の単機能マクロを書いてみました。


ちなみに、自分への覚書程度に、今回、見つけた秀丸エディタのクリップボード履歴に関連するようなマクロは、以下のようなものがありました。

http://hide.maruo.co.jp/lib/macro/allreversepaste.html
山紫水明さん作のクリップボードの履歴の並べ替え & まとめて貼り付けるマクロ Ver1.00 2003/03/23

http://www5.airnet.ne.jp/joc/hidemacro/hidemacro.html
JOC電脳部さん作の
Paste List Rev Ver 0.01 クリップボード履歴からすべてを貼り付けます。(逆順)(常駐モード使用時)
Paste List Ver 0.02 クリップボード履歴からすべてを貼り付けます。(常駐モード使用時)


まとめて貼り付けるのは、良いのですが、あとから、履歴を使うことを想定していない中で、昔の自分の作業を遡りたいようなときには、単純に貼り付けると、解析するのが大変なので、私の方は、区切りを入れて、全データを吐き出すようにしてみました。便利に使えるかなぁ???(自分へ)


あと、今回、クリップボード履歴機能関連のマクロを探した中で、今回、私がしたかったような自分の過去の作業を遡りたいという要求とは、ちょっと、違いますが、以下のマクロは、かなり、便利そうですね。

http://hide.maruo.co.jp/lib/macro/cliphistory.html
longringさん作のクリップボード履歴から貼り付けマクロ 2007/04/22

以前のブログでも、秀丸エディタのクリップボード履歴機能の感想をちょっと、入れていましたが、ちょっと前に使ったはずのクリップボードの内容を参照したいことは、頻繁にあるので、それなり、秀丸エディタのクリップボード履歴のダイアログボックスは、使用しています。ただ、この秀丸エディタ標準機能のダイアログボックスは、カーソルキーで選んで、そして、それを取り出して、それから、ペーストするという何段ものの操作が必要で、結構、面倒だったので、このlongringさん作のマクロは、便利そうです。こんなときには、10個も遡れれば、必要十分だと思いますし、、、。

クリップボード履歴ダンプマクロ v0.01

2007年06月26日 15時56分41秒 | 秀丸エディタ Tips
表題のような秀丸エディタ用のマクロを作ってみました。

秀丸エディタの新規ウィンドウを開いて、クリップボード履歴されている全テキストを、吐き出すだけの単純なマクロです。

各データには、クリップボード履歴ダイアログボックスの番号に対応する番号と、各データ間に、区切り「━━━...」を入れるのが、ちょっとした特徴なだけです。


ファイルのダウンロードは、以下からできるようにしてあります。
甘党のプログラマのファイル保管庫」の「秀丸エディタ関連のマクロ」ページの「■ クリップボード履歴ダンプマクロ」

GoogleCalcのToDo

2007年06月24日 06時21分45秒 | 秀丸エディタ Tips
GoogleCalcマクロは、ほとんど、何かのマクロを作りたいから、作りはじめているようなマクロで、技術的に簡単であるはずだぁと思って、作り始めています。ただ、実際に、つくり始めると、想像以上に、結構なコード量になってしまいそうで、ちゃんと動くまで、結構、大変そうかも、、、。

ところで、数値データを使って、説明する文章をつくっているには、その算出式を使って、データを説明したりすることが多くて、複雑な場合には、まあ、Excel上で、いろいろと、計算式を作りますが、ちょっとした単純な式だと、秀丸上で作っている文章の上で、計算式を作って、それをクリップボードにコピーして、ブラウザを立ち上げて、Googleの電卓機能で計算して、そのブラウザ上の結果をコピーして、秀丸上にペーストするような操作を、結構、することがあったので、こんなマクロを、楽しみがてら、作ろうとしています。

まずは、先ほど、バックアップアーカイブしたGoogleCalcですが、私自身で使ってみて、使い勝手を試そうとしています。

あと、自分自身への忘却メモとしてのToDoも、書いておきましょう。

○ まずは、ソースの整理ですね。まだ、サブルーチンの動作チェックの単体テスト用のコードすら(あえて)残しているので。

○ とりあえずコーディングした段階で、思い当たる怪しそうなところ
・まずは、等号記号(=)が2つ以上あるような式を指定されると、挙動がおかしいぞ。
・2バイト文字の2バイト目に等号記号(=)がありえるのか?ありえるとしたら、どうなっちゃうのか?
・そもそも、秀丸のマクロは、S-JISのような半角1バイト、全角2バイトを前提にして、コーディングをしてしまっている。文字コードセットを変えてみたら、どうなっちゃうのかも試す必要があるかも?
・Google電卓の結果画面の解析は、とあえずのコードで、めちゃくちゃチェックが甘い。計算できなかったときにも、間違えて、計算成功と勘違いしてしまう恐れがあるはず。

○ 作っている最中に思いついた、今後の拡張のアイデア
・電卓以外の通貨換算などにも対応できはず。
・Googleの電卓ではなくて、秀丸のマクロ自体、もしくは、WSH(VBScirpt/JScript)自体の計算機能で、計算をさせたい。特に、Googleは、ビットの論理演算ができないのが、痛い。
・連続計算:複数行を選択して、上から順番に計算をするのですが、前の式の計算結果を参照できるような文法を定義して、簡単な連立式を計算できるような機能は、どうだろうか?


いやはや、どこまでいけるんだろうか?

秀丸エディタ上で範囲選択している式をGoogle(日本語版)の電卓機能で計算するマクロ

2007年06月24日 05時52分51秒 | 秀丸エディタ Tips
ExtractTxtFromHtmlを作っていて、秀丸のマクロと、VBS+IEを通じて、ウェブにもアクセスできることを利用して、表題のような秀丸のマクロを作ろうとしています。

ほんとに、今、すこしばっかり、動作確認しただけですので、まずは、機能評価版(α版)として、かつ、テストプログラムまで含んだような現状のバックアップ用のアーカイブとしてみました。

機能の概要としては、以下のようなものです。
秀丸エディタ上の範囲選択した計算式のテキストを、Google(日本語版)の電卓機能で計算します。
さらに、このマクロでは、以下のサービス機能をつけました。
計算結果挿入機能
結果表示の基数指定
自動選択機能


一応、ファイルのダウンロードは、以下からできるようにしてあります。
甘党のプログラマのファイル保管庫」の「秀丸エディタ関連のマクロ」ページの「■ 秀丸エディタ上で範囲選択している式をGoogle(日本語版)の電卓機能で計算」

ExtractTxtFromHtml v0.05

2007年06月23日 04時19分35秒 | 秀丸エディタ Tips

HTMLからプレインテキスト情報を抽出するための秀丸エディタ用マクロ「ExtractTxtFromHtml v0.04」
をバージョンアップしました。

○ v0.05 (2007/6/23)
・ExtractTxtFromHtml.mac v0.04 → ExtractTxtFromHtml.mac v0.05の修正点
(1) テンポラリファイルが削除されないバグの改修。


ファイルのダウンロードは、以下からできるようにしてあります。
甘党のプログラマのファイル保管庫」の「秀丸エディタ関連のマクロ」ページの「■ HTMLからプレインテキスト情報を抽出するための秀丸エディタ用マクロ」

ExtractTxtFromHtml v0.04

2007年06月21日 09時47分50秒 | 秀丸エディタ Tips
HTMLをプレインテキストに変換するための秀丸エディタ用マクロ v0.03」をバージョンアップしました。
○ v0.04 (2007/6/20)
・ExtractTxtFromHtml.mac v0.03 → ExtractTxtFromHtml.mac v0.04の修正点
(1) 0x3Fマスクなしでcharsetキーワードをチェックしていたため、改行コード
の設定状態によっては、動作しないケースがあったため、きちんと、マス
ク処理を追加
(2) VBSに引き渡す一時HTMLファイルの作成時のopenfileのモードコード指定で
/fを使用することにより、charsetによる分岐とコードの種類の制限をなく
した。
(3) ステルスモードで開いている一時ファイルクローズの方法を変更。
(findhidemaruでクローズ対象ウィンドウを探す方式から、オープン直後に
hidemaruhandle(0)で取得しておく方式に変更)

・ExtractTxtFromHtml.vbsは変更なし(VBSファイルはv0.03のまま)


ファイルのダウンロードは、以下からできるようにしてあります。
「甘党のプログラマ」のファイル保管庫の「秀丸エディタ関連のマクロ」ページの「■ HTMLからプレインテキスト情報を抽出するための秀丸エディタ用マクロ」


今回のバージョンアップは、まるっきり、h-tomさんのアドバイスそのままです。これでしばらく使ってみてみようかなと考えています。

※ プロフェッショナルな方に、コードレビューをしていただいた感じで、非常、ありがたいです。

それにしても、秀丸エディタのマクロとかVBScriptとかのスクリプト言語系は、ちょろっと書いて、その場で、すぐに動作させることができて、楽しいですね。
もう、普段は、ソフトをコーディングすることがなくなってきて、久しぶりにソフトを作る楽しみを味わっています。

ExtractTxtFromHtml v0.03

2007年06月20日 04時04分06秒 | 秀丸エディタ Tips
HTMLをプレインテキストに変換するための秀丸エディタ用マクロ v0.02」をバージョンアップしました。

・Html2txt.mac v0.02 → ExtractTxtFromHtml.mac v0.03の修正点
(1)「html2txt.*」から「ExtractTxtFromHtml.*」ファイル名の変更(h-tomさんの「htmlからtextを取得するマクロ」と名称が似ているため。)
(2) S-JIS以外のときに文字化けが発生したため、VBSで生成したIEコントロールのinnerTextのテキストファイルを、常に、S-JISモードでオープン。
(3) 画面がちらつかないように、一時ファイルをステルスモードでオープン。
(4) 一時ファイルの削除を、VBSでなくて、DELコマンドに変更
(5) VBSに引き渡す一時ファイルを作成するディレクトリのデフォルトを"C:Temp"からTEMP環境変数に変更。(デバッグ時用ディレクトリからの戻し忘れ)
(6) 一度オープンしたファイル名をマクロのfilenameキーワードで再取得したものを検索するように修正

・Html2txt.vbs v0.02 → ExtractTxtFromHtml.vbs v0.03の修正点
(1)「html2txt.vbs」から「ExtractTxtFromHtml.vbs」ファイル名の変更(h-tomさんの「htmlからtextを取得するマクロ」と名称が似ているため。)
(2) /DELオプションの削除(v0.02はVBSで一時ファイルを削除していたが、v0.03では秀丸マクロ側で削除するようにしたため)
(3) 未使用のフラグ類を削除(boolContProcFlag)


Html2txt.mac v0.02 → Html2txt.mac v0.03の修正点の(3)と(4)については、h-tomさんのコメントが参考になり、大変、感謝です。

※ h-tomさんが、こんなブログにまで、チェックされているとは、驚きです。


ところで、私が勘違いしたステルスモードでウィンドウハンドルが取得できないと勘違いしていた件ですが、結局、ステルスモードは関係が無くて、環境変数TEMPがショートパス名(C:DOCUME~1アカウント名LOCALS~1Temp)になっており、このパス名とテンポラリファイル名を連結して、openし、そのオープン時のパスでfindhidemaruをしてしまっていたことでした。対処としては、openした直後に、再度、秀丸からファイル名を取得しておいて、そのファイル名(ロングパス名)でfindhidemaruすることで解決しました。


あと、このマクロのToDoとしては、以下の点が、少しだけ使いづらいので、なんとかしたいできれば良いかなぁと思っています。

・HTMLコードとマクロを実行する秀丸の文字コードセットが異なるときに、文字化けが発生する。

例えば、EUC-JPのHTMLコードを、Shift-JISエンコードモードで開いている秀丸のウィンドウ上でマクロを実行すると、マクロで、Shift-JISに変換してしまい、IEに解析をさせてしまっているために、文字化けが発生してしまいます。ただ、通常、HTMLコードを作成中であれば、HTMLコードの文字コードに合わせて、秀丸エディタのエンコードモードを編集しているだろうから、大きな問題ではないかと考えて、とりあえずは、そのままにしてあります。

ファイルのダウンロードは、以下からできるようにしてあります。
甘党のプログラマ」のファイル保管庫の「秀丸エディタ関連のマクロ」ページの「■ HTMLをプレインテキストに変換するための秀丸エディタ用マクロ」