18
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Emacs でポイントの下の画像ファイル名をツールチップに表示

Last updated at Posted at 2018-09-26

はじめに

この記事は「なぜ我々はいまだに文字列でコメントを書いているのか」に触発されて、Emacs でも画像のポップアップが出来ないか試しに実装してみたものです。

使い方

Gist に image-tooltip.el をアップしました。

;;; -*- lexical-binding: t; -*-

(defun image-tooltip-at-point ()
  "ポイントやマウスカーソルの下の画像ファイルをツールチップ内に表示します。

使い方:
 (define-key c-mode-map \"\\C-co\" 'image-tooltip-at-point)
 (define-key c-mode-map [mouse-1] 'image-tooltip-at-point)

./very-sorry.png
./very-sorry.gif

上記のようなファイル名を`ffap'が認識出来れば C-c o やマウス左クリックでポップアップします。"
  (interactive)
  (unless (display-graphic-p)
    (error "Window system required."))
  (require 'ffap)
  (let ((file (ffap-file-at-point)))
    (when file
      (unless (and (stringp file)
                   (not (directory-name-p file))
                   (file-exists-p (setq file (expand-file-name file))))
        (error "File not found."))
      (when (image-type-from-file-name file)
        (let* ((x-y (window-absolute-pixel-position))
               (tooltip-frame-parameters `((left . ,(+ (car x-y) tooltip-x-offset))
                                           (top . ,(+ (cdr x-y) tooltip-y-offset))
                                           (internal-border-width . 0)
                                           (border-width . 0)))
               (image (create-image file))
               (x-gtk-use-system-tooltips nil)) ; Linux ではこれしないと表示されない…
          (image-animate image)
          (tooltip-show (propertize "a" 'display image)))))))

この関数をinit.el等にコピーして、

(define-key c-mode-map "\C-co" 'image-tooltip-at-point)
(define-key c-mode-map [mouse-1] 'image-tooltip-at-point)

のようにキーに割り当ててください。
その後、ソースコード等を開いてコメントに書いたファイル名の上でC-c oか左ボタンクリックすると画像がポップアップします。
ツールチップなので、ポイントやマウスを動かすか暫くすると自動的に消えます。

制限事項

GIF や PNG 等の画像サポートが有効な GUI 版 Emacs が必要です。
Windows 版と Linux 版で動作確認しました。

ファイル名の認識にffapを使っているので、制限や癖などは全てそれに準じます。

実行画面

popframe5.gif

GIF アニメも再生されます。

popframe6.gif

すぐ動作確認出来るように PNG 画像の方は置いておきます。(GIF の方は著作権的に不明なので(汗…各々で用意してください。PNG の方はいらすとやから拝借)

very-sorry.png

最後に

取り敢えず、自分はこれで満足してます。
コードは非常に単純なので、皆さんの方で色々改良してみてください!
何か不具合などあった場合はコメントして頂ければ出来る限り直すつもりです。
それでは。

編集履歴

2018/10/1 画像をフレームではなくツールチップに表示するバージョンに変更

18
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?