SafariでLivedoorReaderのPinを開く時の挙動

さっき気づいた事です。僕が施してきた対処を時系列にそって書いてみたいと思います。


LivedoorReaderのPinをまとめて開くショートカットキー”o”を実行すると素のSafari*1では新規ウィンドウがばかばか開いてしまいます。個人的にはせっかくのタブブラウザですからこれを全てタブで開いて欲しいです。

SafariStandの導入

SafariStandの「ターゲットリンクをタブで開く」という機能を有効にすることでPinを開いてもタブで開いてくるようになります。



でも、これだとPinで開いたタブは一番右側に開かれていきます。僕はLDRを開いているタブの右側に開いて欲しい。

SafariTabConfigの導入

SafariTabConfigの「新規タブはアクティブなタブの右側に開く」という機能を有効にすることでPinで開いたタブがLDRの右側に開いてくるようになります。



これで僕の理想的な動作になりました。

昨日、異変に気づいた

昨日SafariでLDRを使っているとPinを開いた時の挙動が何かおかしいことに気づきました。
開いたタブと既存のタブが交互に開かれてました。これはおかしいと思って検証すると先日実行した以下のコマンドが原因でした。

defaults write com.apple.Safari TargetedClicksCreateTabs -bool true

検証



上のスクショのようなタブの状態でasahi.comのエントリをPinしてたものを開いて行きます。

理想的な開き方



上のスクショのようなにLDRのタブとYahooのタブ群の間にasahi.comのタブがひとかたまりになっている状態を理想とします。


異変に気づいた状態を再現
  • SafariStandの「ターゲットリンクをタブで開く」を  有効
  • TargetedClicksCreateTabs を True

の場合。



Yahooとasahi.comが交互に開いてしまっています。

昔と同じ状態を再現
  • SafariStandの「ターゲットリンクをタブで開く」を  有効
  • TargetedClicksCreateTabs を False

にしました。


この場合、開ききった状態は理想の状態ですが、開いている最中の挙動は

  1. Pinから開かれたタブが一番右側に開く
  2. そのタブのURLと同じURLをアクティブなタブの右側に開く
  3. Pinから開かれた方のタブ(一番右側のタブ)を閉じる

実はこれを繰り返しています。


SafariTabConfigをcanberlandさんが作っている時の話に僕が「LDRのPinも右側に開くようにならないですか?」と要望しました。
通常、SafariTabConfigではブックマークを開く時になどに実行されるメソッドなどをフックして右側に開くようにしています。
しかし、SafariStandが実現している「ターゲットリンクをタブで開く」が読んでいるメソッドをフックできなかったので、上記の様な開かれたタブを移動させるという苦肉の策を施すようになっています。


この対策によってFirefoxなどと比較してPinを開く速度がちょっと遅いのがちょっとした不満でもありました。

新しいパターン
  • SafariStandの「ターゲットリンクをタブで開く」を  無効
  • TargetedClicksCreateTabs を True

にしました。


すると、理想的な開き方で開かれた上にすんなりと開かれて行きます。

わかったこと

異変はつまり、

  1. TargetedClicksCreateTabsが有効なのでタブがアクティブなタブの右側に開く
  2. しかし、Standの「ターゲットリンクをタブで開く」が有効なためStandの該当メソッドが呼ばれる
  3. 自動的にSafariTabConfigのフック機能が働き一番右側にあるタブと同じURLをアクティブなタブの右側に開く


以上の動作のために交互に開くような格好になっていたわけです。


結論

僕のように

  • SafariStandとSafariTabConfigを使っている
  • LDRのPinはアクティブなタブの右側に開いて欲しい


そんな人はSafariStandの「ターゲットリンクをタブで開く」を 無効にして、ターミナルに以下のコマンドを打ち込んで実行しましょう。

defaults write com.apple.Safari TargetedClicksCreateTabs -bool true


きっと快適になると思います。

*1:プラグインや隠し設定等の変更なし