Posts tagged ‘Zim modifycations’

最初、「首までどっぷり」ってのは"Knee deep in the hoopla."みたいな感じかと思って居たのだが、調べたら ちょっとニュアンスが違うようだ。そのくらい、(全然やりたくなかったのに)Zimに はまってしまっている。

 

(他のノートアプリ同様)Zimも駄目なところが多く、ガッと捨てようと思ったのだが、探しても他にいいものは全くなかった。それで考えて、細かい問題は いろいろあるものの致命的なもの(例: 遅い、メモリの浪費)は ないので、慣れたり発見したり手を加えたりして使っている。前回も少し書いているが、今までに以下のようなことをした(詳細は追って追加したい ← と書いた割には ほとんど書いた気がする)。

  • JoplinからZimへのインポート関連
    • ノート・ノートブック名の変換、正式な(または本来の)ノート・ノートブック名の保存。
      • Zimはノート・ノートブック名に使えない文字が多いので、それらを削除したり別の文字に置換するようにした。
      • 正式なノート・ノートブック名を保存するため、追加ノート情報ファイルに記録するようにした。今のところ、以下を格納している。
        • 正式なノート名
        • 正式なノートブック名
        • JoplinのノートID: Zimで更新したノートをJoplinに戻す(反映させる)時に使う。
    • 書式の修正
      • pandocでZimの形式に変換する時に仕様の差があるので、その対処をした。
        • 具体的には、水平線("-"3個以上)をZim("-"20個)に合わせている。
      • また、ノートにZim用のヘッダ(pandocは付けない)を追加している。
        • そこにノートの作成日時を入れるため、Joplinから取っている。
    • Zimのノートブックの作成
      • Joplinのノートブック名と同じディレクトリを作るようにした。
      • その時、Zimのノートブックファイル(notebook.zim)も作るようにした。
    • インポートを手軽に。
      • Joplinのノートを外部編集を開始する操作で、ノートをZimにインポートできるようにした。
      • インポートが終わったら通知が表示されるので、外部編集を終了する。
  • ZimからJoplinへのエクスポート関連
    • ノート・ノートブック名を戻す。
      • インポート時に保存しておいた正式なノート・ノートブック名に戻す。
    • 書式の修正
      • ZimからMDに変換する時に誤変換のようなものがあるので、その対処をした。
        • Zimから出す時に書式が欠けるため、出す前後に処理を入れないと うまく行かない。
      • 例えば以下である。
        • "// 文字 //": "//"が"*"になってしまうので、"/"をエスケープする。
        • (行頭)"--- 文字 ---" : 水平線ではないので"*** 文字 ***"に変換する。
          • 手でJoplinに入れても問題ないので、Zimが"---"を誤変換してしまうようだ。
        • 行頭のn個のTAB + 文字 (インデント): MDに同様な書式はないので、引用にする。 → n個の">" + 空白 + 文字
          • ただし、TABで始まるものにはインデントされたコードブロックや箇条書き、チェックボックスもあるが、それらは変換しない。
        • 行頭の空白 (+ 文字):  上と同様に引用にする。 → ">" + 空白 (+ 文字)
          • 空白の数で">"の数を増やすと良さそうだが、どうやって数を決めるべきか分からない。
        • チェックボックス: ""と""になるので、MDの"[ ]"と"[X]"に戻す。
    • リソース(画像など)ディレクトリの変換
      • ZimとJoplinで同じファイルを指していても、ディレクトリの表現や階層が異なるので変換する。
    • Zimで作った新規ノートへの対応
      • 正式なノートブック名(あれば)でJoplinのノートブックを作る。
      • 正式なノート名(あれば)でJoplinのノートを作る。
      • Joplinにインポートして割り当てられたノートIDを、追加ノート情報ファイルに保存する。
      • TODO
        • 正式なノート・ノートブック名を手軽に(追加ノート情報ファイルに)設定する手段(例: 入力ダイアログを出す)が必要だが、まだない。
        • Zimで追加したリソース(画像など)をJoplinに取り込み、ノート中のディレクトリを変換する処理が必要。
          • 今は、Zimで普通に追加した画像はJoplinでは見えない。
    • エクスポート(更新・追加)を手軽に。
      • 自動または手動(ツールバーのボタン: 後述)でできるようにした。
      • 自動の場合、約30秒間隔で、ノート(のファイル)の更新時刻が前回のチェック開始時刻から現在時刻の約90秒前までの間のものを探し、それをJoplinにエクスポートするようにしている。
        • 約90秒というのは「ノートを書き終わったかも?」と判定する時間である。
        • ファイル検索が頻繁で効率が悪くて気に入らないが、とりあえずは使えている。
          • 効率を良くするにはinotifywaitなどを使えばいいのだが、変更後に一定時間(今回は90秒)経過するまで保留するのが難しいので、保留している。
      • 自動でエクスポートされるまで待てない場合は、手動でもできるようにした。
  • UIの改良
    • GTKのCSDのようなものを止める。
      • Zim(実際にはGTKの流儀のようで、他にもいろいろなアプリがそうしているが、なんでそんな勝手なことをするのかと思う)がタイトルバーを勝手なUIにしていて、通常あるメニューのボタン(▼)が出なくなるため、僕の場合は最小化(_)と×(ウインドウを閉じる)が隣になってしまって間違って押しやすいので、ソースを改造してウインドウマネージャが付ける普通のボタンに戻した
        • 今のところは、GTKやZimがタイトルバーを変更しないようにしているだけのため、Zimが追加しているボタン(前・後のノートへ移動, ホーム, 編集のon/off, 検索)は出ないが、最初から余計だと認識していて使わないので問題はない。
          • Chromeもこういう感じになったが、今のディスプレイは広いんだからタイトルバーの面積くらいケチらなくてもいいのに、どうしてこういう発想になるのか理解できない。
        • TODO
          • 前・後のノートのボタンは あれば便利な気がするので、あとで付けたい。
    • 正式なノート・ノートブック名の表示
      • ソースを改造して、Zimのファイル名ベースのノート名などの代わりに、上述の保存しておいた正式なノート・ノートブック名を表示するようにした。
        • ごく当たり前のことなので見ても何がいいか分からないとは思うが、例えば、Zimでは使えない"#"や"/"が(代用文字でなく)出ているし、"_"は空白に変換されずに出る。
        • なぜか、図では本来は"-)"の")"がなくなっているが、短縮処理のためだろう。
      • 処理概要: ノートを読み込む時に追加ノート情報ファイルがあればそれを読み、キーと値をノート(Zimでは「ページ」)のメタデータ(Page._parsetree.meta)に追加し、タイトルバーなどのUI部品でページ名などを表示する時に それらがあれば使う。
      • 今のところ、以下で出る。
        • タイトルバー: ノートとノートブック名
        • タブのようなボタン(パスバー(下図の中段), ブックマークバー(下図の下段)): ノート名
      • TODO
        • 左サイドバーのpage index(ファイルマネージャーのようなもの)は作りが違っていて変更すべき箇所が分からないので、まだである。
    • バージョン表示に追加
      • 改造版であることが分かるように、バージョン表示ダイアログに出るようにした。 (: 中央の".B-3"と最下行)
  • 簡単な機能追加とツールバーへの登録
    • 以下の処理をZimのCustom toolとして追加し、Zimのツールバーボタンに登録して手軽に実行できるようにした。
      • 現在のノートのJoplinへのエクスポート(更新・追加) (: 中段左寄りの青い"J"のボタン)
        • 処理内容は上述のとおり。
      • クリップボードをテキストとしてペースト(LibreOffice Calc対応) (: 中段左寄りのペーストのボタン)
        • 前回も書いたが、ZimかLibreOfficeのクリップボードの扱いが変なのか、LibreOffice Calcからテキストをペーストすると画像になってしまうので、xsel(その後、xclip -quietのほうがハングしにくいことが分かった: 11/22 5:26)コマンドでPRIMARYバッファのテキストを取得して、ノートに挿入できるようにした。
          • なぜかCLIPBOARDバッファを取ろうとするとハングするが、PRIMARYで問題はなさそうだ。
            • 調べると、CLIPBOARDはPRIMARYなどと処理が違うようなので、その関係だろうか。
          • (12/1 12:06) その後、LibreOffice CalcからだとCLIPBOARDでないとテキストが取れないようなので、結局、xselを使い、ハング回避のためにタイムアウトさせることにした。
          • 以下にコマンド例を示す。

