[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
popup frames
- From: Katsumi Yamaoka <yamaoka@xxxxxxx>
- Date: Thu, 23 Jun 2005 18:47:11 +0900
- X-ml-name: emacs-w3m
- X-mail-count: 08200
画面が混雑して emacs-w3m のフレームがどこかに隠れてしまっている
場合でも、M-x w3m でそれを表に浮上させることができるのが便利です。
みなさんのところでは、そういうふうに動作していますか?
Fedora Core 4 の環境に変えてみて、ぼくはそれができなくなっている
ことに気がつきました。どうも raise-frame という関数は、環境によっ
ては動作しないものらしいです。
そこで、少なくとも emacs-w3m だけはそれができるように、make-frame
と delete-frame で置き換える advice を作ってみました。raise-frame
ではなくて select-frame-set-input-focus に対して行なっているのは、
emacs-w3m のフレームの ID が変わってしまっても問題無いのが、そっ
ちだからです。
;; Emacs 21 用。
(defadvice select-frame-set-input-focus
(around make-new-frame-in-the-same-place (&optional frame) activate)
"Make it work for emacs-w3m."
(or frame (setq frame (selected-frame)))
(if (with-current-buffer (window-buffer (frame-first-window frame))
(eq major-mode 'w3m-mode))
(let ((params (frame-parameters frame)))
(select-frame (make-frame (delq (assq 'minibuffer params) params)))
(delete-frame frame))
ad-do-it))
;; Emacs 22 用。
(defadvice select-frame-set-input-focus
(around make-new-frame-in-the-same-place (&optional frame) activate)
"Make it work for emacs-w3m."
(or frame (setq frame (selected-frame)))
(if (with-current-buffer (window-buffer (frame-first-window frame))
(eq major-mode 'w3m-mode))
(let* ((params (frame-parameters frame))
(height (assq 'height params)))
(setcdr height (- (cdr height) 3))
(select-frame (make-frame (delq (assq 'minibuffer params) params)))
(delete-frame frame))
ad-do-it))
Emacs 22 ではなぜか (make-frame '((height . N))) に対して、高さ
が N+3 のフレームを作ってしまうので、調整してあります。この件に
ついてはこちら:
http://news.gmane.org/group/gmane.emacs.pretest.bugs/thread=8074
なお、popup する emacs-w3m のフレームに複数のウィンドウがあった
場合の動作は、完全ではありません。