ハイパーマッスルエンジニア

Vim、ShellScriptについてよく書く

Sequel AceをApplescriptで操作する

f:id:rasukarusan:20210627222634p:plain
 

以前Sequel ProをApplescriptで操作するのはやっていたが、昨今はSequel Aceを使うようになった。
Sequel ProとAceではFavorite.plistのPATHやUIの配置などがいくつか異なっていたため、それをまとめたい。

スクリプト

まずどういったスクリプトなのかを載せておく。お気に入りリストを取得してfzfで選択し、接続するというスクリプト。

GIFはSequel Proだが同じことがSequel Aceでも可能

ソース

#!/bin/sh

#
# Sequel Aceで指定した接続を開く
# 引数にはSequelProの「お気に入り」の行番号を示すインデックスが入る
#
function run_sequel_pro() {
local app='Sequel Ace'
osascript -- - "$@" << EOF
on run argv
tell application "${app}"
    activate
    delay 0.5
    tell application "System Events"
        tell process "${app}"
            set frontmost to true
            delay 0.5
            repeat with i from 1 to (count argv)
                keystroke "t" using {command down}
                tell window "${app}"
                    delay 0.5
                    tell outline 1 of scroll area 1 of splitter group 1 of window "${app}" of application process "${app}" of application "System Events"
                        # row 1は「クイック接続」、row 2は「お気に入り」の行なので実質一番上はrow 3となる
                        set _row_index to (item i of argv as number) + 2
                        select row _row_index
                    end tell
                    tell scroll area 2 of splitter group 1 of window "${app}" of application process "${app}" of application "System Events"
                        click button "Connect"
                    end tell
                end tell
            end repeat
        end tell
    end tell
end tell
end run
EOF
}

function main() {
  local favorites=$(plutil -convert json ~/Library/Containers/com.sequel-ace.sequel-ace/Data/Library/Application\ Support/Sequel\ Ace/Data/Favorites.plist -o - | jq -r '."Favorites Root".Children[].name')
    local targets=($(echo "${favorites}" | fzf))
    local rows=()
    for target in ${targets[@]}; do
        echo $target
        local row=$(echo "${favorites}" | grep -n ${target} | cut -d ':' -f 1)
        rows=(${rows[@]} $row)
    done
    [ ${#rows[@]} -eq 0 ] && return 130
    run_sequel_pro ${rows[@]} >/dev/null
}

main

Sequel Pro と Ace で変わったこと

  • Favorite.plistのPATH
  • UI Elementの指定方法

Favorite.plistのPATH

お気に入り一覧はFavorite.plistというファイルに載っている。Sequel Proでは

~/Library/Application\ Support/Sequel\ Pro/Data/Favorites.plist

にあったが、Sequel Aceでは下記のPATHに変わっている。

~/Library/Containers/com.sequel-ace.sequel-ace/Data/Library/Application\ Support/Sequel\ Ace/Data/Favorites.plist 

ちなみにこれは「Sequel Ace | MySQL/MariaDB database management for macOS」にも載っている。

UI Elements

Sequel Proではお気に入りリストの行を選択するのに下記のようにアクセスしていた。

tell outline 1 of scroll area 1 of splitter group 1 of group 2 of window "Sequel Pro" of application process "Sequel Pro" of application "System Events"

Sequel Aceではgroup 2 ofがなくなっていた。

- tell outline 1 of scroll area 1 of splitter group 1 of group 2 of window "Sequel Pro" of application process "Sequel Pro" of application "System Events"
+ tell outline 1 of scroll area 1 of splitter group 1 of window "Sequel Ace" of application process "Sequel Ace" of application "System Events"

終わり

以上。Sequel AceもApplescriptで操作できてよかった。