- ミーティング id:B4D60BDF-D9DA-49BA-B2E4-7806D720A81A
- 書類確認 id:E649572B-B72B-49BF-9475-2125365B682C
- 情報伝達 id:D0F01DED-9FB3-46F1-AAC8-EEAD18E4C208
- ソフトウェアアップデート id:F0B18FB0-B1F6-4B1F-AD10-D3EC5EDE4448
TODO 収録
SCHEDULED:
収録用コマンド
企画
定義されているクラスを一覧にする
find 対象のパス -type f -name '*.py' | grep -v __init__.py | grep -v migrations | grep -v test | xargs grep -n -e '^class '
クラスのドット名の一覧から特定のクラスの子クラスかどうかを調べる
import importlib
import inspect
from foo.bar import TargetClass
DOTTED_CLASS_NAME_LIST_FILE = ""
def check():
with open(DOTTED_CLASS_NAME_LIST_FILE) as fp:
for line in fp:
line = line.strip()
module_name = ".".join(line.split(".")[:-1])
serializer_name = line.split(".")[-1]
module = importlib.import_module(module_name)
serializer_class = getattr(module, serializer_name)
if not inspect.isclass(serializer_class):
continue
if issubclass(serializer_class, TargetClass):
print(line)
EmacsでPDFを扱うために右往左往する - 2024年夏
PDFを表示するなら Adobe Acrobat Reader
を使う事が多いだろう。これは本当に良くできているPDFリーダーで、だいたいの作業は Adobe Acrobat Reader
を使う事で事足りる。
しかし僕はPDFをEmacsで扱いたい。なぜならEmacsが好きだからだ。僕は多くの時間をEmacsと共に過ごしている。それこそ大袈裟ではなく家族や家、仕事などに使う時間よりも多い1。だからEmacsを強くするという事は、僕自身を強くする事と同じだ。
GUIで起動しているEmacsは、PDFを表示する事はできるが、それでは様々な事が足りていない。2022年の冬、僕はその足りていない様々な事を何とかしようと、EmacsでPDFを扱うために右往左往していた2 。
そこから2年が経過した2024年の今、作業環境を刷新した所、以前の情報では整備した環境を再現できない事に気が付いた。そこで僕はまたEmacsでPDFを扱うための長い旅に出る事にした。
EmacsでPDFを表示する
以前は何も考えなくてもEmacsでPDFを表示できたが、新しいmacに乗り換えた今はなぜかPDFをレンダリングできなくなっていた。恐らくコンパイル時のオプションがまずいか、依存するライブラリやツールの不足だと思われる。まずはこの原因を調べる事にした。
確かにpopplerやpdf-toolsはまだインストールしていない。仮にそれがなくても、EmacsでPDFを表示するだけなら出来ると考えていたが勘違いだっただろうか。
やはり出来る。まずは DocView
モードが上手くPDFを表示できない理由を調べていく。
Emacsが梱包している lisp/doc-view.el.gz
を確認すると、 doc-view-pdfdraw-program
は次のように宣言されている。
DocView
では、これらのツールを使いPDFをPNGに変換する事でバッファに表示できるようにしている。これらのコマンドがないと当然PDFがからPNGへの変換処理ができずPDFをレンダリングできないため、当然バッファに表示もできない。
PDF関連の以下のコマンドを説明して。
- pdfdraw
- mudraw
- mutool
- mudraw
なるほど。という事はMuPDFがインストールできていないからPDFが表示できないらしい。MuPDFをインストールする。
brew install mupdf
新しいmacOSはAppleシリコンなのだが、その場合Homebrewのインストール先は /opt/homebrew
配下になるようだ。これは今までIntelチップを使っていた時は /usr/local/Celler
、 /usr/local/Homebrew
にインストールされ、ビルドされたコマンドのシンボリックリンクが /usr/local/bin
に作成されていた。Homebrewの管理するディレクトリをOS側のディレクトリと分けるという狙いだろう。たしかにこの方がいいし、 macports
はそうなっているんじゃないかな(知らない)。
以下のLispを評価して、Homebrewでインストールしたコマンドを見付けられるようにした。
(add-to-list 'exec-path "/opt/homebrew/bin") ; Homebrew
(setenv "PATH" (string-join exec-path ":"))
すると DocView
を使ってPDFを表示できるようになった。
pdf-tools
DocView
ではPDFをPNGに変換し、それをバッファに表示する仕組みだった。そのためテキストの情報は失われてしまい、コピーできない。
pdf-tools
は、この仕組みを使わずレンダリングする。テキストの情報は失なわないためコピーできる。この表示のためのメジャーモードとして pdf-view-mode
が実装されており、これは pdf-tools
に梱包されている。
pdf-toolsは epdf-info
というプログラムのソースコードを保持しており、インストール時にソースコードからバイナリをビルドする。
brew install poppler
ビルドするためには、cmakeやらその他のライブラリが必要になる。Homebrewでpopplerをインストールすると、必要なライブラリも合わせてインストールされる。
poppler
をインストールできたら、 pdf-tools
をインストールする。
M-x package-install pdf-tools RET
epdf-info
をビルドする。
M-x pdf-tools-install RET
これでPDFを pdf-view-mode
を使って表示できる。
そもそもEmacsで仕事をする事が多い。