秀丸 と BashNo.03631
安久津 さん 03/03/04 17:49
 
#!/usr/bin/bash

# このスクリプトの置き場所について。
# 私の場合、~/bin にパスを通しておいて、
# ~/bin/hidemaru という名前で保存しています。

# 環境依存変数。
# hidemaru.exe のあるディレクトリ
hm_hidemarudir='/cygdrive/c/progra~1/hidemaru'
# -e で使う。秀丸マクロディレクトリ
hm_macrodir='/cygdrive/c/progra~1/hidemaru/macro'
# -e で使う。一時マクロファイル名
hm_macro='tmp.mac'
# デフォルトのウインドウの大きさ
hm_showwindow='/(0,0,200,200) '


if [ "$1" == "--help" ]; then
ver='$Id: hidemaru,v 1.14 2003-02-24 11:14:32+09 ta Exp ta $'
cat <<EOD >&2
SYNOPSIS:         ${0##*/} [options] [files]
                  新規ファイルは引数で指定できません。
OPTIONS:
-Kkcode           漢字コードの指定。kcode で有効な文字は以下。
                  s[jis], e[uc], j[is], u[nicode], u[tf7],
                  u[tf8], u[nicode]b, cs (簡体字中国語), ct (繁体字中国語)
                  k[orea] (韓国語), a (欧文 iso-8859-1)
-kkcode, -fkcode  -K と同じ。
-b                閲覧モードで開く。
-c[extension]     ファイルタイプ別の設定を適応する。
                  例。-c.txt, -c.cpp, -c.java
-e 'command'      一行スクリプトの指定。複数の -e が使える。
                  明示的に終了させるには、exit などを使い、
                  endmacro 等は使ってはならない。
-h                ウインドウを隠して開く。
-jline[,column]   カーソルを指定の行の指定のカラムへ位置づける。
-p                印刷。
-r                書き込み禁止で開く。
-xmacrofile       実行マクロ指定。マクロは、"exit", "saveexitall",
                  "quit" などで終了する必要がある。
-w                通常の大きさのウインドウで開く。
                  $ver
EOD

    exit 0
elif [ "$1" == "--showmacro" ]; then
    cat $hm_macrodir/$hm_macro
    exit 0
fi

    execmacro=0
    options=
    while getopts K:k:c:g:j:k:f:x:e:brphw opt; do
        case $opt in
            K | k | f )
                case $OPTARG in
                    s* ) options="$options/fs " ;;
                    e* ) options="$options/fe " ;;
                    j* ) options="$options/fj " ;;
                    u*b) options="$options/fub " ;;
                    u*7) options="$options/fu7 " ;;
                    u*8) options="$options/fu8 " ;;
                    u* ) options="$options/fu " ;;
                    cs ) options="$options/fcs " ;;
                    ct ) options="$options/fct " ;;
                    ck*) options="$options/fk " ;;
                    ca ) options="$options/fa " ;;
                esac
                ;;
            [cgj] ) options="$options/$opt$OPTARG " ;;
            x )
                if [ $execmacro -eq 0 ]; then
                    if [ "${OPTARG#*/}" != "$OPTARG" ]; then
                        options="$options/$opt${OPTARG//\//\\} "
                    else
                        options="$options/$opt$OPTARG "
                    fi
                    export hm_currentmacrobasename="${OPTARG##*/}"
                    execmacro=2
                fi
                ;;
            e )
                if [ $execmacro -eq 0 ]; then
                    echo '' > $hm_macrodir/$hm_macro
                    export hm_currentmacrobasename=$hm_macro
                    execmacro=1
                fi
                if [ $execmacro -eq 1 ]; then
                    echo "$OPTARG;" >> $hm_macrodir/$hm_macro
                fi
                ;;
            h ) hm_showwindow='/h ' ;;
            w ) hm_showwindow='' ;;
            * ) options="$options/$opt " ;;
        esac
    done

    if [ $OPTIND -gt 1 ]; then
        shift $(( OPTIND - 1 ))
    fi
    options="$options$hm_showwindow "
    if [ $execmacro -eq 1 ]; then
        # echo 'saveexitall;' >> $hm_macrodir/$hm_macro
        # echo 'if(updated) save; exit;' >> $hm_macrodir/$hm_macro
        echo 'if(updated==1 && basename!="") save; quit;' >> $hm_macrodir/$h
