Mac で縦書きエディタの TATEditor を使う

2018年6月9日

 Mac で縦書きができるエディタの状況は、かつて、かなり寒々しかった。LightwayText など、いいエディタもあったが、数は多くなかった。
 これが大きく様変わりしたのは、Mac OS X Lion で標準エディタ「テキストエディット」が縦書きをサポートして以来だと思う。
 いろんなエディタが縦書きに対応してくれて、いまや百花繚乱の様相をていしている。
 ここでそれらを紹介しようかと思ったけど、おれがなんか書いても、kanzメモ さまの、すばらしい記事を一歩も出ないだろう。
 
🔗 Mac用縦書きソフトの紹介: kanzメモ

 今ならここに stone や、復活するらしい egword Universal が加わるだろうか。おれはかつて、stone のレビューみたいな記事で「明朝体のフォントを使うと動作が鈍くなる気がする」みたいなことを書いた。
 いまはそんなことないみたい。
 上記の記事にあるほとんどのエディタで、2 万字ほどのテキストを試してみたけど、すべてで軽快に動いた(2018.03.02 MacBook early2016 メモリ8G core m3 HighSierra)。


スポンサード リンク

 もうひとつ、意外に見逃しがちだけど Mac で使える縦書きエディタがある。
 Windows の縦書きエディタ界隈では有名だと思われる、TATEditor の、Mac 版。
 おれはこのエディタにちょっと期待している。

🔗 環状の時計 – 縦書きエディタ「TATEditor」あります

🖋 TATEditor を試す。

 インストールは、アプリケーションのアイコンを、アプリケーションフォルダに投入する、おなじみのやり方でいいみたい。おれはフォルダごとアプリケーションフォルダに移動する形でインストールした。フォルダごとコピーすると、TATEditor フォルダに設定書類が作られる。

 起動するとまず、簡易設定ウィザートの画面が表示される。

 デフォルトフォントを、36pt と異様に大きくした。
 こうしないと、字が小さくて話にならないのである。これは Retina ディスプレイと関係しているのかもしれない。
 また、「縦書き未対応IME対策(Google日本語入力等)」という項目にもチェックを入れた。
 ちなみに簡易設定ウィザートは、⌘j で呼び出せる。

 編集画面はこんな感じ。

 2 万字のテキストファイルを読みこませてテストしてみたところ、スクロールが若干にぶいか、という程度だった。実用には十分耐えうると思う。
 テキストは自動バックアップされ、バックアップされたファイルは書類フォルダに保存されるようだ。

 TATEditor は、クロスプラットフォームで開発できる GUI ライブラリ、wxWidgets というもので作られている。
 Windows版、Mac版、Ubuntu版があり、環境を選ばない。
 保存されるファイルの形式はプレーンテキストだ。Windows と Mac で同じテキストファイルを馴染んだエディタで編集できるのは強みだと思う。
 これはしかし、macOS ネイティブではないということでもあり、Mac の UI や操作から見ると少し違和感をおぼえるところもある。

 上の画像は保存ダイアログだが、こんな長いのはじめて見たわ。おれの MacBook の画面からはみ出るほど長いのである。
 こういうあたり、真面目に使用するのを躊躇してしまいかねない。
 しかし、それでもなお。
 TATEditor は期待したくなる可能性に満ちている。

🖋 TATEditor は小説執筆のためのエディタ

