Mercurial > hg > xemacs-beta
diff lisp/utils/detached-minibuf.el @ 100:4be1180a9e89 r20-1b2
Import from CVS: tag r20-1b2
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:15:11 +0200 |
parents | 4103f0995bd7 |
children | 9b50b4588a93 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/utils/detached-minibuf.el Mon Aug 13 09:15:11 2007 +0200 @@ -0,0 +1,145 @@ +;;; detached-minibuf.el -- Support a detached minibuffer for XEmacs. + +;; Copyright (C) 1997 Alvin C. Shelton + +;; Author: Alvin Shelton <acs@acm.org> +;; Keywords: extensions + +;; This file is part of XEmacs. + +;; XEmacs is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your +;; option) any later version. + +;; XEmacs is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with XEmacs; if not, write to the Free Software Foundation, +;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +;;; Synched up with: not in FSF. + +;;; Commentary: + +;; WARNING. DANGER. This file reportedly crashes 19.14, use it only with a +;; recent XEmacs. + +;; Version: 1.1 + +;;; Code: + +;; +;; Variable definitions + +(defvar add-minibuf-options t + "*If nil, prevent minibuffer options from being added to the Options menu.\ +This must be set before detached-minibuf is loaded.") +(defvar minibuf-frame-height 1 + "*The height in lines of the minibuffer frame created by make-detached-minibuf") +(defvar minibuf-frame-width (frame-width (selected-frame)) + "*The width in chars of the minibuffer frame created by make-detached-minibuf") +(defvar minibuf-frame-pos-y -2 + "*The y position of the minibuffer frame as created by make-detached-minibuf") +(defvar minibuf-frame-pos-x -2 + "*The x position of the minibuffer frame as created by make-detached-minibuf") + +;; +;; Add minibuffer options to the Options menu +(if add-minibuf-options + (progn + (defun toggle-minibuf () + (interactive) + (if (equal (frame-property (selected-frame) 'minibuffer) t) + + ;; This frame already has a minibuffer, so remove the minibuffer. + ;; Unfortunately, we must delete and redraw the frame + (let ((fp (frame-properties (selected-frame))) + (buf (current-buffer)) + (orig (selected-frame))) + + ;; Create and select the new frame; + ;; we have to do this before we delete the old frame. + (setq fp (plist-remprop fp 'window-id) + fp (plist-remprop fp 'minibuffer)) + (select-frame + (make-frame (plist-put fp 'minibuffer nil))) + (switch-to-buffer buf) + + (set-frame-properties + orig (list 'minibuffer default-minibuffer-frame)) + (delete-frame orig t)) + + ;; This frame does not have a minibuffer, so add one + (set-frame-property (selected-frame) 'minibuffer t))) + + (add-menu-button '("Options" "Frame Appearance") + ["------" nil nil] + nil) + (add-menu-button '("Options" "Frame Appearance") + ["Toggle minibuffer" + (toggle-minibuf) + :style toggle + :active (not (equal (selected-frame) + default-minibuffer-frame)) + :selected (equal + (frame-property (selected-frame) 'minibuffer) + t)] + nil) + (add-menu-button '("Options" "Frame Appearance") + ["Default minibuffer here" + (setq default-minibuffer-frame (selected-frame)) + :style toggle + :active (let ((mbf (frame-property + (selected-frame) 'minibuffer))) + (or (equal mbf (selected-frame)) + (equal mbf t))) + :selected (equal (selected-frame) + default-minibuffer-frame)] + nil) + (add-menu-button '("Options" "Frame Appearance") + ["Make a detached minibuffer" + (make-detached-minibuf) + :style nil] + nil))) + +;; +;; Create a minibuffer-only frame. +;; +;; This function creates a frame named "minibuffer". +;; You will likely want this frame not to have a titlebar. +;; In order to do this for gwm, uncomment the following line +;; and add it to your .profile.gwm: +;; (set-window Emacs.minibuffer no-frame) +;; +(defun make-detached-minibuf () + "Create a standalone minibuffer" + (interactive) + (if (console-on-window-system-p) + (progn + (setq initial-frame-plist + (list 'minibuffer nil + 'width (frame-width (selected-frame)) + 'height (frame-height (selected-frame)))) + (setq default-minibuffer-frame + (make-frame + (list 'minibuffer 'only + 'width minibuf-frame-width + 'height minibuf-frame-height + 'menubar-visible-p nil + 'default-toolbar-visible-p nil + 'name "minibuffer" + 'top minibuf-frame-pos-y + 'left minibuf-frame-pos-x + 'has-modeline-p nil))) + + ;; Bogus! But it avoids annoying screen flash at startup + (if (not command-line-args-left) + (frame-notice-user-settings))))) + +(provide 'detached-minibuf) + +;;; detached-minibuf.el ends here