m_macro
        options="/x $hm_macro $options"
    fi
   
    if [ $# -gt 0 ]; then
        dir="$(cygpath -w $(pwd))"
        for f in "$@"; do
            if [ -f "$f" ]; then
                if [ "${f#*/}" != "$f" ]; then
                    f="$(cygpath -w $f)"
                    echo $hm_hidemarudir/hidemaru.exe $options $f
                    $hm_hidemarudir/hidemaru.exe $options $f
                else
                    echo $hm_hidemarudir/hidemaru.exe $options $dir\\$f
                    $hm_hidemarudir/hidemaru.exe $options $dir\\$f
                fi
            fi
        done
    elif [ -n "$options" ]; then
        $hm_hidemarudir/hidemaru.exe $options
    else
        # 常駐秀丸確認用
        $hm_hidemarudir/hidemaru.exe
    fi

    export -n hm_currentmacrobasename

exit 0

[ ]
RE:03631 秀丸 と BashNo.03632
安久津 さん 03/03/05 01:07
 
シェル(bash)スクリプト hidemaru について。

● 置き場所。
~/bin などを作って、そこに ~/bin/hidemaru として置く。

~/.bash_profile または ~/.bashrc で、
export PATH=~bin:$PATH
しておく。

● 小手調べ。

小さいウインドウを開いて、メッセージだけ出して終了。
$ hidemaru -e 'message "hello"'

ウインドウを出さずに、メッセージだけ出して終了。
$ hidemaru -he 'message "hello"'

通常のウインドウを開いて( 環境依存 )、メッセージを出して終了。
$ hidemaru -we 'message "hello"'

● 文字コード変換。
    カレントディレクトリの 拡張子 txt を
    sjis として開いて、utf8 で保存する。

$ hidemaru -Ksjis -e 'saveas filename2, utf8;' *.txt

    カレントディレクトリの 拡張子 txt を
    utf8 として開いて、euc で保存する。
   
$ hidemaru -Kutf8 -e 'saveas filename2, euc, lf;' *.txt

● 置換。
拡張子 txt のファイルに対して、置換を実行する。
$ hidemaru -e 'replaceallfast "foo", "bar", casesense' *.txt

● -c.extension の使い方。
拡張子 txt のファイル a.txt を、java として開く。
ウインドウは「通常の大きさ」

$ hidemaru -w -c.java -e 'message filetype+"\n"+hilighttitle' a.txt

● 複数行のマクロ。

$ hidemaru -e '
> gofiletop;
> $date=year+"-"+month+"-"+day+" "+time;
> replacedown "^[\\t ]*Last +(Updated|Modified):.+$", "\\0 " + $date, regular;
> ' *.html

● マクロ呼び出し。
    呼び出されるマクロは、秀丸マクロディレクトリにからのパスになる。

    カレントディレクトリにある log ファイル全部に対して、a.mac を実行する。

$ hidemaru -x a.mac *.log

● exit しないマクロ呼び出し。
    マクロ呼び出しでは、そのマクロが exit しないと困る。
    exit しないマクロ a.mac は、 -e の中で呼び出せばよい。

$ hidemaru -e 'execmacro "a.mac"; saveexitall;' *.log

● xargs
    カレントディレクトリ以下の全ての 拡張子 txt のファイルに対して、
    date.mac を実行。

$ find . -type f -iname '*.txt' | xargs hidemaru -x date.mac
/cygdrive/c/progra~1/hidemaru/hidemaru.exe /xdate.mac /(0,0,200,200) c.txt
/cygdrive/c/progra~1/hidemaru/hidemaru.exe /xdate.mac /(0,0,200,200) b.txt
/cygdrive/c/progra~1/hidemaru/hidemaru.exe /xdate.mac /(0,0,200,200) a.txt
/cygdrive/c/progra~1/hidemaru/hidemaru.exe /xdate.mac /(0,0,200,200) d.txt
...
--- snip ---
$


[ ]
RE:03632 秀丸 と BashNo.03634
ENCODINGSHIFTJIS さん 03/03/10 16:37
 

Bash ならではの作品ですね

コマンド・プロンプトではエスケープの多重度が上がって、
ワンライナーは書きにくい

ECHO if^(#count^>999^){searchdown "^[^;,]\\n"; };menu "Hello World!";
これはできるが、.BAT の中ではうまくうまく渡らない?
ECHO、SET, CMD、BAT などのエスケープ仕様は統一がとれているか?

  p.BAT if^(#count^>999^){searchdown "^[^;,]\\n"; };menu "Hello World!";

---------- p.BAT
ECHO %1

単純なエスケープ技能では対応できない。

ダメダメです、.mac に書き出せません。
書けるのは多ファイル処理くらいです。
カレントの社会情報*.txtをソート順にマクロ処理では
?for /F %F in ('dir/b/on 社会情報*.txt') do start
"TITLE BAR" /WAIT hidemaru.exe /xOneLiner.mac %F

------- WindoswXP ではです。





[ ]
RE:03634 秀丸 と BashNo.03635
ENCODINGSHIFTJIS さん 03/03/10 18:14
 

ワンライナーBAT
---------- Oneliner.BAT
copy con %temp%\temp.mac
hidemaru.exe /x%temp%\temp.mac "%1"
----------
として 実行例(WindowsXP)

18:00 Oneliner.bat j.txt
18:00 copy con C:\DOCUME~1\ENCODE\LOCALS~1\Temp
\temp.mac
 if(#count>999){searchdown "^[^;,]\\n"; };menu "Hello World!";
^Z
        1 個のファイルをコピーしました。
18:00 hidemaru.exe /xC:\DOCUME~1\ENCODE\LOCALS~
1\Temp\temp.mac j.txt

秀丸マクロは動きました、CMD の構文は独自と言うより
風変わりと言ってもいいくらいだ。
●コマンド引数はファイル名しか考えていない、

任意文字列を渡そうとすると苦労します。

[ ]
RE:03635 秀丸 と BashNo.03636
ENCODINGSHIFTJIS さん 03/03/11 14:34
 
エクスプローラでファイルドロップ実行もついでに

 −−−−−−−−−−−−−−−−− OneLiner.wsf
//
// OneLiner.wsf - ファイルドロップに秀丸ワンライナー実行
//
//                            
<JOB>
<SCRIPT LANGUAGE="VBScript">
Function     Prompt(sPrompt,sTitle,sDefault)
  Prompt = InputBox(sPrompt,sTitle,sDefault)
End Function
</SCRIPT>
<SCRIPT LANGUAGE="JScript">
var WSshell=WScript.CreateObject("WScript.Shell");
var    Args=WScript.Arguments;
var Hidemac;

if (Args.length==0) {
  Wsh.Popup("秀丸マクロを適用したいファイルsをドロップして下さい。\n

"+
            "ショートカットをSendToフォルダに入れて送るようにすると便

利です。");
  WScript.Quit();
}
Hidemac = Prompt("マクロソースを一行で書きます","秀丸ワンライナー",

"exit;")
//
FS=WScript.CreateObject("Scripting.FileSystemObject");
TS=FS.GetFolder("C:\\Program Files\\Hidemaru\\MAC").

CreateTextFile("temp.mac");
TS.WriteLine(Hidemac);
TS.Close();
//

// ファイル名ソートが必要ならArgs を配列に取り込んで
// 事前処理します

for(v=0; v<Args.length; v++){
ERROR=WSshell.Run('"C:\\Program Files\\Hidemaru\\Hidemaru.exe"'+
           ' /xtemp.mac "'+Args(v)+'"',1,1);
if(ERROR != 0)break; // taskmgr で中断した時
 }
WScript.Echo("完了");
</SCRIPT>
</JOB>
-------------------------------------
この .WSF のアイコンに複数ファイル選択をドラッグ&ドロップします
次に、秀丸マクロをプロンプトに書き込みます。
1ファイルずつ、開いて、マクロ実行します。
大量処理ならコマンドプロンプトですから、これはテスト用にどうぞ

[ ]
RE:03636 秀丸 と BashNo.03637
安久津 さん 03/03/11 21:51
 
あくつです。

>// OneLiner.wsf - ファイルドロップに秀丸ワンライナー実行
これいいですね。(^^)

でも、ちょっと typo があるみたいです。
WSH に詳しくない人は実行できないので、
修正させていただきます。
# その他にも手を加えたりして。(^^ )>>

-- 以下 OneLiner.wsf

<JOB>
<SCRIPT LANGUAGE="VBScript">
Function   Prompt(sPrompt,sTitle,sDefault)
  Prompt = InputBox(sPrompt,sTitle,sDefault)
End Function
</SCRIPT>
<SCRIPT LANGUAGE="JScript">
// 環境依存。
var hidemarudir="C:\\Program Files\\Hidemaru";
var macrodir="C:\\Program Files\\Hidemaru\\macro";
var window="/(0,0,200,200)";

var WSshell=WScript.CreateObject("WScript.Shell");
var    Args=WScript.Arguments;
var Hidemac;

if (Args.length==0) {
  WScript.Echo("秀丸マクロを適用したいファイルをドロップして下さい。\n"+
            "ショートカットをSendToフォルダに入れて送るようにすると便利です。
");
  WScript.Quit();
}
Hidemac = Prompt("マクロソースを一行で書きます","秀丸ワンライナー", "exit;");
//
var fso=WScript.CreateObject("Scripting.FileSystemObject");
var folder=fso.GetFolder( macrodir );
var TS=folder.CreateTextFile("temp.mac");
TS.WriteLine(Hidemac);
TS.Close();
//
// ファイル名ソートが必要ならArgs を配列に取り込んで
// 事前処理します
for(var v=0; v<Args.length; v++){
ERROR=WSshell.Run('"' + hidemarudir + '\\hidemaru.exe" '+ window +
                  ' /xtemp.mac "'+Args(v)+'"',1,1);
if(ERROR != 0)break; // taskmgr で中断した時
}
WScript.Echo("完了");
</SCRIPT>
</JOB>

-- ここまで。

[ ]
RE:03632 秀丸 と BashNo.03824
安久津 さん 03/07/14 22:19
 
#!/usr/bin/bash

# --------------------
# 環境依存変数。
# hidemaru.exe のあるディレクトリ
# cygpath -u 'c:\program files\hidemaru' とかで確認してください。
hm_hidemarudir='/cygdrive/c/program files/hidemaru'
# -e で使う。秀丸マクロディレクトリ
hm_macrodir='/cygdrive/c/program files/hidemaru/macro'
# -e で使う。一時マクロファイル名
hm_macro='tmp.mac'
# デフォルトのウインドウの大きさ
hm_showwindow='/(0,0,200,200) '
# --------------------

if [ "$1" == "--help" ]; then
ver='$Id: hidemaru,v 1.24 2003-03-25 18:09:32+09 ta Exp $'
cat <<EOD >&2
SYNOPSIS:         ${0##*/} [options] [files]
                  新規ファイルは引数で指定できません。
OPTIONS:
-Kkcode           漢字コードの指定。kcode で有効な文字は以下。
                  s[jis], e[uc], j[is], u[nicode], u[tf]7,
                  u[tf]8, u[nicode]b, cs (簡体字中国語), ct (繁体字中国語)
                  k[orea] (韓国語), a (欧文 iso-8859-1)
-kkcode, -fkcode  -K と同じ。
-b                閲覧モードで開く。
-c[extension]     ファイルタイプ別の設定を適応する。
                  例。-c.txt, -c.cpp, -c.java
-e 'command'      一行スクリプトの指定。複数の -e が使える。
                  明示的に終了させるには、exit などを使い、
                  endmacro 等は使ってはならない。
-h                ウインドウを隠して開く。
-jline[,column]   カーソルを指定の行の指定のカラムへ位置づける。
-p                印刷。
-Ptemplate        テンプレートファイルを指定して印刷。
-r                書き込み禁止で開く。
-xmacrofile       実行マクロ指定。マクロは、"exit", "saveexitall",
                  "quit" などで終了する必要がある。
-w                通常の大きさのウインドウで開く。
                  $ver
EOD

    exit 0
elif [ "$1" == "--showmacro" ]; then
    echo "$hm_macrodir/$hm_macro"
    echo "--"
    cat "$hm_macrodir/$hm_macro"
    exit 0
fi

    execmacro=0
    options=
    while getopts K:k:c:g:j:k:f:x:e:P:brphw opt; do
        case $opt in
            K | k | f )
                case $OPTARG in
                    s* ) options="$options/fs " ;;
                    e* ) options="$options/fe " ;;
                    j* ) options="$options/fj " ;;
                    u*b) options="$options/fub " ;;
                    u*7) options="$options/fu7 " ;;
                    u*8) options="$options/fu8 " ;;
                    u* ) options="$options/fu " ;;
                    cs ) options="$options/fcs " ;;
                    ct ) options="$options/fct " ;;
                    k* ) options="$options/fk " ;;
                    a* ) options="$options/fa " ;;
                esac
                ;;
            [cgj] ) options="$options/$opt$OPTARG " ;;
            x )
                if [ $execmacro -eq 0 ]; then
                    if [ "${OPTARG#*/}" != "$OPTARG" ]; then
                        options="$options/$opt${OPTARG//\//\\} "
                    else
                        options="$options/$opt$OPTARG "
                    fi
                    export hm_currentmacrobasename="${OPTARG##*/}"
                    execmacro=2
                fi
                ;;
            e )
                if [ $execmacro -eq 0 ]; then
                    : > "$hm_macrodir/$hm_macro"
                    export hm_currentmacrobasename="$hm_macro"
                    execmacro=1
                fi
                if [ $execmacro -eq 1 ]; then
                    echo "$OPTARG;" >> "$hm_macrodir/$hm_macro"
                fi
                ;;
            h ) hm_showwindow='/h ' ;;
            w ) hm_showwindow='' ;;
            P ) options="$options/p${OPTARG%.hpt} ";;
            * ) options="$options/$opt " ;;
        esac
    done

    if [ $OPTIND -gt 1 ]; then
        shift $(( OPTIND - 1 ))
    fi
    options="$options$hm_showwindow "
    if [ $execmacro -eq 1 ]; then
        # echo 'saveexitall;' >> $hm_macrodir/$hm_macro
        # echo 'if(updated) save; exit;' >> $hm_macrodir/$hm_macro
        echo 'if(updated==1 && basename!="") save; quit;' >> "$hm_macrodir/$
hm_macro"
        options="/x $hm_macro $options"
    fi
   
    if [ $# -gt 0 ]; then
        # Quoting $(pwd) allows for possible spaces.
        dir=$(cygpath -w "$(pwd)")
        for f in "$@"; do
            if [ -f "$f" ]; then
                if [ "${f#*/}" != "$f" ]; then
                    f=$(cygpath -w "$f")
                    echo "'"$hm_hidemarudir/hidemaru.exe"'" $options $f
                    "$hm_hidemarudir/hidemaru.exe" $options $f
                else
                    echo "'"$hm_hidemarudir/hidemaru.exe"'" $options $dir\\$f
                    "$hm_hidemarudir/hidemaru.exe" $options $dir\\$f
                fi
            fi
        done
    elif [ -n "$options" ]; then
        "$hm_hidemarudir/hidemaru.exe" $options
    else
        # 常駐秀丸確認用
        "$hm_hidemarudir/hidemaru.exe"
    fi

    export -n hm_currentmacrobasename

exit 0

[ ]