fzfでコマンド履歴を選択

fzfとかpeco、便利ですよね。

私のzsh設定では、Ctrl-rの履歴検索を、fzfを用いたものに変更しています。 よく書いてある設定を利用すると重複している履歴も表示されてしまうのですが、これを除きたいと思い、改良してみました。 以下でできます。

function fzf-history-widget() {
    local tac=${commands[tac]:-"tail -r"}
    BUFFER=$( ([ -n "$ZSH_NAME" ] && fc -l 1 || history) | sed 's/ *[0-9]* *//' | eval $tac | awk '!a[$0]++' | fzf +s)
    CURSOR=$#BUFFER
    zle clear-screen
}
zle     -N   fzf-history-widget
bindkey '^R' fzf-history-widget

ポイントはawk '!a[$0]++'で、これで重複を除いています。sort | uniqだとソートされてしまいますが、これなら順番を維持したまま重複を除けます。

こういうのを調べていると、シェル芸にも興味が出てきたりしますね。

Wineのフォントを綺麗にする

いろいろなところにやり方が書いてあるが、情報が古かったりする。

mattintosh.hatenablog.com が一番参考になるが、情報が多すぎて混乱するので必要最小限のことだけまとめておく。

$ wine regedit

レジストリエディタを起動して、 HKEY_LOCAL_MACHINE -> Software -> Microsoft -> Windows NT -> CurrentVersion -> FontSubstitutes の中の"MS Shell Dlg"を編集、好きなフォントにする。 IPAMonaUIGothicなら問題ないことを確認している(あらかじめMac側にインストールしておくこと)。

フォントを~/.wine/drive_c/windows/Fontsに入れるという記事もあるが、これは不要。

あとは

$ winetricks settings fontsmooth=rgb

が多分必要。 (参考:How do I enable font anti-aliasing in Wine? - Ask Ubuntu

これで再起動させれば、綺麗になってるはず。

2018/7/28追記

上の設定だけではMSゴシック等が駆逐しきれないことがある。 このあたりを参考にHKEY_CURRENT_USER¥Software¥Wine¥Fonts¥Replacementsの設定をすると良い。

macOS と Wine で作る HSP 3 の開発環境 — さめたすたすのお家

PDFに目次を追加するソフトウェア

Mac上でPDFの目次(しおり、bookmark)を追加・編集するソフトが意外に見つからなかったのでメモ。

一つはJPdfBookmarksGUIでもCUIでも使える。

あとはcpdf、 GhostScriptでもできるらしい。

keyhacが重い

keyhacを使っていると、ウインドウ立ち上げ直後などに結構長時間フリーズが生じてしまうようです。これが結構ストレス。

Karabiner-Elementsでも対応してくれればいいのですが、見ている限りまだっぽい…。待つしかなさそうです。Pull Requestを送れるくらい技術力があればいいのだけれど。

BrissでPDFの読み込みが失敗するときの対処

スマホ電子書籍リーダーで読むために、PDFの余白を切り取ろうとした話です。 Brissを使えば良いことは調べればすぐに分かったのですが、相性とかでやたらと時間がかかったのでメモしておきます。

どういう状況だったかというと、PDFを読ませても真っ黒な画面しか出てきませんでした。コマンドライン側でも何やらエラーを吐いていました。BrissのREADMEには、PDFのファイルサイズが大きい場合には java -Xms128m -Xmx1024m -jar briss-0.9.jarを使えと書いてありますが、これも上手くいきませんでした。

結論から言うと、pdfjamに食わせることで解消しました。pdfjamは、主にページの抜き出しや結合等を行えるコマンドラインツールです。何もオプションを指定せずに

pdfjam input.pdf

とすれば、全く同じ内容のPDF"input-pdfjam.pdf"が作成されます。こちらをBrissに食わせることで、今度は問題なく余白を切り取ることができました。

その他

pdfjamは内部でpdflatexを使用するので、TeX環境が必要なことに注意が必要です。

同じようなことができるqpdfはBrissと相性が悪いようで、こちらが出力したものは受け付けてくれませんでした。 嘘だったので訂正。qpdfがダメなのではなく、元のPDFに問題があるだけだった。pdfjamはLaTeXを介して変換するので、その過程でいい感じにしてくれるらしい。

他にPDFの余白切り取りのようなことができるツールとしては、k2pdfoptもあります。こちらはもう少し高機能で、Kindle用に読みやすくレイアウト変更などもしてくれます。もしも切り取りだけしたいなら、出てくるメニューでmoと入れて、cropを選べば同じようなことができます。ただしこちらは1ページごとに余白を切り取るため、ページ毎にサイズが変わってしまうのが難しいところです。

macOS SierraでVimの日本語入力を快適に

Vimを使っている人は、Escでインサートモードを抜けたとき、日本語入力を解除して欲しくなると思います。 El CapitanまではKarabiner(旧KeyRemap4MacBook)が使えたため、 m.designbits.jp で上手いことできていたのですが、SierraになってKarabinerが動かなくなってしまったため、この方法が使えなくなってしまいました。 Sierra用にはKarabiner-Elementsが開発中ですが、どうやら一つのキーに複数のキーシークエンスを設定するような機能は未実装のようです。 (参考:Mapping a key to a sequence of keys · Issue #347 · tekezo/Karabiner-Elements · GitHub)

そこでKeyhacというツールを使用して、やりたいことを実現できたので、その設定を書いておきます。

Keyhac - Pythonによる柔軟なキーカスタマイズツール - craftware

KeyhacのMacVim用設定ファイル