具体的な用途として小説等の執筆に重点を置く予定(!)です。
readme.txt

 リードミーにそんなことが書いてある。これが嬉しい。
 おれは「なろう」に、平均来訪者数 0 人の壮大なファンタジー小説を連載している、小説執筆おじさんなのである。
 そんな世間のゴミのようなおじさんに、TATEditor は優しい手をさしのべる。
 実装している機能が、

  • ルビ機能
  • 傍点機能
  • 縦中横機能
  • 割注機能

 とくる。PDF、ePub の書き出し、Unicode 対応、正規表現での検索、とか、いろいろある。フルスクリーン表示も出来る。

 そのうえ「なろう記法」にも対応しているのである(なろう記法、というのは、例えば「|厄災の劫火魔人《デオチェトール》!」とかやると、《》内の文字をルビにしてくれる、みたいな感じのものである)。
 このマークアップは、「小説家になろう 」の他に、「カクヨム」「pixiv」「でんでんマークダウン」「青空文庫」の記法に対応している。
 また、ウィンドウ下辺のステータスバーには、文字数も表示される。

 機能については、cc4966.net や同梱の read me ファイルが詳しい。

 右側のウィンドウは、アウトラインツリーだ。文章の冒頭に「.」を打つと、HTML でいうところの<h1>みたいな見出しを作れる。ピリオドふたつの「..」なら<h2>となる。

 おれが一番、気がきいてると思ったのは、Google 日本語入力などの、縦書きに対応していないインプットメソッドが表示するウィンドウの対策だ。変換候補とかを表示してくれる小窓が、縦書きだと変換したい文字そのものを隠したりして、これが邪魔臭いのだ。
 しかしこの TATEditor、邪魔にならないよう、小窓の表示位置をちゃんとずらしてくれるのである。
 おれが使ってる IM はどちらかといえばマイナーな AquaSKK である。さすがに無理だろ、と思ってたらそんなことない。ばっちり機能する。
 これはかなり感動した(なお、ことえりは縦書きに対応している)。

 TATEditor の作者さんは、今後、次のようなものの実装を考えているらしい。

・世代管理機能(小説的に重要)
・プラグイン、マクロへの対応
・登場人物リストなど小説向けの辞書機能のようなもの(個人的に重要)
・アイディア帳ライクなウィンドウ

 おいおい、なにになろうとしてんだよ。最高じゃないか。

🖋 ctrl + fbnp などの問題

 Mac においては、コントロールキーと、フォワードの「f」キーで、キャレットをひとつ前へ移動させる、みたいなキー操作がある。

  • ctrl + f で前に移動
  • ctrl + b で後ろに移動
  • ctrl + n で次の行へ移動
  • ctrl + p で前の行へ移動

 他にも ctrl + d でデリート、ctrl + h でバックスペースとかあるのだが、これが TATEditor だとまったく動作してくれない。
 さすがにこのままだと使いづらいと思うので、おれの場合は Hammerspoon で対応した。
 といっても、下記の記事さまをつるっと丸パクった形である。

🔗 Karabiner 使えない対策: Hammerspoon で macOS の修飾キーつきホットキーのキーリマップを実現する – Qiita

🔨 init.lua

local function keyCode(key, modifiers)
   modifiers = modifiers or {}
   return function()
      hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), true):post()
      hs.timer.usleep(1000)
      hs.eventtap.event.newKeyEvent(modifiers, string.lower(key), false):post()      
   end
end

local function remapKey(modifiers, key, keyCode)
   hs.hotkey.bind(modifiers, key, keyCode, nil, keyCode)
end

local function disableAllHotkeys()
   for k, v in pairs(hs.hotkey.getHotkeys()) do
      v['_hk']:disable()
   end
end

local function enableAllHotkeys()
   for k, v in pairs(hs.hotkey.getHotkeys()) do
      v['_hk']:enable()
   end
end

remapKey({'ctrl'}, 'p', keyCode('right'))
remapKey({'ctrl'}, 'n', keyCode('left'))
remapKey({'ctrl'}, 'f', keyCode('down'))
remapKey({'ctrl'}, 'b', keyCode('up'))
remapKey({'ctrl'}, 'h', keyCode('delete'))
remapKey({'ctrl'}, 'd', keyCode('forwarddelete'))
remapKey({'ctrl'}, 'e', keyCode('end'))
remapKey({'ctrl'}, 'a', keyCode('home'))

local function tateditorEvent(name, event, app)
    if event == hs.application.watcher.activated then
        if name == 'tateditor' then
            enableAllHotkeys()
        else
            disableAllHotkeys()
        end
    end
end

tatewatcher = hs.application.watcher.new(tateditorEvent)
tatewatcher:start()

 本来なら、例えば ctrl + p は矢印キーの上を割り当てるべきなんだろうけど、TATEditor に限っては、矢印キーの右を割り当てている。このあたり、使用される場合は、


remapKey({‘ctrl’}, ‘p’, keyCode(‘right’))

 の、「right」の部分をいいように書き換えてくれたらと思います。

 ということで、TATEditor さんには期待してるっす、という話なのであった。
 Windows で縦書きっていうと、Haijin Boys Online さんの Mery というエディタもβ版で縦書きを実装しているらしい。マジで「なろう」とかのせいで、縦書き需要ふえてんじゃねーの。
 どえらい時代ですよ、まったく。

スポンサードリンク