sh -c 'to_ms=120; to_s=`echo "scale= 3; $to_ms / 1000" | bc -l `; xsel -o -b -t $to_ms < /dev/null & xs_pid=$!; sleep $to_s; kill -TERM $xs_pid'

        • これはボタン以外にショートカット: Ctrl+Shift+Vに割り当てている。
        • TODO
          • なぜか、Zimでコピーしたテキストはペーストできない。Zimとxselが競合しているのかと思うが、今のところは通常のペーストと使い分けが必要で、ちょっと気に入らない。
      • 選択範囲をインターネット(Google)で検索 (: 中段左寄りのGoogleのボタン)
        • 選択したテキストをGoogle検索のURLに追加して、デフォルトブラウザに渡して検索できるようにした。
        • これができるエディタは ほとんどない(知らないだけかも)が、是非欲しかった機能なので付けた。
        • TODO
          • セキュリティホールになりそうな気がするが、個人用なので注意すれば良さそうだ。

 

随分手間が掛かっている(これでも全然終わりでない・・・)が、ソースなどを見れば結構分かり、ツールバーのように簡単にできて効果が大きいものも多いので、ストレスは少ない。そして、今まで仕方なく使っていたMDと違って、Linuxのコマンドやプログラム(`とか~とか-とか*とか#など、MDで特別な意味を持つ記号がバンバン出て来る)を書くのに何も気を遣わなくていい、いや それ以上に、本来の記述とノート(ファイル)が全く同じに書けることが重要・必須だ。まさに、「まだMDで消耗してるの?」だ。

ただ、Joplinに送る時(見る時)にMDに変換されるので、あまりいろいろな記号や書式を入れると、うまく変換されるか心配には なる。そして、運が悪いとバグが見付かって、余計な作業が増えるw

なお、QOwnNotesかZettler(かZimにインポートする時)に書式がおかしくなったノートが結構あって、見付けた時に手で直している。まあ、そんなの可愛いもので、見れば分かるので問題ない。

 

PS. 自分の整理のため、本システムで今分かっている残件・TODO・直したい・やりたいことを以下に挙げる。 (19:54)

  • Zimの不具合・変な点など
    • 描画の更新がおかしいことがある問題への対処。
      • 大きいノートを変更すると、その行が上下に重複して表示されることがある。
      • これを一番先に直したいが、見当が付かない。
      • 直せないなら、デフォルトのフォント(問題が起こらないようだ)の行間や太さを変えて、すっきり見えるようにしたい。 ← デフォルトでも問題が起こったので、駄目。 (11/21 12:35)
    • 行の(ソフト)ラップがない(ように振る舞う場合がある)。
      • これも早く直したいが・・・
      • せめてHomeキーで行頭に戻れるようにしたい。
    • ノートの先頭の見出しがMDに出ない場合がある。
      • 先頭に空行以外があれば、その次が見出しになるようだ。
    • [済] 書式に余計なものがある。 → ソース(pageview/__init__.py)を変更しても反映されないので調べたら、Zimのスタイル設定ファイル(.config/Zim/style.conf)で変更できることが分かって、自分の好みにできた。 (11/22 18:01)
      • 見出しのH1に下線が付き、H3は斜体になる。: 文字サイズだけでいい。
      • 下線は色付きになってしまう。: 下線だけでいい。
  • 機能追加・修正
    • Zimの書式指定タグ関連 (11/24 16:10)
      • 書式指定のタグ(後述の"@"で始まるタグ(ページタグ)とは異なる)に、Linuxやプログラムに良く出て来るもの(例: "__XXX__"(下線), "// YYY //"(斜体)※)があり、インポートしたり貼り付けたりしたあとにコードブロックにし忘れると、次回開いた時に下線(例の場合、"XXX")や斜体(例の場合、" YYY ")になってしまって嫌なので、それらを滅多に出て来ない文字列(例の場合、"⟪_XXX_⟫", "⟪/ YYY /⟫")に変更した。
        • ※本文の「"// 文字 //": "//"が"*"になってしまう」はこれが原因だった。 WYSIWYGなので、中身までは気付かなかった。
        • 似たようなものは、他に"** ZZZ **"(太字)や"~~ WWW ~~"(取り消し線)もあるが、同様に変更可能である。
        • この関係で、インポート時に本来のタグを変更したものに変換するようにした。
      • ページタグも同様にしたかったが、書式が異なるうえに処理が分散していて完全に変更するのが難しいので、ひとまず無効にした。
    •  エクスポート関連
      •  Zimで追加した画像のJoplin向けの処理
        • 本文に書いたとおり。
      • コードブロックのインデントをMDに反映させる。
        • 今はコードブロックが引用になってしまう。
      • 未更新の全ノートを手動で更新(エクスポート)できるようにしたい。
      • Joplinの新規ノートブックを階層も含めてちゃんと作成する。
    • インポート関連
      • インポート時の誤変換などの修正・対処
        • [外部] 空行を挟まない改行が繋がることがある。: pandocの問題? → Zimで書いた場合は繋がらないので、以前のエディタ(Zettlr?)の仕業だろう。 (11/22 18:01)
        • [正常] "@"+文字がZimのタグ(ページタグ)になることがある。 ← Zimの仕様だった。ただ、こういうところがMDみたいになっているのが気に入らない。が、シンプルなテキストファイルなので こうするしかないのも分かる。 (11/22 18:01)
          • とはいえ、ノートにはヘッダ部があるので、そこにタグを書けばいいのにとも思う。そうすれば、タグに空白や記号も含められる。 (11/22 18:27)
          • 逆に、Zimのタグを付ける方法が不明。。。 ← "@"+文字で付ける。(11/22 18:01)
          • → 結局、これの良くない点は、良く使う@をタグのマークとして使っていることだった。上述のように他にもそういうことがあったのでマークを変更したが、このページタグの変更は難しいので、ひとまず無効にして、意図せぬタグができないようにた。僕はタグを使わないので、当面は問題ない。 (11/24 16:10)
        • [外部] IPv6アドレスの一部が記号になる。 ← 再現しないので、以前のエディタの仕業だろう。 (11/22 18:01)
          • 例: ":b:"が"🅱️"(色は黒)になる。
          • 以前のエディタがおかしくした?
      • Joplinでのノートの変更をZimに反映できるようにする。
        • スマフォで更新することもあるかも知れないので。
        • → ひとまず、エクスポート時にJoplinとZimの変更が競合したら、Joplinのノートのバックアップを作り、Zimのノートを上書きし、メッセージを出すようにした。 (11/22 18:01)
          • また、インポート時(Joplinから操作)も同様にした(Zimのバックアップを作る)。
      • ノート中のscheme(例: http://)に見える記述やリンク(パスがリンクになる)の無効化または正常化? → ノートを読んでからフォーマットするため、指定箇所の無効化は無理そう(もちろん、その部分の書式をコードにすれば可能だし、全部を無効にすることはできそうだ)。 (11/22 18:01)
        • Joplinからインポートした時に変なノートができるのを防ぎたい。
        • また、変なリンクがあると、Zim自身でノートをペーストできない場合がある。
        • これに関連して、不正な"file:"のURLがあるとfs.pyがAssertionErrorになってエクスポートできない問題があったので、assertしないように修正した。 (11/22 18:01)
    • UI
      • 正式なノート名などの表示の追加(例: page index)
      • 正式なノート名などの入力UIの追加
      • ツールバーの箇条書き, 番号付きリスト, リンクなどの書式設定ボタン(: "x2"の右の箇条書きとその右の"H"の右のボタン)で出るメニューの要素を独立させて横に並べる。
        • プルダウンメニューは面倒なので。
        • ただ、多過ぎると邪魔になる。
      • カーソルの点滅を止める。
      • CSDを止めてなくなった前・後ページボタンを付ける。
    • その他
      • Zimでコピーしたテキストも、追加したテキストのペースト機能(本文に記述)でできるようにしたい。
      • 起動するたびに/tmpにログディレクトリ(zim-xxxxx)を作らないようにする。
      • アイコンが超ダサい。これだけで随分損しているのでは?
        • でも、そんなことは僕にはどうでもいいので放置w
  •  1
  •  0
Keys: , , , , ,