WineStarter.app version 1.2

コードを修正をしました。

WineStarter

機能的な変更点

  • オプションでヒストリ機能が使えるようになりました。前回 Finder から開いたアプリケーションを履歴として開けます。
  • コメントアウトされている変数や値が無い変数を表示しないようにしました。

コード的な変更点

  • コマンドの実行に eval を使わず、一度外部スクリプトに書き出して実行するようにしました(スペースを含むパスでも問題が起きないので)。
bash
##### Automator Shellscript (stdin mode) #####

# Input file check
read INPUT && cat <<EOF
INPUT="${INPUT}"
EOF

# Profile check
PROFILE="$HOME/.WineStarter"
[ -e "${PROFILE}" ] || cat <<EOF > "${PROFILE}"
# 履歴 (前回Finderから起動したアプリケーションを保存出来ます。有効にする場合はコメントアウトを外して下さい)
#HISTORY=""

# デフォルトアプリ0
APP_0="explorer"

# デフォルトアプリ1
APP_1=""

# デフォルトアプリ2
APP_2=""

# 仮想デスクトップの使用 ("version"を指定するとWINEのバージョンがウィンドウ名になります)
USE_VD=""

# 仮想デスクトップサイズ0 (e.g. "1024x768")
VD_SIZE_0=""

# 仮想デスクトップサイズ1
VD_SIZE_1=""

# 仮想デスクトップサイズ2
VD_SIZE_2=""

# デフォルトプレフィックス (e.g. "$HOME/.wine.old")
WINEPREFIX=""

# デバッグメッセージ
WINEDEBUG="-all"

# xterm (xtermを使用してWINEを起動する場合はコメントアウトを外して下さい)
#XTERM="/opt/X11/bin/xterm"
EOF

egrep "^\w+=\".+\"" .WineStarter
bash
##### Automator Shellscript (stdin mode) #####

USER_PROFILE="$HOME/.WineStarter"
PROFILE="/tmp/WineStarter"

# Export profile
cat > "${PROFILE}"

if [ -n "$(cat "${PROFILE}")" ] ; then

    # Import profile
    . "${PROFILE}"

    # Use history
    [ "${INPUT}" ] && sed -i "" -e "s|^HISTORY=\".*\"$|HISTORY=\"${INPUT}\"|" "${USER_PROFILE}"

    # Export environment valiables
    [ "${WINEPREFIX}" ] && export WINEPREFIX
    [ "${WINEDEBUG}" -a ! "${XTERM}" ] && export WINEDEBUG

    # For Homebrew Users
    [ -x "/usr/local/bin/wine" ] && PATH="/usr/local/bin:${PATH}"

    # For MacPorts Users
    [ -x "/opt/local/bin/wine" ] && PATH="/opt/local/bin:${PATH}"

    export PATH

    # Start up application priority 
    INPUT="${INPUT:-${HISTORY:-${APP_0:-${APP_1:-${APP_2}}}}}"

    # Virtual desktop
    if [ "${USE_VD}" ] ; then

        # Auto VD name
        [ "${USE_VD}" = "version" ] && USE_VD="$(echo $(wine --version))"

        VD="explorer /desktop=${USE_VD},${VD_SIZE_0:-${VD_SIZE_1:-${VD_SIZE_2}}}"

    fi

    # MSI executable support
    [ "$(echo "${INPUT}" | egrep -i "\.msi$" )" ] && MSIEXEC="msiexec /i"

    # Export start up script
    cat <<EOF > "${PROFILE}" && chmod +x "${PROFILE}"
wine ${VD} ${MSIEXEC} "${INPUT}"
EOF

    if [ -x "${XTERM}" ] ; then

        # Use xterm
        ${XTERM} -geometry +0+0 -e bash -c "cat ${PROFILE}; ${PROFILE}" &

    else

        # Use background shell
        ${PROFILE} &
    fi

fi

とりあえず Google Code にアゲ。

説明書的なものはこちら。

 

で、作ってみてこういうのも何ですが

使いづらいなこれ(ぉぃ

一つの選択から複数の選択肢に分岐するのが面倒です。「このアプリケーションはコレ」とわかっているなら最初から複数の選択肢から選択した方が早いわけです。

例えば、ミスタードナツに行って「何があるかわからないからとりあえず行ってみて選ぶ」のではなく、「最初からレジに並んでフレンチクルーラーを注文する」ということです(←?)。

まぁシェルスクリプトの勉強にはなったからいいんだけども。肝心の WINE の起動は Finder のサービスに登録することにしました。

続き → WINE の起動コマンドを Finder のサービスに登録する