hidemaru (bashスクリプト)No.03894
安久津 さん 03/10/15 16:57
 
#!/usr/bin/env bash
#=============================================================================
# Script:       hidemaru
# Description:  An wrapper script around hidemaru.exe
# Date:         $Date: 2003-10-14 13:40:47+09 $
# Revision:     $Revision: 1.43 $
#=============================================================================
# 環境依存変数。
# 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.43 2003-10-14 13:40:47+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=
    wait_for=0
    while getopts :K:k:c:g:j:k:f:x:e:P:s: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
                    execmacro=2
                    wait_for=1
                fi
                ;;
            e )
                if [ $execmacro -eq 0 ]; then
                    : > "$hm_macrodir/$hm_macro"
                    execmacro=1
                    wait_for=1
                fi
                echo "$OPTARG;" >> "$hm_macrodir/$hm_macro"
                ;;
            h ) hm_showwindow='/h ' ;;
            w ) hm_showwindow='' ;;
            P ) options="$options/p${OPTARG%.hpt} "
                wait_for=1
                ;;
            p ) options="$options/$opt "
                wait_for=1
                ;;
            b|r)
                options="$options/$opt " ;;
            s)
                options="$options/s$OPTARG " ;;
            * )
                if [ "$opt" == ":" ]; then
                    echo "option requires an argument -- $OPTARG"
                else                
                    echo "illegal option -- $OPTARG"
                fi
                exit 128
                ;;
        esac
    done

    if [ $OPTIND -gt 1 ]; then
        shift $(( OPTIND - 1 ))
    fi

    if [ $wait_for -eq 1 ]; then
        options="$options$hm_showwindow "
    fi
    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")
                else
                    f="$dir\\$f"
                fi
                echo "'"$hm_hidemarudir/hidemaru.exe"'" $options $f
                if [ $wait_for -eq 1 ]; then
                    "$hm_hidemarudir/hidemaru.exe" $options "$f"
                else
                    exec "$hm_hidemarudir/hidemaru.exe" $options "$f" &
                fi
            fi
        done

    else
        echo "'"$hm_hidemarudir/hidemaru.exe"'" $options $f
        if [ $wait_for -eq 1 ]; then
            "$hm_hidemarudir/hidemaru.exe" $options
        else
            exec "$hm_hidemarudir/hidemaru.exe" $options &
        fi
    fi

exit 0

[ ]
RE:03894 hidemaru (bashスクリプト)No.03895
安久津 さん 03/10/15 21:05
 
hidemaru (bash スクリプト) は、cygwin 環境で使います。
最近では、専門の cygwin 本も幾つか登場しています。
cygwin 自体についてはそれらを参考にしてください。

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

  (2) hidemaru の設定。直接書く。
      # hidemaru.exe のあるディレクトリ
      # cygpath -u 'c:\program files\hidemaru' とかで確認してください。
      hm_hidemarudir='/cygdrive/c/program files/hidemaru'
      # -e で使う。秀丸マクロディレクトリ
      hm_macrodir='/cygdrive/c/program files/hidemaru/macro'

  (3) PATH の設定。
      ~/.bash_profile または ~/.bashrc で、
      export PATH=$PATH:~/bin
      しておく。

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

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

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

● 文字コード変換。
  カレントディレクトリの 拡張子 txt のファイルを
  utf8 として開いて、euc で保存する。
 
  $ hidemaru -Kutf8 -e 'saveas filename2, euc, lf;' *.txt

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

● -c.extension の使い方。
  .bashrc を .sh として開く。
  $ hidemaru -c.sh .bashrc

● 複数行のマクロ。

$ hidemaru -j1,1 -e '
> $d=year+"-"+month+"-"+day+" "+time;
> replacedown "\\<Last (Updated|Modified):\\f.*$", "\\0 " + $d, regular;
> ' *.html

● マクロ呼び出し。
  呼び出されるマクロは、秀丸マクロディレクトリからのパスです。
  カレントディレクトリにある log ファイル全部に対して、a.mac を実行する。

  $ hidemaru -xa.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 -xdate.mac
'/cygdrive/c/program files/hidemaru/hidemaru.exe' /xdate.mac /(0,0,200,200)
a.txt
'/cygdrive/c/program files/hidemaru/hidemaru.exe' /xdate.mac /(0,0,200,200)
b.txt
'/cygdrive/c/program files/hidemaru/hidemaru.exe' /xdate.mac /(0,0,200,200)
c.txt
'/cygdrive/c/program files/hidemaru/hidemaru.exe' /xdate.mac /(0,0,200,200)
d.txt
...
--- snip ---
$

● 印刷。
  現在の設定で a.txt を印刷。
  $ hidemaru -p a.txt

  印刷テンプレートファイル normal.hpt を指定して印刷。
  ( 拡張子付きで指定しても平気。 -Pnormal.hpt )
  $ hidemaru -Pnormal a.txt

  印刷用ファイルタイプ別設定の .print と、その印刷テンプレートファイル
  print.hpt を指定して、拡張子 txt のファイルを全て印刷。
  $ hidemaru -c.print -Pprint *.txt

● cygwin の logout 後。
  -e や -x によるマクロの実行、および -p や -P による印刷の実行では、
  秀丸のプロセスの終了を待ちます。

  それ以外は、バックグラウンドにまわします。

  よって、cygwin 側から起動した 秀丸 を終了していないと、
  cygwin の logout 後、DOS のプロンプトが表示されないことがあります。
  その場合、秀丸を終了させてください。

● ヘルプ
  $ hidemaru --help       でヘルプを表示。
  $ hidemaru --showmacro  で、作業用マクロファイルの内容表示。

# 一応 -s オプションも使えるようにしていますが、信用できません。(^^;)

[ ]