指定したポイントにうまくツールチップを表示できない
x-show-tip関数を使えばマウスカーソルからの任意の相対位置にツールチップを表示できますが、あくまでマウスカーソルと併用することを前提とされているため、きわめてありえるケース、つまりバッファ上の論理的なポイント付近にツールチップを表示することができません。
posn-at-point関数を使ってポジションを取得し、そのポジションにフレームやウィンドウのマージンを加味し、最終的にx-show-tip関数のピクセル座標指定でのツールチップ表示を使えば、なんとか目的を達成できそうに思えますが、メニューバーやツールバーの高さを取得する正当な手段がないため、正確な座標を算出できません。
以下がそのコードです。コメントアウトされている位置にメニューバーとツールバーの高さが入る必要があります。
(let* ((frame (selected-frame)) (point (point)) (position (posn-at-point point)) (window (posn-window position)) (frame-params (frame-parameters frame)) (x-y (posn-x-y position)) (inside-edges (window-inside-pixel-edges window)) (x (+ (car x-y) (car inside-edges) (assoc-default 'left frame-params 'eq 0))) (y (+ (cdr x-y) (cadr inside-edges) (assoc-default 'top frame-params 'eq 0) ;; title bar height + menu bar height ))) (x-show-tip "Hello" frame `((left . ,x) (top . ,y))))
ツールバーに関してはtool-bar-images-pixel-height変数などを駆使して、無理矢理算出できそうな気もしますが、メニューバーに関しては今のところお手上げです。
そしてこんな簡単なことに大切な時間を使うのが不毛で仕方ありません。