かつてこんな記事を書いたことがある。
neotree-modeにおいてquicklook機能をMacOSのQuickLook (qlmanage) をラップする形で実装したものである。
さてUbuntuユーザにも同様の機能が欲しくなる。QuickLook相当のものは GNOME sushi であり、インストールは容易である。
sudo apt install gnome-sushi
これでインストールされる sushi
コマンドを使って冒頭の記事のように実装すると、プレビュー自体は起動するのだが、初回のプレビュー以降はEmacsのフレームの後ろに隠れてしまう。やはり常に前面にプレビューが出てほしい。
そこでUbuntuのコマンド xdotool
を利用する。
sudo apt install xdotool
設定は下記コードによる。sushi を動かしている実体 org.gnome.NautilusPreviewer
を xdotool
により探し出し、プレビューのウィンドウを前面に引っ張り出す (windowactivate) 仕組みである。
(require 'neotree)
(defvar neotree-sushi-search-command
"xdotool search --desktop 0 org.gnome.NautilusPreviewer windowactivate")
(defun neotree-sushi (file-path &optional arg)
(interactive)
(neo-global--select-mru-window nil)
(call-process-shell-command
(format "sushi %s; sleep 0.1; %s"
file-path
neotree-sushi-search-command)
nil 0))
(defun neotree-quick-look2 ()
"Quick Look like NeoTree open event."
(interactive)
(neo-buffer--execute nil 'neotree-sushi 'neo-open-dir)
(neo-global--select-window))
(with-eval-after-load "neotree"
(define-key neotree-mode-map (kbd "SPC") #'neotree-quick-look2))
これにより、Ubuntuでも快適なプレビューが実現できる。同様のハックはdiredにも応用できるだろう。