YACReader をカスタマイズする
20.02.02 追記 cooViewer 64bit
macOS 14 Mojave にアップデートして cooViewer を起動すると、「32 bit はもうアカン」というような警告が、ときどき表示されるようになった。
そうこうしているうちに geocities が閉鎖されることになり、cooViewer のダウンロードも出来なくなってしまった。cooViewer は Homebrew cask でもインストール出来たのだが、これもまたデリートされてしまっている。
すごく、いいビューアだった。機能のすべてを使用したわけではないものの、正直、いまだに頭ひとつ抜け出ているのではないか。という印象がある。
Mac を使っていると、この手の寂しい別れをよく味わうはめになる。
cooViewer の作者さんには、心からの感謝を捧げたい。
YACReader を使ってみる
cooViewer の代替をググってみたら、YACReader というアプリを紹介する記事と出会った。YACReader は 64 bit で動作するらしく、しばらくは安泰だろう。
「The best way for reading your comics」などとあり、期待が高まる。
Windows、macOS、iOS、Linux にもインストールできるようだ。
macOS の場合、Homebrew cask でも YACReader をインストールできるので、Homebrew を使っているひとにはおすすめだ。
brew cask install yacreader
起動すると、縦に長いウィンドウがあらわれる。
zip ファイルや pdf などをウィンドウにドロップすると内容が表示される。ただし、画像の入ったフォルダはドロップできない。コマンド + o でフォルダを選択することは出来る。
これを出来るだけ、cooViewer で自分が使っていたように使ってみたい。
操作をカスタマイズする
YACReader のキーボードショートカットは、window メニューの「Show keyboard shortcuts」で一覧できる。ショートカットの部分をダブルクリックすれば、自分用に設定することも可能だ。
わたしの場合、どのように cooViewer を使っていたか思い出してみる。
zip ファイルなどを cooViewer にドロップすると、フルスクリーンで表示してくれていた。YACReader の場合は f キーを押すとフルスクリーン/ウィンドウ表示のトグルで、一度フルスクリーンにすれば、次回の起動の時も設定を覚えていてくれる。
また、少々邪魔なツールバーは h キーで表示/隠すを操作でき、これも次回の起動に反映される。
両開きの表示は d キー。
ページ送りの方向は j キーで切り替える。
これらも一度設定すれば、次回起動時に適用される。
矢印ボタンによるページ送りは、キーボードショートカットの設定画面でイジれる。
スペースキーで次ページという設定は、デフォルトでそのようになっている。
これでだいたい、わたしの使い方は再現できたと思う。
ひとつだけ、cooViewer は左のページをクリックすると、次ページへ、右のページをクリックすると前のページに戻ってくれた。これを再現する方法がちょっとわからない。
クリックによるページ送り
仕方がないので、Hammerspoon のコードを書いてみた。
一応下に掲載してみるものの、あまり出来のよろしくないコードで、フルスクリーンだと、メニューの操作に支障が出てくる。
ちなみにわたしは、左キーで次ページ、右キーで前ページへ移動するようカスタマイズしている。
🧟 追記 19.12.15
前のコードはあまりにヒドかったので、さすがに修正しました。
- ダブルクリックでフルスクリーンになるのを抑制した。ただ、完全には抑制できてない。
- メニューを多少、いじれるようになった。
- プリファレンスのウィンドウを触れるようになった。
- フルスクリーンでも多少はメニューをいじれるようになった、と思う。環境によるかもしれない。
- ウィンドウの縁 30px 分はクリックしても反応しないようにした。ウィンドウの大きさを変える場合にそなえて。
- というか前のコードだと数字のウィンドウの数値の取り方がめちゃくちゃだったのでそれを修正した。
- 右クリックメニューもさわれるようになった(19.12.18)。
📝 init.lua
-- YACReader
local menuClick = false
local function mousePress(event)
if event:getButtonState(0) and menuClick == false then
local win = hs.window.focusedWindow()
local frame = win:frame()
local y = (frame.y + 30)
local x = (frame.x + 30)
local w = (frame.w + x - 60)
local h = (frame.h + y - 60)
local size = (frame.w / 2 + x - 30)
local loc = hs.mouse.getRelativePosition()
local standard = win:isStandard()
if (y < loc["y"]) and (x < loc["x"]) and (h > loc["y"]) and (w > loc["x"]) and standard then
if (size >= loc["x"]) then
hs.eventtap.keyStroke({}, "left", 0)
else
hs.eventtap.keyStroke({}, "right", 0)
end
local state = event:getProperty(event.properties.mouseEventClickState)
if state == 2 then
event:setProperty(event.properties.mouseEventClickState, 1)
end
else
menuClick = true
end
elseif event:getButtonState(1) then
menuClick = true
else
menuClick = false
end
return false
end
yac = hs.eventtap.new({hs.eventtap.event.types.leftMouseDown,hs.eventtap.event.types.rightMouseDown}, mousePress)
local function yacmouse(name, event, app)
if event == hs.application.watcher.activated then
if name == 'YACReader' then
yac:start()
else
yac:stop()
end
end
end
yacWatcher = hs.application.watcher.new(yacmouse)
yacWatcher:start()
getButtonState(0)
クリックを検知して bool 値を返す。0 は左クリックをあらわす。
hs.window.focusedWindow
フォーカスされたウィンドウを取得する。YACReader のウィンドウの、左右どちら側をクリックしたのかを確認するため、サイズを知りたいのである。
frame()
取得したウィンドウの幅、高さ、x、yの位置を hs.geometry という形式で返してくれる。
変数.w や、変数.h で、幅や高さの数字を取り出せる。
hs.mouse.getRelativePosition
マウスの位置をテーブルで返してくれる。テーブル[“x"]、テーブル[“y"] などとやると、数字を取り出せる。
hs.application.watcher
後半は、application.watcher でアプリを監視し、アプリが YACReader に切り替わった時だけ、マウスイベントをスタートするようにした。
これでだいたい、満足のいくカスタマイズが出来たと思う。
けどやっぱり、まったく同じようにはいかない。
cooViewer は左上に残りページを示すゲージみたいなのがあって便利だった。それと cooViewer はアプリを終了しても、前に開いた zip などを覚えていてくれており、これも地味に便利だった。
とはいえ、泣いたって cooViewer は帰ってこない。開発終了は寂しい話だが、われわれは前に進むべき時なんだろう。
ディスカッション
ピンバック & トラックバック一覧
[…] ネット上では、独自にコードを改変してYACReaderでクリックによるページ送りを実現する方法も紹介されていますが、なかなかハードルは高いでしょう。 […]