From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Drew Adams" Newsgroups: gmane.emacs.bugs,gmane.emacs.pretest.bugs Subject: bug#642: 23.0.60; garbled text (wrong font?) in About GNU Emacs screen Date: Sat, 2 Aug 2008 13:23:25 -0700 Message-ID: <001001c8f4dd$9e12a170$0200a8c0@us.oracle.com> Reply-To: Drew Adams , 642@emacsbugs.donarmstrong.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0011_01C8F4A2.F1B3C970" X-Trace: ger.gmane.org 1217710117 14901 80.91.229.12 (2 Aug 2008 20:48:37 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 2 Aug 2008 20:48:37 +0000 (UTC) To: Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Aug 02 22:49:27 2008 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1KPO1u-0002zv-1X for geb-bug-gnu-emacs@m.gmane.org; Sat, 02 Aug 2008 22:49:24 +0200 Original-Received: from localhost ([127.0.0.1]:44689 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KPO0x-0003jc-Eo for geb-bug-gnu-emacs@m.gmane.org; Sat, 02 Aug 2008 16:47:47 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KPO0d-0003fj-Mx for bug-gnu-emacs@gnu.org; Sat, 02 Aug 2008 16:47:27 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KPO0c-0003fP-Bn for bug-gnu-emacs@gnu.org; Sat, 02 Aug 2008 16:47:26 -0400 Original-Received: from [199.232.76.173] (port=46617 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KPO0c-0003fI-5V for bug-gnu-emacs@gnu.org; Sat, 02 Aug 2008 16:47:26 -0400 Original-Received: from rzlab.ucr.edu ([138.23.92.77]:42084) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KPO0Z-00055u-T5 for bug-gnu-emacs@gnu.org; Sat, 02 Aug 2008 16:47:25 -0400 Original-Received: from rzlab.ucr.edu (rzlab.ucr.edu [127.0.0.1]) by rzlab.ucr.edu (8.13.8/8.13.8/Debian-3) with ESMTP id m72KlLpM026732; Sat, 2 Aug 2008 13:47:22 -0700 Original-Received: (from debbugs@localhost) by rzlab.ucr.edu (8.13.8/8.13.8/Submit) id m72KZ4Li022749; Sat, 2 Aug 2008 13:35:04 -0700 X-Loop: don@donarmstrong.com Resent-From: "Drew Adams" Resent-To: bug-submit-list@donarmstrong.com Resent-CC: Emacs Bugs Resent-Date: Sat, 02 Aug 2008 20:35:03 +0000 Resent-Message-ID: Resent-Sender: don@donarmstrong.com X-Emacs-PR-Message: report 642 X-Emacs-PR-Package: emacs X-Emacs-PR-Keywords: Original-Received: via spool by submit@emacsbugs.donarmstrong.com id=B.121770878221011 (code B ref -1); Sat, 02 Aug 2008 20:35:03 +0000 Original-Received: (at submit) by emacsbugs.donarmstrong.com; 2 Aug 2008 20:26:22 +0000 Original-Received: from fencepost.gnu.org (fencepost.gnu.org [140.186.70.10]) by rzlab.ucr.edu (8.13.8/8.13.8/Debian-3) with ESMTP id m72KQGH1020973 for ; Sat, 2 Aug 2008 13:26:17 -0700 Original-Received: from mail.gnu.org ([199.232.76.166]:41469 helo=mx10.gnu.org) by fencepost.gnu.org with esmtp (Exim 4.67) (envelope-from ) id 1KPNfB-00085W-DK for emacs-pretest-bug@gnu.org; Sat, 02 Aug 2008 16:25:18 -0400 Original-Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1KPNfy-0002pq-Mx for emacs-pretest-bug@gnu.org; Sat, 02 Aug 2008 16:26:14 -0400 Original-Received: from rgminet01.oracle.com ([148.87.113.118]:35829) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KPNfw-0002om-Q4 for emacs-pretest-bug@gnu.org; Sat, 02 Aug 2008 16:26:06 -0400 Original-Received: from agmgw2.us.oracle.com (agmgw2.us.oracle.com [152.68.180.213]) by rgminet01.oracle.com (Switch-3.2.4/Switch-3.1.6) with ESMTP id m72KPqMC015764 for ; Sat, 2 Aug 2008 14:25:52 -0600 Original-Received: from acsmt357.oracle.com (acsmt357.oracle.com [141.146.40.157]) by agmgw2.us.oracle.com (Switch-3.2.0/Switch-3.2.0) with ESMTP id m72I51EQ031086 for ; Sat, 2 Aug 2008 14:25:51 -0600 Original-Received: from inet-141-146-46-1.oracle.com by acsmt353.oracle.com with ESMTP id 11198767291217708591; Sat, 02 Aug 2008 13:23:11 -0700 Original-Received: from dradamslap1 (/69.181.100.12) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sat, 02 Aug 2008 13:23:08 -0700 X-Mailer: Microsoft Office Outlook 11 Thread-Index: Acj03Z21aAQ7E2/PQUK6d1zqYtwkEQ== X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 X-Brightmail-Tracker: AAAAAQAAAAI= X-Brightmail-Tracker: AAAAAQAAAAI= X-Whitelist: TRUE X-Whitelist: TRUE X-detected-kernel: by monty-python.gnu.org: Linux 2.4-2.6 X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 3) Resent-Date: Sat, 02 Aug 2008 16:47:26 -0400 X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:18978 gmane.emacs.pretest.bugs:22786 Archived-At: This is a multi-part message in MIME format. ------=_NextPart_000_0011_01C8F4A2.F1B3C970 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit emacs -Q --debug-init -l ".../path/to/hexrgb.el" -l ".../path/to/oneonone.el" -f "1on1-emacs" See attached files hexrgb.el and oneonone.el, and screenshot. This is a regression wrt a build of 2008-07-26, where there was no such problem. In GNU Emacs 23.0.60.1 (i386-mingw-nt5.1.2600) of 2008-08-01 on LENNART-69DE564 Windowing system distributor `Microsoft Corp.', version 5.1.2600 configured using `configure --with-gcc (3.4) --no-opt --cflags -Ic:/g/include -fno-crossjumping' Important settings: value of $LC_ALL: nil value of $LC_COLLATE: nil value of $LC_CTYPE: nil value of $LC_MESSAGES: nil value of $LC_MONETARY: nil value of $LC_NUMERIC: nil value of $LC_TIME: nil value of $LANG: ENU value of $XMODIFIERS: nil locale-coding-system: cp1252 default-enable-multibyte-characters: t ------=_NextPart_000_0011_01C8F4A2.F1B3C970 Content-Type: application/octet-stream; name="hexrgb.el" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="hexrgb.el" ;;; hexrgb.el --- Functions to manipulate colors, including RGB hex = strings.=0A= ;;=0A= ;; Filename: hexrgb.el=0A= ;; Description: Functions to manipulate colors, including RGB hex = strings.=0A= ;; Author: Drew Adams=0A= ;; Maintainer: Drew Adams=0A= ;; Copyright (C) 2004-2008, Drew Adams, all rights reserved.=0A= ;; Created: Mon Sep 20 22:58:45 2004=0A= ;; Version: 21.0=0A= ;; Last-Updated: Tue Jan 01 13:37:31 2008 (-28800 Pacific Standard Time)=0A= ;; By: dradams=0A= ;; Update #: 540=0A= ;; URL: http://www.emacswiki.org/cgi-bin/wiki/hexrgb.el=0A= ;; Keywords: number, hex, rgb, color, background, frames, display=0A= ;; Compatibility: GNU Emacs 20.x, GNU Emacs 21.x, GNU Emacs 22.x=0A= ;;=0A= ;; Features that might be required by this library:=0A= ;;=0A= ;; None=0A= ;;=0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= ;;=0A= ;;; Commentary:=0A= ;;=0A= ;; Functions to manipulate colors, including RGB hex strings.=0A= ;;=0A= ;; This library provides functions for converting between RGB (red,=0A= ;; green, blue) color components and HSV (hue, saturation, value)=0A= ;; color components. It helps you convert among Emacs color values=0A= ;; (whole numbers from 0 through 65535), RGB and HSV floating-point=0A= ;; components (0.0 through 1.0), Emacs color-name strings (such as=0A= ;; "blue"), and hex RGB color strings (such as "#FC43A7912").=0A= ;;=0A= ;; An RGB hex string, such as used as a frame `background-color'=0A= ;; property, is a string of 1 + (3 * n) characters, the first of=0A= ;; which is "#". The other characters are hexadecimal digits, in=0A= ;; three groups representing (from the left): red, green, and blue=0A= ;; hex codes.=0A= ;;=0A= ;; Constants defined here:=0A= ;;=0A= ;; `hexrgb-defined-colors', `hexrgb-defined-colors-alist'.=0A= ;;=0A= ;; Commands defined here:=0A= ;;=0A= ;; `hexrgb-blue', `hexrgb-complement', `hexrgb-green',=0A= ;; `hexrgb-hue', `hexrgb-read-color', `hexrgb-red',=0A= ;; `hexrgb-saturation', `hexrgb-value'.=0A= ;;=0A= ;; Non-interactive functions defined here:=0A= ;;=0A= ;; `hexrgb-approx-equal', `hexrgb-color-name-to-hex',=0A= ;; `hexrgb-color-values-to-hex', `hexrgb-color-value-to-float',=0A= ;; `hexrgb-float-to-color-value', `hexrgb-hex-char-to-integer',=0A= ;; `hexrgb-hex-to-color-values', `hexrgb-hex-to-hsv',=0A= ;; `hexrgb-hex-to-rgb', `hexrgb-hsv-to-hex', `hexrgb-hex-to-int',=0A= ;; `hexrgb-hsv-to-rgb', `hexrgb-increment-blue',=0A= ;; `hexrgb-increment-equal-rgb', `hexrgb-increment-green',=0A= ;; `hexrgb-increment-hex', `hexrgb-increment-red',=0A= ;; `hexrgb-int-to-hex', `hexrgb-rgb-hex-string-p',=0A= ;; `hexrgb-rgb-to-hex', `hexrgb-rgb-to-hsv'.=0A= ;;=0A= ;;=0A= ;; Add this to your initialization file (~/.emacs or ~/_emacs):=0A= ;;=0A= ;; (require 'hexrgb)=0A= ;;=0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= ;;=0A= ;;; Change log:=0A= ;;=0A= ;; 2007/12/30 dadams=0A= ;; Added: hexrgb-hex-to-color-values.=0A= ;; 2007/10/20 dadams=0A= ;; hexrgb-read-color: Treat pseudo colors too (e.g. *point = foreground*).=0A= ;; 2007/01/21 dadams=0A= ;; hexrgb-read-color: Error if empty string (and not = allow-empty-name-p).=0A= ;; 2006/06/06 dadams=0A= ;; Added: hexrgb-defined-colors(-alist). Use instead of = (x-defined-colors).=0A= ;; hexrgb-(red|green|blue): Added interactive specs.=0A= ;; 2006/06/04 dadams=0A= ;; hexrgb-read-color: Added optional arg allow-empty-name-p.=0A= ;; 2006/06/02 dadams=0A= ;; Added: hexrgb-rgb-hex-string-p. Used it.=0A= ;; 2006/05/30 dadams=0A= ;; Added: hexrgb-hex-to-(hsv|rgb), hexrgb-hsv-to-hex, = hexrgb-color-name-to-hex,=0A= ;; hexrgb-complement, hexrgb-read-color, hexrgb-hue, = hexrgb-saturation,=0A= ;; hexrgb-value, hexrgb-red, hexrgb-blue, hexrgb-green.=0A= ;; approx-equal: Add optional fuzz factor arguments. Changed the = algorithm.=0A= ;; Renamed: approx-equal to hexrgb-approx-equal.=0A= ;; hexrgb-rgb-to-hsv: Changed test from < to <=3D: (when (<=3D hue = 0.0)...).=0A= ;; hexrgb-hsv-to-rgb: Treat hue =3D 0.0 (int 0) the same as hue =3D = 1.0 (int 6).=0A= ;; hexrgb-rgb-to-hex, hexrgb-increment-hex: Corrected doc strings.=0A= ;; 2006/05/22 dadams=0A= ;; Added: hexrgb-hsv-to-hex, hexrgb-rgb-to-hex. Require cl.el when = byte-compile.=0A= ;; 2005/08/09 dadams=0A= ;; hexrgb-rgb-to-hsv: Side-stepped Emacs-20 bug in comparing NaN.=0A= ;; hexrgb-increment-*: Added optional arg wrap-p.=0A= ;; hexrgb-increment-hex: Prevent wrap if not wrap-p.=0A= ;; 2005/08/02 dadams=0A= ;; hexrgb-rgb-to-hes: Bug fix: If delta is zero, then so are hue and = saturation.=0A= ;; 2005/06/24 dadams=0A= ;; hexrgb-rgb-to-hsv: Bug fix: test for NaN (e.g. on divide by zero).=0A= ;; 2005/02/08 dadams=0A= ;; hexrgb-hsv-to-rgb: Bug fix (typo: p, q -> pp, qq; added ww).=0A= ;; 2005/01/09 dadams=0A= ;; hexrgb-int-to-hex: Fixed bug in hexrgb-int-to-hex: nb-digits not = respected.=0A= ;; Added: hexrgb-hsv-to-rgb, hexrgb-rgb-to-hsv, approx-equal.=0A= ;; Renamed old hexrgb-increment-value to hexrgb-increment-equal-rgb.=0A= ;; 2005/01/05 dadams=0A= ;; hexrgb-int-to-hex: Used a suggestion from Juri Linkov.=0A= ;;=0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= ;;=0A= ;; This program is free software; you can redistribute it and/or modify=0A= ;; it under the terms of the GNU General Public License as published by=0A= ;; the Free Software Foundation; either version 2, or (at your option)=0A= ;; any later version.=0A= =0A= ;; This program is distributed in the hope that it will be useful,=0A= ;; but WITHOUT ANY WARRANTY; without even the implied warranty of=0A= ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the=0A= ;; GNU General Public License for more details.=0A= =0A= ;; You should have received a copy of the GNU General Public License=0A= ;; along with this program; see the file COPYING. If not, write to=0A= ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth=0A= ;; Floor, Boston, MA 02110-1301, USA.=0A= ;;=0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= ;;=0A= ;;; Code:=0A= =0A= (eval-when-compile (require 'cl)) ;; case; plus, for Emacs < 20: when, = unless=0A= =0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= =0A= =0A= ;; Not used here, but put here to be available to libraries that use = `hexrgb.el'.=0A= ;;;###autoload=0A= (defconst hexrgb-defined-colors (eval-when-compile (x-defined-colors))=0A= "List of all supported colors.")=0A= =0A= ;;;###autoload=0A= (defconst hexrgb-defined-colors-alist (eval-when-compile (mapcar #'list = (x-defined-colors)))=0A= "Alist of all supported colors, for use in completion.")=0A= =0A= ;;;###autoload=0A= (defun hexrgb-read-color (&optional convert-to-RGB-p allow-empty-name-p = prompt)=0A= "Read a color name or RGB hex value: #RRRRGGGGBBBB.=0A= Completion is available for color names, but not for RGB hex strings.=0A= If you input an RGB hex string, it must have the form #XXXXXXXXXXXX or=0A= XXXXXXXXXXXX, where each X is a hex digit. The number of Xs must be a=0A= multiple of 3, with the same number of Xs for each of red, green, and=0A= blue. The order is red, green, blue.=0A= =0A= In addition to standard color names and RGB hex values, the following=0A= are available as color candidates. In each case, the corresponding=0A= color is used.=0A= =0A= * `*copied foreground*' - last copied foreground, if available=0A= * `*copied background*' - last copied background, if available=0A= * `*mouse-2 foreground*' - foreground where you click `mouse-2'=0A= * `*mouse-2 background*' - background where you click `mouse-2'=0A= * `*point foreground*' - foreground under the cursor=0A= * `*point background*' - background under the cursor=0A= =0A= \(You can copy a color using eyedropper commands such as=0A= `eyedrop-pick-foreground-at-mouse'.)=0A= =0A= Checks input to be sure it represents a valid color. If not, raises=0A= an error (but see exception for empty input with non-nil=0A= ALLOW-EMPTY-NAME-P).=0A= =0A= Interactively, or with optional arg CONVERT-TO-RGB-P non-nil, converts=0A= an input color name to an RGB hex string. Returns the RGB hex string.=0A= =0A= Optional arg ALLOW-EMPTY-NAME-P controls what happens if you enter an=0A= empty color name (that is, you just hit `RET'). If non-nil, then=0A= `hexrgb-read-color' returns an empty color name, \"\". If nil, then=0A= it raises an error. Programs must test for \"\" if ALLOW-EMPTY-NAME-P=0A= is non-nil. They can then perform an appropriate action in case of=0A= empty input.=0A= =0A= Optional arg PROMPT is the prompt. Nil means use a default prompt."=0A= (interactive "p") ; Always convert to RGB = interactively.=0A= (let* ((completion-ignore-case t)=0A= (colors (if (fboundp 'eyedrop-foreground-at-point)=0A= (append (and eyedrop-picked-foreground '(("*copied = foreground*")))=0A= (and eyedrop-picked-background '(("*copied = background*")))=0A= '(("*mouse-2 foreground*") ("*mouse-2 = background*")=0A= ("*point foreground*") ("*point = background*"))=0A= hexrgb-defined-colors-alist)=0A= hexrgb-defined-colors-alist))=0A= (color (completing-read (or prompt "Color (name or #R+G+B+): ") = colors))=0A= hex-string)=0A= (when (fboundp 'eyedrop-foreground-at-point)=0A= (cond ((string=3D "*copied foreground*" color) (setq color = eyedrop-picked-foreground))=0A= ((string=3D "*copied background*" color) (setq color = eyedrop-picked-background))=0A= ((string=3D "*point foreground*" color) (setq color = (eyedrop-foreground-at-point)))=0A= ((string=3D "*point background*" color) (setq color = (eyedrop-background-at-point)))=0A= ((string=3D "*mouse-2 foreground*" color)=0A= (setq color (prog1 (eyedrop-foreground-at-mouse=0A= (read-event "Click `mouse-2' to choose = foreground color - "))=0A= (read-event)))) ; Discard mouse up event.=0A= ((string=3D "*mouse-2 background*" color)=0A= (setq color (prog1 (eyedrop-background-at-mouse=0A= (read-event "Click `mouse-2' to choose = background color - "))=0A= (read-event)))))) ; Discard mouse up event.=0A= (setq hex-string (or (string-match = "^#\\([a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$" color)=0A= (and (string-match = "^\\([a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$" color)=0A= t)))=0A= (if (and allow-empty-name-p (string=3D "" color))=0A= ""=0A= (when (and hex-string (not (eq 0 hex-string)))=0A= (setq color (concat "#" color))) ; No #; add it.=0A= (unless hex-string=0A= (when (or (string=3D "" color)=0A= (not (if (fboundp 'test-completion) ; Not defined in = Emacs 20.=0A= (test-completion color colors)=0A= (try-completion color colors))))=0A= (error "No such color: %S" color))=0A= (when convert-to-RGB-p (setq color (hexrgb-color-name-to-hex = color))))=0A= (when (interactive-p) (message "Color: `%s'" color))=0A= color)))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-rgb-hex-string-p (color &optional laxp)=0A= "Non-nil if COLOR is an RGB string #XXXXXXXXXXXX.=0A= Each X is a hex digit. The number of Xs must be a multiple of 3, with=0A= the same number of Xs for each of red, green, and blue.=0A= =0A= Non-nil optional arg LAXP means that the initial `#' is optional. In=0A= that case, for a valid string of hex digits: when # is present 0 is=0A= returned; otherwise, t is returned."=0A= (or (string-match "^#\\([a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$" color)=0A= (and laxp (string-match = "^\\([a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$" color) t)))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-complement (color)=0A= "Return the color that is the complement of COLOR."=0A= (interactive (list (hexrgb-read-color)))=0A= (setq color (hexrgb-color-name-to-hex color))=0A= (let ((red (hexrgb-red color))=0A= (green (hexrgb-green color))=0A= (blue (hexrgb-blue color)))=0A= (setq color (hexrgb-rgb-to-hex (- 1.0 red) (- 1.0 green) (- 1.0 = blue))))=0A= (when (interactive-p) (message "Complement: `%s'" color))=0A= color)=0A= =0A= ;;;###autoload=0A= (defun hexrgb-hue (color)=0A= "Return the hue component of COLOR, in range 0 to 1 inclusive.=0A= COLOR is a color name or hex RGB string that starts with \"#\"."=0A= (interactive (list (hexrgb-read-color)))=0A= (setq color (hexrgb-color-name-to-hex color))=0A= (car (hexrgb-rgb-to-hsv (hexrgb-red color) (hexrgb-green color) = (hexrgb-blue color))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-saturation (color)=0A= "Return the saturation component of COLOR, in range 0 to 1 inclusive.=0A= COLOR is a color name or hex RGB string that starts with \"#\"."=0A= (interactive (list (hexrgb-read-color)))=0A= (setq color (hexrgb-color-name-to-hex color))=0A= (cadr (hexrgb-rgb-to-hsv (hexrgb-red color) (hexrgb-green color) = (hexrgb-blue color))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-value (color)=0A= "Return the value component of COLOR, in range 0 to 1 inclusive.=0A= COLOR is a color name or hex RGB string that starts with \"#\"."=0A= (interactive (list (hexrgb-read-color)))=0A= (setq color (hexrgb-color-name-to-hex color))=0A= (caddr (hexrgb-rgb-to-hsv (hexrgb-red color) (hexrgb-green color) = (hexrgb-blue color))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-red (color)=0A= "Return the red component of COLOR, in range 0 to 1 inclusive.=0A= COLOR is a color name or hex RGB string that starts with \"#\"."=0A= (interactive (list (hexrgb-read-color)))=0A= (setq color (hexrgb-color-name-to-hex color))=0A= (/ (hexrgb-hex-to-int (substring color 1 (1+ (/ (1- (length color)) = 3))))=0A= (expt 16.0 (/ (1- (length color)) 3.0))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-green (color)=0A= "Return the green component of COLOR, in range 0 to 1 inclusive.=0A= COLOR is a color name or hex RGB string that starts with \"#\"."=0A= (interactive (list (hexrgb-read-color)))=0A= (setq color (hexrgb-color-name-to-hex color))=0A= (let* ((len (/ (1- (length color)) 3))=0A= (start (1+ len)))=0A= (/ (hexrgb-hex-to-int (substring color start (+ start len)))=0A= (expt 16.0 (/ (1- (length color)) 3.0)))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-blue (color)=0A= "Return the blue component of COLOR, in range 0 to 1 inclusive.=0A= COLOR is a color name or hex RGB string that starts with \"#\"."=0A= (interactive (list (hexrgb-read-color)))=0A= (setq color (hexrgb-color-name-to-hex color))=0A= (let* ((len (/ (1- (length color)) 3))=0A= (start (+ 1 len len)))=0A= (/ (hexrgb-hex-to-int (substring color start (+ start len)))=0A= (expt 16.0 (/ (1- (length color)) 3.0)))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-rgb-to-hsv (red green blue)=0A= "Convert RED, GREEN, BLUE components to HSV (hue, saturation, value).=0A= Each input component is 0.0 to 1.0, inclusive.=0A= Returns a list of HSV components of value 0.0 to 1.0, inclusive."=0A= (let* ((min (min red green blue))=0A= (max (max red green blue))=0A= (value max)=0A= (delta (- max min))=0A= hue saturation)=0A= (if (hexrgb-approx-equal 0.0 delta)=0A= (setq hue 0.0 saturation 0.0) ; Gray scale - no color; only = value.=0A= (if (and (condition-case nil=0A= (setq saturation (/ delta max))=0A= (arith-error nil))=0A= (or (< emacs-major-version 21) ; Emacs 20 bug makes next = test fail falsely.=0A= (not (equal 0.0e+NaN saturation)))) ; Must be a = number, not NaN.=0A= (if (hexrgb-approx-equal 0.0 saturation)=0A= (setq hue 0.0 saturation 0.0) ; Again, no color; only = value.=0A= ;; Color=0A= (if (hexrgb-approx-equal red max)=0A= (setq hue (/ (- green blue) delta)) ; Between yellow & = magenta.=0A= (if (hexrgb-approx-equal green max)=0A= (setq hue (+ 2.0 (/ (- blue red) delta))) ; Between = cyan & yellow.=0A= (setq hue (+ 4.0 (/ (- red green) delta))))) ; Between = magenta & cyan.=0A= (setq hue (/ hue 6.0))=0A= (when (<=3D hue 0.0)(setq hue (+ hue 1.0))))=0A= (setq saturation 0.0 hue 0.0))) ; Div by zero (max=3D0): H:=3D0, = S:=3D0. (Hue undefined.)=0A= (list hue saturation value)))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-hsv-to-rgb (hue saturation value)=0A= "Convert HUE, SATURATION, VALUE components to RGB (red, green, blue).=0A= Each input component is 0.0 to 1.0, inclusive.=0A= Returns a list of RGB components of value 0.0 to 1.0, inclusive."=0A= (let (red green blue int-hue fract pp qq tt ww)=0A= (if (hexrgb-approx-equal 0.0 saturation)=0A= (setq red value green value blue value) ; Gray=0A= (setq hue (* hue 6.0) ; Sectors: 0 to 5=0A= int-hue (floor hue)=0A= fract (- hue int-hue)=0A= pp (* value (- 1 saturation))=0A= qq (* value (- 1 (* saturation fract)))=0A= ww (* value (- 1 (* saturation (- 1 (- hue int-hue))))))=0A= (case int-hue=0A= ((0 6) (setq red value green ww blue pp))=0A= (1 (setq red qq green value blue pp))=0A= (2 (setq red pp green value blue ww))=0A= (3 (setq red pp green qq blue value))=0A= (4 (setq red ww green pp blue value))=0A= (otherwise (setq red value green pp blue qq))))=0A= (list red green blue)))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-hsv-to-hex (hue saturation value)=0A= "Return the hex RBG color string for inputs HUE, SATURATION, VALUE.=0A= The inputs are each in the range 0 to 1.=0A= The output string is of the form \"#RRRRGGGGBBBB\"."=0A= (hexrgb-color-values-to-hex=0A= (mapcar (lambda (x) (floor (* x 65535.0))) (hexrgb-hsv-to-rgb hue = saturation value))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-rgb-to-hex (red green blue)=0A= "Return the hex RBG color string for inputs RED, GREEN, BLUE.=0A= The inputs are each in the range 0 to 1.=0A= The output string is of the form \"#RRRRGGGGBBBB\"."=0A= (hexrgb-color-values-to-hex=0A= (mapcar (lambda (x) (floor (* x 65535.0))) (list red green blue))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-hex-to-hsv (color)=0A= "Return a list of HSV (hue, saturation, value) color components.=0A= Each component is a value from 0.0 to 1.0, inclusive.=0A= COLOR is a color name or a hex RGB string that starts with \"#\" and=0A= is followed by an equal number of hex digits for red, green, and blue=0A= components."=0A= (let ((rgb-components (hexrgb-hex-to-rgb color)))=0A= (apply #'hexrgb-rgb-to-hsv rgb-components)))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-hex-to-rgb (color)=0A= "Return a list of RGB (red, green, blue) color components.=0A= Each component is a value from 0.0 to 1.0, inclusive.=0A= COLOR is a color name or a hex RGB string that starts with \"#\" and=0A= is followed by an equal number of hex digits for red, green, and blue=0A= components."=0A= (unless (hexrgb-rgb-hex-string-p color) (setq color = (hexrgb-color-name-to-hex color)))=0A= (let ((len (/ (1- (length color)) 3)))=0A= (list (/ (hexrgb-hex-to-int (substring color 1 (1+ len))) 65535.0)=0A= (/ (hexrgb-hex-to-int (substring color (1+ len) (+ 1 len = len))) 65535.0)=0A= (/ (hexrgb-hex-to-int (substring color (+ 1 len len))) = 65535.0))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-color-name-to-hex (color)=0A= "Return the RGB hex string for the COLOR name, starting with \"#\".=0A= If COLOR is already a string starting with \"#\", then just return it."=0A= (let ((components (x-color-values color)))=0A= (unless components (error "No such color: %S" color))=0A= (unless (hexrgb-rgb-hex-string-p color)=0A= (setq color (hexrgb-color-values-to-hex components))))=0A= color)=0A= =0A= ;; Just hard-code 4 as the number of hex digits, since `x-color-values'=0A= ;; seems to produce appropriate integer values for this value.=0A= ;;=0A= ;; Color "components" would be better in the name than color "value"=0A= ;; but this name follows the Emacs tradition (e.g. `x-color-values',=0A= ;; 'ps-color-values', `ps-e-x-color-values').=0A= ;;;###autoload=0A= (defun hexrgb-color-values-to-hex (values)=0A= "Convert list of rgb color VALUES to a hex string, #XXXXXXXXXXXX.=0A= Each X in the string is a hexadecimal digit.=0A= Input VALUES is as for the output of `x-color-values'."=0A= (concat "#"=0A= (hexrgb-int-to-hex (nth 0 values) 4) ; red=0A= (hexrgb-int-to-hex (nth 1 values) 4) ; green=0A= (hexrgb-int-to-hex (nth 2 values) 4))) ; blue=0A= =0A= ;;;###autoload=0A= (defun hexrgb-hex-to-color-values (color)=0A= "Convert hex COLOR to a list of rgb color values.=0A= COLOR is a hex rgb color string, #XXXXXXXXXXXX=0A= Each X in the string is a hexadecimal digit. There are 3N X's, N > 0.=0A= The output list is as for `x-color-values'."=0A= (let* ((hex-strgp (string-match=0A= = "^\\(#\\)?\\(\\([a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+\\)$"=0A= color))=0A= (ndigits (/ (if (eq (match-beginning 1) (match-end 1))=0A= (length color)=0A= (1- (length color)))=0A= 3))=0A= red green blue)=0A= (unless hex-strgp (error "Invalid RGB color string: %s" color))=0A= (setq color (substring color (match-beginning 2) (match-end 2))=0A= red (hexrgb-hex-to-int (substring color 0 ndigits))=0A= green (hexrgb-hex-to-int (substring color ndigits (* 2 = ndigits)))=0A= blue (hexrgb-hex-to-int (substring color ndigits (* 3 = ndigits))))=0A= (list red green blue)))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-increment-red (hex nb-digits increment &optional wrap-p)=0A= "Increment red value of rgb string HEX by INCREMENT.=0A= String HEX starts with \"#\". Each color is NB-DIGITS hex digits long.=0A= If optional arg WRAP-P is non-nil, then the result wraps around zero.=0A= For example, incrementing \"#FFFFFFFFF\" by 1 will cause it to wrap=0A= around to \"#000000000\"."=0A= (concat "#"=0A= (hexrgb-increment-hex (substring hex 1 (1+ nb-digits)) = increment nb-digits wrap-p)=0A= (substring hex (1+ nb-digits) (1+ (* nb-digits 2)))=0A= (substring hex (1+ (* nb-digits 2)))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-increment-green (hex nb-digits increment &optional wrap-p)=0A= "Increment green value of rgb string HEX by INCREMENT.=0A= String HEX starts with \"#\". Each color is NB-DIGITS hex digits long.=0A= For example, incrementing \"#FFFFFFFFF\" by 1 will cause it to wrap=0A= around to \"#000000000\"."=0A= (concat=0A= "#" (substring hex 1 (1+ nb-digits))=0A= (hexrgb-increment-hex (substring hex (1+ nb-digits) (1+ (* nb-digits = 2)))=0A= increment=0A= nb-digits=0A= wrap-p)=0A= (substring hex (1+ (* nb-digits 2)))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-increment-blue (hex nb-digits increment &optional wrap-p)=0A= "Increment blue value of rgb string HEX by INCREMENT.=0A= String HEX starts with \"#\". Each color is NB-DIGITS hex digits long.=0A= For example, incrementing \"#FFFFFFFFF\" by 1 will cause it to wrap=0A= around to \"#000000000\"."=0A= (concat "#" (substring hex 1 (1+ (* nb-digits 2)))=0A= (hexrgb-increment-hex (substring hex (1+ (* nb-digits 2)))=0A= increment=0A= nb-digits=0A= wrap-p)))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-increment-equal-rgb (hex nb-digits increment &optional = wrap-p)=0A= "Increment each color value (r,g,b) of rgb string HEX by INCREMENT.=0A= String HEX starts with \"#\". Each color is NB-DIGITS hex digits long.=0A= For example, incrementing \"#FFFFFFFFF\" by 1 will cause it to wrap=0A= around to \"#000000000\"."=0A= (concat=0A= "#" (hexrgb-increment-hex (substring hex 1 (1+ nb-digits)) increment = nb-digits wrap-p)=0A= (hexrgb-increment-hex (substring hex (1+ nb-digits) (1+ (* nb-digits = 2)))=0A= increment=0A= nb-digits=0A= wrap-p)=0A= (hexrgb-increment-hex (substring hex (1+ (* nb-digits 2))) increment = nb-digits wrap-p)))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-increment-hex (hex increment nb-digits &optional wrap-p)=0A= "Increment HEX number (a string NB-DIGITS long) by INCREMENT.=0A= For example, incrementing \"FFFFFFFFF\" by 1 will cause it to wrap=0A= around to \"000000000\"."=0A= (let* ((int (hexrgb-hex-to-int hex))=0A= (new-int (+ increment int)))=0A= (if (or wrap-p=0A= (and (>=3D int 0) ; Not too large for the = machine.=0A= (>=3D new-int 0) ; For the case where increment = < 0.=0A= (<=3D (length (format (concat "%X") new-int)) = nb-digits))) ; Not too long.=0A= (hexrgb-int-to-hex new-int nb-digits) ; Use incremented number.=0A= hex))) ; Don't increment.=0A= =0A= ;;;###autoload=0A= (defun hexrgb-hex-to-int (hex)=0A= "Convert HEX string argument to an integer.=0A= The characters of HEX must be hex characters."=0A= (let* ((factor 1)=0A= (len (length hex))=0A= (indx (1- len))=0A= (int 0))=0A= (while (>=3D indx 0)=0A= (setq int (+ int (* factor (hexrgb-hex-char-to-integer (aref hex = indx)))))=0A= (setq indx (1- indx))=0A= (setq factor (* 16 factor)))=0A= int))=0A= =0A= ;; From `hexl.el'. This is the same as `hexl-hex-char-to-integer' = defined there.=0A= ;;;###autoload=0A= (defun hexrgb-hex-char-to-integer (character)=0A= "Take a CHARACTER and return its value as if it were a hex digit."=0A= (if (and (>=3D character ?0) (<=3D character ?9))=0A= (- character ?0)=0A= (let ((ch (logior character 32)))=0A= (if (and (>=3D ch ?a) (<=3D ch ?f))=0A= (- ch (- ?a 10))=0A= (error "Invalid hex digit `%c'" ch)))))=0A= =0A= ;; Originally, I used the code from `int-to-hex-string' in `float.el'.=0A= ;; This version is thanks to Juri Linkov .=0A= ;;=0A= ;;;###autoload=0A= (defun hexrgb-int-to-hex (int &optional nb-digits)=0A= "Convert integer argument INT to a #XXXXXXXXXXXX format hex string.=0A= Each X in the output string is a hexadecimal digit.=0A= NB-DIGITS is the number of hex digits. If INT is too large to be=0A= represented with NB-DIGITS, then the result is truncated from the=0A= left. So, for example, INT=3D256 and NB-DIGITS=3D2 returns \"00\", since=0A= the hex equivalent of 256 decimal is 100, which is more than 2 digits."=0A= (setq nb-digits (or nb-digits 4))=0A= (substring (format (concat "%0" (int-to-string nb-digits) "X") int) (- = nb-digits)))=0A= =0A= ;; Inspired by Elisp Info manual, node "Comparison of Numbers".=0A= ;;;###autoload=0A= (defun hexrgb-approx-equal (x y &optional rfuzz afuzz)=0A= "Return non-nil if numbers X and Y are approximately equal.=0A= RFUZZ is a relative fuzz factor. AFUZZ is an absolute fuzz factor.=0A= RFUZZ defaults to 1.0e-8. AFUZZ defaults to (/ RFUZZ 10).=0A= The algorithm is:=0A= (< (abs (- X Y)) (+ AFUZZ (* RFUZZ (+ (abs X) (abs Y)))))."=0A= (setq rfuzz (or rfuzz 1.0e-8) afuzz (or afuzz (/ rfuzz 10)))=0A= (< (abs (- x y)) (+ afuzz (* rfuzz (+ (abs x) (abs y))))))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-color-value-to-float (n)=0A= "Return the floating-point equivalent of color value N.=0A= N must be an integer between 0 and 65535, or else an error is raised."=0A= (unless (and (wholenump n) (<=3D n 65535))=0A= (error "Not a whole number less than 65536"))=0A= (/ (float n) 65535.0))=0A= =0A= ;;;###autoload=0A= (defun hexrgb-float-to-color-value (x)=0A= "Return the color value equivalent of floating-point number X.=0A= X must be between 0.0 and 1.0, or else an error is raised."=0A= (unless (and (numberp x) (<=3D 0.0 x) (<=3D x 1.0))=0A= (error "Not a floating-point number between 0.0 and 1.0"))=0A= (floor (* x 65535.0)))=0A= =0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= =0A= (provide 'hexrgb)=0A= =0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= ;;; hexrgb.el ends here=0A= ------=_NextPart_000_0011_01C8F4A2.F1B3C970 Content-Type: application/octet-stream; name="oneonone.el" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="oneonone.el" ;;; oneonone.el --- Frame configuration that uses one frame per window.=0A= ;;=0A= ;; Filename: oneonone.el=0A= ;; Description: Frame configuration that uses one frame per window.=0A= ;; Author: Drew Adams=0A= ;; Maintainer: Drew Adams=0A= ;; Copyright (C) 1999-2008, Drew Adams, all rights reserved.=0A= ;; Created: Fri Apr 2 12:34:20 1999=0A= ;; Version: 21.1=0A= ;; Last-Updated: Tue Feb 12 07:08:17 2008 (Pacific Standard Time)=0A= ;; By: dradams=0A= ;; Update #: 2344=0A= ;; URL: http://www.emacswiki.org/cgi-bin/wiki/oneonone.el=0A= ;; Keywords: local, frames=0A= ;; Compatibility: GNU Emacs 20.x, GNU Emacs 21.x, GNU Emacs 22.x=0A= ;;=0A= ;; Features that might be required by this library:=0A= ;;=0A= ;; `avoid', `cl', `files+', `frame-cmds', `frame-fns', `hexrgb',=0A= ;; `misc-fns', `oneonone', `strings', `thingatpt', `thingatpt+',=0A= ;; `zoom-frm'.=0A= ;;=0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= ;;=0A= ;;; Commentary:=0A= ;;=0A= ;; Frame configuration that uses one frame per window.=0A= ;;=0A= ;; This library is part of One-on-One Emacs, a collection of=0A= ;; libraries that try to make Emacs more frame-oriented and less=0A= ;; window-oriented.=0A= ;;=0A= ;; This library sets up Emacs to use multiple frames: individual=0A= ;; frames are used, by default, instead of Emacs windows. That is,=0A= ;; the default is to use a frame for each Emacs window: one window on=0A= ;; one frame.=0A= ;;=0A= ;; You can configure each of the frames defined here.=0A= ;;=0A= ;; Default properties are defined here for normal frames and=0A= ;; "special" frames, which show "special-display buffers" (see Emacs=0A= ;; manual for info on such frames).=0A= ;;=0A= ;; In addition, these user options control the creation of three=0A= ;; separate, specialized frames:=0A= ;;=0A= ;; - `1on1-*Help*-frame-flag' - *Help* buffer frame=0A= ;; - `1on1-*Completions*-frame-flag' - *Completions* buffer frame=0A= ;; - `1on1-minibuffer-frame-flag' - minibuffer frame=0A= ;;=0A= ;; Buffers *Help* and *Completions* are always displayed in their own=0A= ;; frames. In addition, if `1on1-*Help*-frame-flag' or=0A= ;; `1on1-*Completions*-frame-flag' is non-nil, then the *Help* or=0A= ;; *Completions* frame has a special (customizable) appearance.=0A= ;;=0A= ;; If `1on1-minibuffer-frame-flag' is non-nil (the default value),=0A= ;; then the minibuffer is shown in its own frame,=0A= ;; `1on1-minibuffer-frame'; this is the only frame to have a=0A= ;; minibuffer. If you customize `1on1-minibuffer-frame-flag' to nil,=0A= ;; then each frame will have its own minibuffer, as usual, and there=0A= ;; will be no standalone minibuffer frame.=0A= ;; =0A= ;; By default, if you use a standalone minibuffer frame, it is=0A= ;; automatically sized to the full width of your display and placed=0A= ;; at the bottom of the display. During minibuffer input, you can=0A= ;; use `1on1-fit-minibuffer-frame' (bind to `C-o') to resize its=0A= ;; height to fit the input text - the height is reset when inputting=0A= ;; is done. To help you perceive changes to different minibuffer=0A= ;; recursion levels, the background color of the minibuffer frame is=0A= ;; changed slightly with each recursion-depth change.=0A= ;;=0A= ;; This library is especially useful if used in combination with=0A= ;; One-on-One Emacs libraries `autofit-frame.el', which automatically=0A= ;; fits frames to their sole window, and `fit-frame.el', which lets=0A= ;; you fit a frame to its selected window manually. Library=0A= ;; `autofit-frame.el' uses library `fit-frame.el'.=0A= ;;=0A= ;; Because Emacs is not really designed to be frame-oriented, there=0A= ;; are many built-in and standard functions that produce=0A= ;; less-than-optimal results when frames, instead of windows, are the=0A= ;; default. In other One-on-One Emacs libraries, I have fixed most=0A= ;; of these built-in functions to play well with frames.=0A= ;;=0A= ;; For more information on One-on-One Emacs see=0A= ;; http://www.emacswiki.org/cgi-bin/wiki/OneOnOneEmacs.=0A= ;;=0A= ;; To use this library, put the following at the *END* of your init=0A= ;; file, `.emacs' (or `_emacs'). In particular, if your init file=0A= ;; contains a `custom-set-variables' expression, then the following=0A= ;; must appear *AFTER* that expression, in order for this to take=0A= ;; into account your customizations of any `1on1-' user options.=0A= ;;=0A= ;; (require 'oneonone)=0A= ;; (1on1-emacs)=0A= ;;=0A= ;; Initial frame: By default, the initial Emacs frame is like all=0A= ;; other normal (non-special-display) frames; that is,=0A= ;; `initial-frame-alist' effectively uses the frame properties=0A= ;; defined in `default-frame-alist'. If you would like the initial=0A= ;; frame to be different, set `default-frame-alist' to nil after=0A= ;; requiring `oneonone.el' but before executing `1on1-emacs':=0A= ;;=0A= ;; (require 'oneonone)=0A= ;; (setq default-frame-alist nil)=0A= ;; (setq initial-frame-alist '((background-color . "White"))); e.g.=0A= ;; (1on1-emacs)=0A= ;;=0A= ;; If you want the text cursor to change to a box when Emacs is idle,=0A= ;; then add this line also to your init file:=0A= ;;=0A= ;; (toggle-box-cursor-when-idle 1) ; Turn on box cursor when idle.=0A= ;;=0A= ;; Info and Customize frames: I recommend that you put the following=0A= ;; code in your init file, so that Info and Customize buffers will=0A= ;; display in their own frames. Which code to use depends on your=0A= ;; version of GNU Emacs.=0A= ;;=0A= ;; (cond ((< emacs-major-version 21)=0A= ;; (remove-hook 'same-window-buffer-names "*info*"))=0A= ;; ((=3D emacs-version 21)=0A= ;; (remove-hook 'same-window-buffer-names "*info*")=0A= ;; (remove-hook 'same-window-regexps "\\`\\*Customiz.*\\*\\'"))=0A= ;; (t=0A= ;; (remove-hook 'same-window-regexps = "\\*info\\*\\(\\|<[0-9]+>\\)")=0A= ;; (remove-hook 'same-window-regexps = "\\`\\*Customiz.*\\*\\'")))=0A= ;;=0A= ;; Recommended key bindings (requires library `fit-frame.el'):=0A= ;;=0A= ;; (define-key minibuffer-local-map "\C-o"=0A= ;; '1on1-fit-minibuffer-frame)=0A= ;; (define-key minibuffer-local-must-match-map "\C-o"=0A= ;; '1on1-fit-minibuffer-frame)=0A= ;; (define-key minibuffer-local-completion-map "\C-o"=0A= ;; '1on1-fit-minibuffer-frame)=0A= ;;=0A= ;;=0A= ;; Notes on user options defined here:=0A= ;; ---------------------------------=0A= ;;=0A= ;; Some user options are used here only as conveniences to define=0A= ;; frame-parameter alists. They are defined using `defvar', not=0A= ;; `defcustom', because you cannot use Customize to define them=0A= ;; independently of the alist user options they help to define. The=0A= ;; alists themselves are the variables to customize. If you want to=0A= ;; change the `defvar' variables individually and then use them to=0A= ;; set the alist variables, then use `setq', not Customize, to change=0A= ;; them, and restart Emacs for their changes to take effect.=0A= ;;=0A= ;; Changes to any user options defined here with `defcustom' will=0A= ;; take effect as soon as `1on1-emacs' is executed, so you can do=0A= ;; `M-x 1on1-emacs' to see their changes (no need to restart=0A= ;; Emacs).=0A= ;;=0A= ;; User options `1on1-color-minibuffer-frame-on-setup-increment' and=0A= ;; `1on1-color-minibuffer-frame-on-exit-increment' determine how much=0A= ;; to change the color of the minibuffer frame when the minibuffer is=0A= ;; entered and exitted. They are hue increments, and should be=0A= ;; opposite in sign. They should cancel each other out, so that the=0A= ;; color returns to what it was initially at any given=0A= ;; recursive-minibuffer depth. However, because of the way HSV and=0A= ;; RGB color-component conversion works, the best cancellation does=0A= ;; not occur when these have the same absolute value. And, how much=0A= ;; their absolute values should differ depends on that magnitude.=0A= ;; It's best to just set one of these to an increment you like, and=0A= ;; then fiddle with the other until they more or less cancel.=0A= ;;=0A= ;;=0A= ;; New functions and macros defined here (each has prefix `1on1-'):=0A= ;;=0A= ;; `box-cursor-when-idle', `change-cursor-on-input-method',=0A= ;; `change-cursor-on-overwrite/read-only',=0A= ;; `color-minibuffer-frame-on-exit',=0A= ;; `color-minibuffer-frame-on-setup',=0A= ;; `color-isearch-minibuffer-frame', `display-*Completions*-frame',=0A= ;; `display-*Help*-frame', `emacs', `fit-minibuffer-frame',=0A= ;; `flash-ding-minibuffer-frame', `increment-color-hue',=0A= ;; `minibuffer-prompt-end', `reset-minibuffer-frame',=0A= ;; `set-box-cursor-when-idle-interval', `set-cursor-type',=0A= ;; `set-minibuffer-frame-top/bottom', `set-minibuffer-frame-width',=0A= ;; `setup-minibuffer-frame-coloring',=0A= ;; `setup-mode-line'. `toggle-box-cursor-when-idle'.=0A= ;;=0A= ;; Customizable user options defined here (each has prefix `1on1-'):=0A= ;;=0A= ;; `*Completions*-frame-flag', `*Completions*-frame-at-right-flag',=0A= ;; `*Help*-frame-flag', `active-minibuffer-frame-background',=0A= ;; `active-mode-line-background',=0A= ;; `change-cursor-on-overwrite/read-only-flag',=0A= ;; `color-minibuffer-frame-on-exit-increment',=0A= ;; `color-minibuffer-frame-on-setup-increment',=0A= ;; `color-mode-line-flag', `completions-frame-background',=0A= ;; `completions-frame-mouse+cursor-color',=0A= ;; `completions-frame-width', `default-frame-alist',=0A= ;; `help-frame-background', `help-frame-mouse+cursor-color',=0A= ;; `inactive-minibuffer-frame-background',=0A= ;; `inactive-mode-line-background',=0A= ;; `isearch-minibuffer-frame-background', `minibuffer-frame-alist',=0A= ;; `minibuffer-frame-left', `minibuffer-frame-top/bottom',=0A= ;; `minibuffer-frame-width', `minibuffer-frame-width-percent',=0A= ;; `special-display-frame-alist'.=0A= ;;=0A= ;; Non-customizable user options defined here (prefix `1on1-'):=0A= ;;=0A= ;; `default-frame-background', `default-frame-cursor-color',=0A= ;; `default-frame-cursor-color-input-method',=0A= ;; `default-frame-cursor-type',=0A= ;; `default-frame-cursor-type-overwrite/read-only',=0A= ;; `default-frame-font', `default-frame-foreground',=0A= ;; `default-frame-menu-bar-lines', `default-frame-mouse-color',=0A= ;; `default-frame-size', `default-frame-upper-left-corner',=0A= ;; `default-special-frame-background',=0A= ;; `default-special-frame-cursor-color',=0A= ;; `default-special-frame-font',=0A= ;; `default-special-frame-foreground',=0A= ;; `default-special-frame-menu-bar-lines',=0A= ;; `default-special-frame-mouse-color',=0A= ;; `default-special-frame-size',=0A= ;; `default-special-frame-upper-left-corner',=0A= ;; `minibuffer-frame-background', `minibuffer-frame-cursor-color',=0A= ;; `minibuffer-frame-flag', `minibuffer-frame-font',=0A= ;; `minibuffer-frame-foreground', `minibuffer-frame-height',=0A= ;; `minibuffer-frame-mouse-color'.=0A= ;;=0A= ;; Other new variables defined here (each has prefix `1on1-'):=0A= ;;=0A= ;; `box-cursor-when-idle-p', `box-cursor-when-idle-interval',=0A= ;; `box-cursor-when-idle-timer', `last-cursor-type',=0A= ;; `minibuffer-frame'.=0A= ;;=0A= ;;=0A= ;; ***** NOTE: These EMACS PRIMITIVES have been REDEFINED HERE:=0A= ;;=0A= ;; `abort-recursive-edit', `top-level' -=0A= ;; Reset color of minibuffer frame to "inactive" color.=0A= ;;=0A= ;; `y-or-n-p' - Temporarily color minibuffer frame to "active" color.=0A= ;;=0A= ;;=0A= ;; Acknowledgements:=0A= ;;=0A= ;; The cursor-changing on input method and read-only was inspired by=0A= ;; Juri Linkov . Joe Casadonte =0A= ;; wrote a similar hook (`joc-cursor-type-set-hook'), which he got=0A= ;; from Steve Kemp...=0A= ;;=0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= ;;=0A= ;;; Change log:=0A= ;;=0A= ;; 2007/12/05 dadams=0A= ;; 1on1-minibuffer-frame-left: Added :type.=0A= ;; 1on1-color-mode-line-flag, 1on1-minibuffer-frame-flag: defvar -> = defcustom.=0A= ;; 1on1-(minibuffer|(special-)default)-frame-*: Removed * doc-string = prefix.=0A= ;; 2007/11/22 dadams=0A= ;; Added: 1on1-reset-minibuffer-frame, 1on1-fit-minibuffer-frame,=0A= ;; 1on1-minibuffer-prompt-end. Recommend C-o key binding.=0A= ;; Use 1on1-reset-minibuffer-frame on minibuffer-exit-hook.=0A= ;; 2007/08/14 dadams=0A= ;; 1on1-emacs:=0A= ;; Add *Completions* to special-display-buffer-names even if=0A= ;; 1on1-*Completions*-frame-flag is nil, so minibuffer gets = focus.=0A= ;; Set w(in)32-grab-focus-on-raise to nil.=0A= ;; 1on1-display-*Completions*-frame:=0A= ;; Don't change mouse pointer unless 1on1-*Completions*-frame-flag.=0A= ;; 1on1-minibuffer-frame-background: Use std minibuffer-frame-alist = bg, if defined.=0A= ;; 2007/05/28 dadams=0A= ;; 1on1-display-*Completions*-frame:=0A= ;; Wrap zoom-frm-out in condition-case (hack for Emacs 23 problem = changing size).=0A= ;; 2007/03/10 dadams=0A= ;; Added: 1on1-completions-frame-width. Use it in 1on1-emacs.=0A= ;; 2007/02/08 dadams=0A= ;; Removed: ^L-appearance-vector.=0A= ;; 1on1-emacs: No longer change ^L appearance - use my library = pp-c-l.el to do that.=0A= ;; 2007/02/04 dadams=0A= ;; 1on1-emacs:=0A= ;; Initialize standard-display-table if nil (default is nil!). = Thx to FidelSalas.=0A= ;; 2006/12/27 dadams=0A= ;; 1on1-change-cursor-on-input-method: Respect = 1on1-change-cursor-on-input-method-flag=0A= ;; 2006/12/12 dadams=0A= ;; Added: 1on1-^L-appearance-vector.=0A= ;; 1on1-emacs: Use 1on1-^L-appearance-vector to set ^L appearance.=0A= ;; 2006/12/11 dadams=0A= ;; 1on1-set-minibuffer-frame-top/bottom: 2 chars up, not 1, to fit = Emacs 22 better.=0A= ;; 2006/10/28 dadams=0A= ;; 1on1-(in)active-minibuffer-frame-background,=0A= ;; 1on1-isearch-minibuffer-frame-background, = 1on1-(in)active-mode-line-background,=0A= ;; 1on1-(help|completions)-frame-background,=0A= ;; 1on1-(help|completions)-frame-mouse+cursor-color,=0A= ;; 1on1-default-frame-cursor-color(-input-method):=0A= ;; Changed :type to 'color for Emacs 21+.=0A= ;; 2006/09/14 dadams=0A= ;; Removed mode-line position enhancements - use new library = modeline-posn.el.=0A= ;; Removed: 1on1-color-mode-line-column-flag, = 1on1-mode-line-column-limit.=0A= ;; 2006/09/04 dadams=0A= ;; 1on1-box-cursor-when-idle-timer: Cancel beforehand, and cancel = after defining.=0A= ;; 1on1-toggle-box-cursor-when-idle:=0A= ;; Use 1on1-box-cursor-when-idle-off on pre-command-hook.=0A= ;; Don't read an event; just turn it on.=0A= ;; Added: 1on1-box-cursor-when-idle-off.=0A= ;; 2006/09/02 dadams=0A= ;; 1on1-toggle-box-cursor-when-idle: Corrected.=0A= ;; 2006/08/27 dadams=0A= ;; Added: 1on1-box-cursor-when-idle(-p|-interval|-timer), = 1on1-last-cursor-type,=0A= ;; (1on1-)toggle-box-cursor-when-idle, = 1on1-set-box-cursor-when-idle-interval.=0A= ;; 2006/08/13 dadams=0A= ;; defalias set-cursor-type to 1on1-set-cursor-type.=0A= ;; 2006/07/25 dadams=0A= ;; Added: 1on1-minibuffer-frame-left. Use in = 1on1-minibuffer-frame-alist.=0A= ;; 2006/03/31 dadams=0A= ;; 1on1-default-frame-alist:=0A= ;; Changed (left|right)-fringe code, to reflect Emacs 22 change.=0A= ;; 2006/03/17 dadams=0A= ;; Renamed:=0A= ;; 1on1-color-active-minibuffer-frame to = 1on1-color-minibuffer-frame-on-setup,=0A= ;; 1on1-color-inactive-minibuffer-frame to = 1on1-color-minibuffer-frame-on-exit.=0A= ;; 1on1-color-minibuffer-frame-on-setup:=0A= ;; Redefined so hue depends on minibuffer-depth.=0A= ;; 2006/03/14 dadams=0A= ;; 1on1-color-(in)active-minibuffer-frame: Change hue for each = minibuffer recursion.=0A= ;; Added: 1on1-increment-color-hue.=0A= ;; Require hexrgb.el=0A= ;; 2006/03/13 dadams=0A= ;; 1on1-color-inactive-minibuffer-frame:=0A= ;; Change color only when not in recursive minibuffer.=0A= ;; abort-recursive-edit: Change minibuffer color after, not before, = abort.=0A= ;; 2006/01/07 dadams=0A= ;; Added :link=0A= ;; 2005/12/14 dadams=0A= ;; Added: 1on1-*Completions*-frame-at-right-flag.=0A= ;; Use in 1on1-display-*Completions*-frame.=0A= ;; 2005/11/28 dadams=0A= ;; Added: 1on1-change-cursor-on-overwrite-flag,=0A= ;; 1on1-change-cursor-on-input-method-flag, = 1on1-default-frame-cursor-type,=0A= ;; 1on1-default-frame-cursor-type-overwrite, = 1on1-default-frame-cursor-color,=0A= ;; 1on1-default-frame-cursor-color-input-mode, = 1on1-change-cursor-on-overwrite,=0A= ;; 1on1-change-cursor-on-insert-mode, 1on1-set-cursor-type = (thanks to=0A= ;; Juri Linkov for the last three).=0A= ;; 1on1-emacs: Use 1on1-change-cursor-* in post-command-hook.=0A= ;; 1on1-mode-line-column-limit: Corrected custom group.=0A= ;; 2005/11/22 dadams=0A= ;; Added: 1on1-setup-mode-line, 1on1-mode-line-column-limit,=0A= ;; 1on1-color-mode-line(-column)-flag, = 1on1-(in)active-mode-line-background.=0A= ;; 2005/10/28 dadams=0A= ;; 1on1-display-*Completions*-frame: Zoom to smaller font.=0A= ;; 2005/07/31 dadams=0A= ;; 1on1-emacs: Do not set initial-frame-alist to default-frame-alist = (D. Reitter).=0A= ;; 2005/07/25 dadams=0A= ;; Added :prefix to defgroup.=0A= ;; 2005/07/17 dadams=0A= ;; Switched default colors for = 1on1-(in)active-minibuffer-frame-background,=0A= ;; so active is the brighter color. Change inactive to LightBlue.=0A= ;; 2005/06/01 dadams=0A= ;; Corrected typo that gave minibuffer frame a vertical scroll bar.=0A= ;; 2005/05/29 dadams=0A= ;; *-alist: Use values from standard alist variables, if available = (that is,=0A= ;; don't override user settings.)=0A= ;; 2005/05/28 dadams=0A= ;; Renamed: 1on1-separate-minibuffer-frame-flag -> = 1on1-minibuffer-frame-flag,=0A= ;; 1on1-separate-*Help*-frame-flag -> 1on1-*Help*-frame-flag,=0A= ;; 1on1-separate-*Completions*-frame-flag -> = 1on1-*Completions*-frame-flag.=0A= ;; Added: setup-minibuffer-frame-coloring.=0A= ;; Added info in doc strings about use of each variable = (restart/1on1-emacs).=0A= ;; Corrected 1on1-minibuffer-frame-alist and = 1on1-special-display-frame-alist=0A= ;; for menu-bar-lines (nil).=0A= ;; 1on1-set-minibuffer-frame-top/bottom: Rewrote with = modify-frame-parameters.=0A= ;; 1on1-emacs:=0A= ;; Make sensitive to any changes to = 1on1-*[Help|Completions]*-frame-flag.=0A= ;; Move defcustom's, defvar's, and defun's outside 1on1-emacs.=0A= ;; If 1on1-minibuffer-frame already exists, just modify it.=0A= ;; Don't step on other parameters in standard alists; just append = new values.=0A= ;; 2005/05/23 dadams=0A= ;; Changed some individual frame-parameter variables from defcustom = to defvar.=0A= ;; Left them as user options, however, so you can change them with=0A= ;; set-variable before loading oneonone.el.=0A= ;; Renamed:=0A= ;; 1on1-upper-left-frame-corner-default ->=0A= ;; 1on1-default-frame-upper-left-corner=0A= ;; 1on1-default-special-display-frame-size ->=0A= ;; 1on1-default-special-frame-size=0A= ;; 1on1-upper-left-special-display-frame-corner-default ->=0A= ;; 1on1-default-special-frame-upper-left-corner=0A= ;; Split 1on1-menu-bar-lines into: = 1on1-default-special-frame-menu-bar-lines,=0A= ;; 1on1-default-frame-menu-bar-lines=0A= ;; 2005/05/18 dadams=0A= ;; Fixed typo: "oneoneone" -> "oneonone".=0A= ;; 2005/05/17 dadams=0A= ;; Updated to work with Emacs 22.x.=0A= ;; 2005/05/09 dadams=0A= ;; Major reorganization/rewrite. Created, from previous version = setup-frames.el.=0A= ;; Added prefix "1on1-".=0A= ;; Encapsulated stuff in new command 1on1-emacs.=0A= ;; 2005/01/29 dadams=0A= ;; 1on1-default-frame-font: Fixed bug - misplaced parens, so no good = if not Windows.=0A= ;; 2005/01/19 dadams=0A= ;; Use defcustom now.=0A= ;; Removed (put ... 'variable-interactive...).=0A= ;; 1on1-minibuffer-frame-top/bottom: Must be an integer (for = set-frame-position).=0A= ;; 2004/12/18 dadams=0A= ;; Bind after-make-frame-functions to nil when create = 1on1-minibuffer-frame.=0A= ;; 2004/11/26 dadams=0A= ;; Removed ;;;###autoload's.=0A= ;; 2004/11/20 dadams=0A= ;; Refined to deal with Emacs 21 < 21.3.50 (soon to be 22.x)=0A= ;; 2004/10/01 dadams=0A= ;; Ensure loaded before compile.=0A= ;; No fringe.=0A= ;; Remove *info* and *Customiz.* buffers from `same-window-regexps'=0A= ;; 2004/09/21 dadams=0A= ;; Updated to work with Emacs 21 (and Emacs 20).=0A= ;; 2004/03/19 dadams=0A= ;; 1on1-minibuffer-frame-width -> 1on1-set-minibuffer-frame-width.=0A= ;; added 1on1-set-minibuffer-frame-top/bottom.=0A= ;; 2001/01/05 dadams=0A= ;; 1. 1on1-minibuffer-frame-width: Use 1on1-minibuffer-frame arg for = frame-char-width.=0A= ;; 2. Don't define width when initially set = 1on1-minibuffer-frame-alist. Instead,=0A= ;; use set-frame-width afterward, so 1on1-minibuffer-frame-width = uses correct=0A= ;; character size.=0A= ;; 2001/01/05 dadams=0A= ;; 1. These vars no longer user options (interactively changeable):=0A= ;; 1on1-completions-frame-background, = 1on1-completions-frame-mouse+cursor-color,=0A= ;; 1on1-help-frame-background, 1on1-help-frame-mouse+cursor-color,=0A= ;; 1on1-minibuffer-frame-cursor-color, 1on1-minibuffer-frame-font,=0A= ;; 1on1-minibuffer-frame-foreground, 1on1-minibuffer-frame-height,=0A= ;; 1on1-minibuffer-frame-mouse-color, = 1on1-minibuffer-frame-top/bottom,=0A= ;; 1on1-minibuffer-frame-width.=0A= ;; 2. Added: 1on1-minibuffer-frame-width (function),=0A= ;; 1on1-minibuffer-frame-width-percent (var).=0A= ;; 3. Changed var 1on1-minibuffer-frame-width to nil default (now = use *-percent).=0A= ;; 2000/09/27 dadams=0A= ;; 1. Added: 1on1-display-*Completions*-frame, = 1on1-display-*Help*-frame.=0A= ;; 2. *Help* & *Completions* frames not created here. Instead, use=0A= ;; special-display-buffer-names & display-*-frame fns to define = them.=0A= ;; 3. Added: top-level, abort-recursive-edit.=0A= ;; 1999/08/24 dadams=0A= ;; 1. Windows: win32-grab-focus-on-raise =3D nil.=0A= ;; 2. 1on1-default-frame-font different if Windows.=0A= ;; 3. Added: 1on1-separate-minibuffer-frame-flag, = 1on1-menu-bar-lines,=0A= ;; 1on1-upper-left-frame-corner-default, 1on1-default-frame-size,=0A= ;; 1on1-upper-left-special-display-frame-corner-default,=0A= ;; 1on1-default-special-display-frame-size, = 1on1-default-special-frame-foreground,=0A= ;; 1on1-default-special-frame-background, = 1on1-default-special-frame-font,=0A= ;; 1on1-default-special-frame-mouse-color, = 1on1-default-special-frame-cursor-color.=0A= ;; 4. Use new vars to define default-frame-alist, = special-display-frame-alist.=0A= ;; 5. Only create built-in frames if = 1on1-separate-minibuffer-frame-flag.=0A= ;; 6. Protected refs to x-* vars.=0A= ;;=0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= ;;=0A= ;; This program is free software; you can redistribute it and/or modify=0A= ;; it under the terms of the GNU General Public License as published by=0A= ;; the Free Software Foundation; either version 2, or (at your option)=0A= ;; any later version.=0A= =0A= ;; This program is distributed in the hope that it will be useful,=0A= ;; but WITHOUT ANY WARRANTY; without even the implied warranty of=0A= ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the=0A= ;; GNU General Public License for more details.=0A= =0A= ;; You should have received a copy of the GNU General Public License=0A= ;; along with this program; see the file COPYING. If not, write to=0A= ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth=0A= ;; Floor, Boston, MA 02110-1301, USA.=0A= ;;=0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= ;;=0A= ;;; Code:=0A= =0A= (eval-and-compile (require 'cl)) ;; remove-if (plus, for Emacs < 20, = when, unless)=0A= =0A= (require 'frame-cmds nil t) ;; (no error if not found): rename-frame=0A= (require 'files+ nil t) ;; (no error if not found): = switch-to-buffer-other-frame=0A= (require 'zoom-frm nil t) ;; (no error if not found): zoom-frm-out=0A= (require 'hexrgb) ;; hexrgb-color-values-to-hex, hexrgb-hsv-to-rgb, = hexrgb-rgb-to-hsv=0A= =0A= =0A= ;; Ensure that this is loaded before compiling it.=0A= (provide 'oneonone)=0A= (require 'oneonone)=0A= =0A= =0A= ;; To quiet the byte compiler=0A= (unless (> emacs-major-version 21)=0A= (defvar x-pointer-box-spiral)=0A= (defvar x-pointer-xterm))=0A= =0A= ;;;;;;;;;;;;;;;;;;;;;;;;=0A= =0A= =0A= (defgroup One-On-One nil=0A= "Options to define initial frame configuration."=0A= :prefix "1on1-" :group 'frames=0A= :link `(url-link :tag "Send Bug Report"=0A= ,(concat "mailto:" "drew.adams" "@" "oracle" ".com?subject=3D\=0A= oneonone.el bug: \=0A= &body=3DDescribe bug here, starting with `emacs -q'. \=0A= Don't forget to mention your Emacs and library versions."))=0A= :link '(url-link :tag "Other Libraries by Drew"=0A= "http://www.emacswiki.org/cgi-bin/wiki/DrewsElispLibraries")=0A= :link '(url-link :tag "Download" = "http://www.emacswiki.org/cgi-bin/wiki/oneonone.el")=0A= :link '(url-link :tag "Description"=0A= "http://www.emacswiki.org/cgi-bin/wiki/OneOnOneEmacs")=0A= :link '(emacs-commentary-link :tag "Commentary" "oneonone")=0A= )=0A= =0C=0A= =0A= =0A= ;;; Minibuffer frame: ********************************=0A= ;;;=0A= (defvar 1on1-minibuffer-frame nil=0A= "Minibuffer-only frame used by One-on-One Emacs.=0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.")=0A= =0A= (defcustom 1on1-minibuffer-frame-flag t=0A= "*Non-nil means use a separate, specialized frame for the minibuffer.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect."=0A= :type 'boolean :group 'One-On-One)=0A= =0A= (defvar 1on1-minibuffer-frame-foreground "Red"=0A= "Default foreground color for the minibuffer frame.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= This is used only to define the standard value of=0A= `1on1-minibuffer-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defvar 1on1-minibuffer-frame-background=0A= (or (cdr (assq 'background-color minibuffer-frame-alist)) "LightBlue")=0A= "Initial color of the `1on1-minibuffer-frame' background.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= This is used only to define the standard value of=0A= `1on1-minibuffer-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defcustom 1on1-active-minibuffer-frame-background "PaleGoldenrod"=0A= "*The color of the `1on1-minibuffer-frame' when it is active.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0A= (defcustom 1on1-inactive-minibuffer-frame-background = 1on1-minibuffer-frame-background=0A= "*The color of the `1on1-minibuffer-frame' when it is inactive.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0A= (defcustom 1on1-isearch-minibuffer-frame-background "bisque"=0A= "*Color of the `1on1-minibuffer-frame' when `isearch' is active.=0A= See `1on1-color-isearch-minibuffer-frame'.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0A= (defcustom 1on1-color-mode-line-flag t=0A= "*Non-nil means use `1on1-(in)active-mode-line-background'.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect."=0A= :type 'boolean :group 'One-On-One)=0A= =0A= (defcustom 1on1-color-minibuffer-frame-on-exit-increment 5=0A= "Increment to change minibuffer-frame hue when minibuffer is exited.=0A= This should be opposite in sign to=0A= `1on1-color-minibuffer-frame-on-setup-increment.'"=0A= :type 'integer :group 'One-On-One)=0A= =0A= (defcustom 1on1-color-minibuffer-frame-on-setup-increment -10=0A= "Increment to change minibuffer-frame hue when minibuffer is entered.=0A= This should be opposite in sign to=0A= `1on1-color-minibuffer-frame-on-exit-increment.'"=0A= :type 'integer :group 'One-On-One)=0A= =0A= (defcustom 1on1-active-mode-line-background = 1on1-active-minibuffer-frame-background=0A= "*The color of the mode-line when it is active.=0A= Note: This is not used if `1on1-color-mode-line-flag' is nil."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0A= (defcustom 1on1-inactive-mode-line-background "LightGray"=0A= "*The color of the mode-line when it is inactive.=0A= Note: This is not used if `1on1-color-mode-line-flag' is nil."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0A= (defvar 1on1-minibuffer-frame-font=0A= (if (eq system-type 'windows-nt)=0A= "-*-Lucida Console-normal-r-*-*-14-112-96-96-c-*-iso8859-1"=0A= ;;;;;;;"-*-Lucida Console-normal-r-*-*-15-*-*-*-c-*-*-ansi-"=0A= "-Misc-Fixed-Medium-R-Normal--15-140-75-75-C-90-ISO8859-1")=0A= "Default font for the minibuffer frame.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= This is used only to define the standard value of=0A= `1on1-minibuffer-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defvar 1on1-minibuffer-frame-mouse-color "Black"=0A= "Default mouse color for the minibuffer frame.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= This is used only to define the standard value of=0A= `1on1-minibuffer-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defvar 1on1-minibuffer-frame-cursor-color "Black"=0A= "Default text cursor color for the minibuffer frame.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= This is used only to define the standard value of=0A= `1on1-minibuffer-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defvar 1on1-minibuffer-frame-height 2=0A= "Height of minibuffer frame, in characters.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= This is used only to define the standard value of=0A= `1on1-minibuffer-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defcustom 1on1-minibuffer-frame-left 0=0A= "*Position of left edge of minibuffer frame, in pixels.=0A= An integer. If negative, then the position is that of the frame=0A= bottom relative to the screen right (not left) edge.=0A= =0A= See `default-frame-alist' for an explanation of frame parameters.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type 'integer :group 'One-On-One)=0A= =0A= (defcustom 1on1-minibuffer-frame-top/bottom nil=0A= "*Position of top (or bottom) of minibuffer frame, in pixels.=0A= If nil, function `1on1-set-minibuffer-frame-top/bottom' will position=0A= minibuffer at bottom of display.=0A= =0A= An integer. If negative, then the position is that of the frame=0A= bottom relative to the screen bottom.=0A= =0A= See `default-frame-alist' for an explanation of frame parameters.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type '(choice (const :tag "Use function = `1on1-set-minibuffer-frame-top/bottom'" nil)=0A= (integer :tag "Pixels from top (>=3D 0) or bottom (< = 0)" :value 0))=0A= :group 'One-On-One)=0A= =0A= (defcustom 1on1-minibuffer-frame-width nil=0A= "Width, in characters, for minibuffer frame.=0A= If nil, then function `1on1-set-minibuffer-frame-width' is used instead.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type '(choice (const :tag "Use function = `1on1-set-minibuffer-frame-width'" nil)=0A= (integer :tag "Width, in characters, for minibuffer = frame" :value 0))=0A= :group 'One-On-One)=0A= =0A= (defcustom 1on1-minibuffer-frame-width-percent 100=0A= "Max percent of the total display width to give to minibuffer frame.=0A= See function `1on1-set-minibuffer-frame-width'.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type 'integer :group 'One-On-One)=0A= =0A= ;; Use values from the standard list, when available. However, we have = no way of=0A= ;; distinguishing values predefined in vanilla Emacs from user settings.=0A= (defcustom 1on1-minibuffer-frame-alist=0A= (list=0A= (or (assq 'foreground-color minibuffer-frame-alist)=0A= (cons 'foreground-color 1on1-minibuffer-frame-foreground))=0A= (or (assq 'background-color minibuffer-frame-alist)=0A= (cons 'background-color 1on1-minibuffer-frame-background))=0A= (or (assq 'font minibuffer-frame-alist)=0A= (cons 'font 1on1-minibuffer-frame-font))=0A= (or (assq 'mouse-color minibuffer-frame-alist)=0A= (cons 'mouse-color 1on1-minibuffer-frame-mouse-color))=0A= (or (assq 'cursor-color minibuffer-frame-alist)=0A= (cons 'cursor-color 1on1-minibuffer-frame-cursor-color))=0A= (or (assq 'menu-bar-lines minibuffer-frame-alist)=0A= (cons 'menu-bar-lines nil))=0A= (or (assq 'left minibuffer-frame-alist)=0A= (cons 'left 1on1-minibuffer-frame-left))=0A= (or (assq 'height minibuffer-frame-alist)=0A= (cons 'height 1on1-minibuffer-frame-height))=0A= (or (assq 'icon-type minibuffer-frame-alist)=0A= (cons 'icon-type (< emacs-major-version 21))) ; `t' for Emacs 21 = too?=0A= (or (assq 'minibuffer minibuffer-frame-alist)=0A= (cons 'minibuffer 'only))=0A= (or (assq 'user-position minibuffer-frame-alist)=0A= (cons 'user-position t))=0A= (or (assq 'vertical-scroll-bars minibuffer-frame-alist) ; No scroll = bar.=0A= (cons 'vertical-scroll-bars nil))=0A= (or (assq 'name minibuffer-frame-alist)=0A= (cons 'name "Emacs Minibuffer")))=0A= "Frame-parameter alist for the standalone minibuffer frame=0A= `1on1-minibuffer-frame'.=0A= =0A= Note: This is not used if `1on1-minibuffer-frame-flag' is nil.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= ;; If we didn't need Emacs 20 compatibility, this could be:=0A= ;; :type '(alist :key-type symbol :value-type sexp)=0A= :type '(repeat (cons :format "%v" (symbol :tag "Frame Parameter") = (sexp :tag "Value")))=0A= :group 'One-On-One)=0A= =0C=0A= =0A= =0A= ;;; *Help* frame: ********************************=0A= ;;; Display of *Help* buffer in custom frame.=0A= ;;; Background, height, cursor and pointer colors.=0A= ;;;=0A= (defcustom 1on1-*Help*-frame-flag t=0A= "*Non-nil means use a special appearance for the *Help* frame.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type 'boolean :group 'One-On-One)=0A= =0A= (defcustom 1on1-help-frame-background "Thistle"=0A= "Default background color for the *Help* buffer's frame.=0A= =0A= Note: This is not used if `1on1-*Help*-frame-flag' is nil.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0A= (defcustom 1on1-help-frame-mouse+cursor-color "Blue Violet"=0A= "Default color for cursor & pointer of *Help* frame.=0A= =0A= Note: This is not used if `1on1-*Help*-frame-flag' is nil.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0C=0A= =0A= =0A= ;;; *Completions* frame: ********************************=0A= ;;; Display of *Completion* buffer in custom frame.=0A= ;;; Background, height, cursor and pointer colors.=0A= ;;;=0A= (defcustom 1on1-*Completions*-frame-flag t=0A= "*Non-nil means use a special appearance for the *Completions* frame.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type 'boolean :group 'One-On-One)=0A= =0A= (defcustom 1on1-*Completions*-frame-at-right-flag nil=0A= "*Non-nil means place *Completions* frame at right edge of display.=0A= This can be useful to make *Completions* more visible.=0A= This has no effect if `1on1-*Completions*-frame-flag' is nil."=0A= :type 'boolean :group 'One-On-One)=0A= =0A= (defcustom 1on1-completions-frame-background "LavenderBlush2"=0A= "Default background color for the *Completions* buffer's frame.=0A= =0A= Note: This is not used if `1on1-*Completions*-frame-flag' is nil.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0A= (defcustom 1on1-completions-frame-mouse+cursor-color "VioletRed"=0A= "Default color for cursor & pointer of *Completions* frame.=0A= =0A= Note: This is not used if `1on1-*Completions*-frame-flag' is nil.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0A= (defcustom 1on1-completions-frame-width 100=0A= "Width, in characters, for *Completions* frame.=0A= If this is nil, then the pertinent default frame width is used.=0A= =0A= Note: This is not used if `1on1-*Completions*-frame-flag' is nil.=0A= =0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type 'integer :group 'One-On-One)=0A= =0C=0A= =0A= =0A= ;;; Default for normal frames: `1on1-default-frame-alist' = **************************=0A= ;;;=0A= (defvar 1on1-default-frame-foreground "Black"=0A= "Default foreground color for non-special frames.=0A= This is used only to define the standard value of=0A= `1on1-default-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defvar 1on1-default-frame-background "LightBlue"=0A= "Default background color for non-special frames.=0A= This is used only to define the standard value of=0A= `1on1-default-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defvar 1on1-default-frame-font=0A= (if (eq system-type 'windows-nt)=0A= "-*-Lucida Console-normal-r-*-*-14-112-96-96-c-*-iso8859-1"=0A= ;;;;;;"-*-Lucida Console-normal-r-*-*-15-*-*-*-c-*-*-ansi-"=0A= "-Misc-Fixed-Medium-R-Normal--15-140-75-75-C-90-ISO8859-1")=0A= "Default font for non-special frames.=0A= This is used only to define the standard value of=0A= `1on1-default-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defvar 1on1-default-frame-mouse-color "Red"=0A= "Default mouse-pointer color for non-special frames.=0A= This is used only to define the standard value of=0A= `1on1-default-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defcustom 1on1-change-cursor-on-input-method-flag t=0A= "*Non-nil means to use a different cursor when using an input method.=0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type 'boolean :group 'One-On-One)=0A= =0A= (defcustom 1on1-default-frame-cursor-color "Red"=0A= "*Default text cursor color for non-special frames.=0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect. Furthermore, if=0A= `1on1-change-cursor-on-input-method-flag' is nil when you rerun=0A= `1on1-emacs', you will need to toggle that variable to non-nil (and=0A= back to nil, if that's the value you want). Otherwise, the new value=0A= will take effect only after you restart Emacs."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0A= (defcustom 1on1-default-frame-cursor-color-input-method "Orange"=0A= "*Default cursor color for non-special frames if using an input method.=0A= This has no effect if `1on1-change-cursor-on-input-method-flag' is nil.=0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type (if (>=3D emacs-major-version 21) 'color 'string) :group = 'One-On-One)=0A= =0A= (defcustom 1on1-change-cursor-on-overwrite/read-only-flag t=0A= "*Non-nil means use a different cursor when overwrite mode or = read-only.=0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= :type 'boolean :group 'One-On-One)=0A= =0A= (defcustom 1on1-default-frame-cursor-type 'bar=0A= "*Default text cursor type for non-special frames.=0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect. Furthermore, if=0A= `1on1-change-cursor-on-overwrite/read-only-flag' is nil when you rerun=0A= `1on1-emacs', you will need to toggle that variable to non-nil (and=0A= back to nil, if that's the value you want). Otherwise, the new value=0A= will take effect only after you restart Emacs."=0A= :type 'symbol :group 'One-On-One)=0A= =0A= (defvar 1on1-last-cursor-type 1on1-default-frame-cursor-type "Saved last = cursor type.")=0A= =0A= (defcustom 1on1-default-frame-cursor-type-overwrite/read-only 'box=0A= "*Default text cursor type for overwrite mode or read-only buffer.=0A= This applies only to non-special frames. This has no effect if=0A= `1on1-change-cursor-on-overwrite/read-only-flag' is nil. If you=0A= customize this variable, you will need to rerun `1on1-emacs' for the=0A= new value to take effect."=0A= :type 'symbol :group 'One-On-One)=0A= =0A= (defvar 1on1-box-cursor-when-idle-p t=0A= "Non-nil means to use a box cursor whenever Emacs is idle.=0A= Do NOT change this yourself; instead, use = `\\[toggle-box-cursor-when-idle]'.")=0A= =0A= (defvar 1on1-box-cursor-when-idle-interval 2=0A= "Number of seconds to wait before changing cursor type to box.=0A= Do NOT change this yourself to change the wait period; instead, use=0A= `\\[1on1-set-box-cursor-when-idle-interval]'.")=0A= =0A= (defvar 1on1-box-cursor-when-idle-timer=0A= (progn ; Cancel to prevent duplication.=0A= (when (boundp '1on1-box-cursor-when-idle-timer)=0A= (cancel-timer 1on1-box-cursor-when-idle-timer))=0A= (run-with-idle-timer 1on1-box-cursor-when-idle-interval t = '1on1-box-cursor-when-idle))=0A= "Timer used to change the cursor to a box cursor when Emacs is idle.")=0A= =0A= ;; Turn it off, by default. You must use `toggle-box-cursor-when-idle' = to turn it on.=0A= (cancel-timer 1on1-box-cursor-when-idle-timer)=0A= =0A= (defvar 1on1-default-frame-menu-bar-lines 1=0A= "Number of lines used for the menu bar in non-special frames.=0A= This is used only to define the standard value of=0A= `1on1-default-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defvar 1on1-default-frame-upper-left-corner '(0 . 0)=0A= "Position of upper left frame corner.=0A= A cons whose car is the distance from the top in pixels=0A= and whose cdr is the distance from the left in pixels.=0A= =0A= This is used only to define the standard value of=0A= `1on1-default-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= (defvar 1on1-default-frame-size '(80 . 35)=0A= "Default frame size.=0A= A cons whose car is the frame width in pixels=0A= and whose cdr is the frame height in pixels.=0A= =0A= This is used only to define the standard value of=0A= `1on1-default-frame-alist'. Customize that variable, not this one.=0A= If you change this variable, you will need to restart Emacs for it to=0A= take effect.")=0A= =0A= ;; Use values from the standard list, when available. However, we have = no way of=0A= ;; distinguishing values predefined in vanilla Emacs from user settings.=0A= (defcustom 1on1-default-frame-alist=0A= (list=0A= (or (assq 'foreground-color default-frame-alist)=0A= (cons 'foreground-color 1on1-default-frame-foreground))=0A= (or (assq 'background-color default-frame-alist)=0A= (cons 'background-color 1on1-default-frame-background))=0A= (or (assq 'font default-frame-alist)=0A= (cons 'font 1on1-default-frame-font))=0A= (or (assq 'mouse-color default-frame-alist)=0A= (cons 'mouse-color 1on1-default-frame-mouse-color))=0A= (or (assq 'cursor-color default-frame-alist)=0A= (cons 'cursor-color 1on1-default-frame-cursor-color))=0A= (or (assq 'cursor-type default-frame-alist)=0A= (cons 'cursor-type 1on1-default-frame-cursor-type))=0A= (or (assq 'menu-bar-lines default-frame-alist)=0A= (cons 'menu-bar-lines 1on1-default-frame-menu-bar-lines))=0A= (or (assq 'top default-frame-alist)=0A= (cons 'top (car 1on1-default-frame-upper-left-corner)))=0A= (or (assq 'left default-frame-alist)=0A= (cons 'left (cdr 1on1-default-frame-upper-left-corner)))=0A= (or (assq 'width default-frame-alist)=0A= (cons 'width (car 1on1-default-frame-size)))=0A= (or (assq 'height default-frame-alist)=0A= (cons 'height (cdr 1on1-default-frame-size)))=0A= (or (assq 'minibuffer default-frame-alist)=0A= (cons 'minibuffer (not 1on1-minibuffer-frame-flag)))=0A= (or (assq 'user-position default-frame-alist)=0A= (cons 'user-position t))=0A= (or (assq 'vertical-scroll-bars default-frame-alist)=0A= (cons 'vertical-scroll-bars 'right))=0A= (or (assq 'icon-type default-frame-alist)=0A= (cons 'icon-type (< emacs-major-version 21))) ; `t' for Emacs 21 = too?=0A= (or (assq 'tool-bar-lines default-frame-alist)=0A= (cons 'tool-bar-lines 1)) ; Emacs 21+=0A= (if (cdr (assq 'left-fringe default-frame-alist))=0A= (assq 'left-fringe default-frame-alist)=0A= (cons 'left-fringe 0)) ; Emacs 21+=0A= (if (cdr (assq 'right-fringe default-frame-alist))=0A= (assq 'right-fringe default-frame-alist)=0A= (cons 'right-fringe 0)) ; Emacs 21+=0A= (or (assq 'fringe default-frame-alist)=0A= (cons 'fringe 0))) ; Emacs 21, but not 21.3.50 - = REMOVE after 22.x=0A= "Properties to be used for One-on-One Emacs `default-frame-alist'.=0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= ;; If we didn't need Emacs 20 compatibility, this could be:=0A= ;; :type '(alist :key-type symbol :value-type sexp)=0A= :type '(repeat (cons :format "%v" (symbol :tag "Frame Parameter") = (sexp :tag "Value")))=0A= :group 'One-On-One)=0A= =0C=0A= =0A= =0A= ;;; Special-display frames: `1on1-special-display-frame-alist' = ************************=0A= ;;;=0A= (defvar 1on1-default-special-frame-foreground "Black"=0A= "Default foreground color for special display frames.=0A= =0A= This is used only to define the standard value of=0A= `1on1-special-display-frame-alist'. Customize that variable, not this=0A= one. If you change this variable, you will need to restart Emacs for=0A= it to take effect.")=0A= =0A= (defvar 1on1-default-special-frame-background "LightSteelBlue"=0A= "Default background color for special display frames.=0A= =0A= This is used only to define the standard value of=0A= `1on1-special-display-frame-alist'. Customize that variable, not this=0A= one. If you change this variable, you will need to restart Emacs for=0A= it to take effect.")=0A= =0A= (defvar 1on1-default-special-frame-font=0A= (if (eq system-type 'windows-nt)=0A= "-*-Lucida Console-normal-r-*-*-14-112-96-96-c-*-iso8859-1"=0A= ;;;;;;;;"-*-Lucida Console-normal-r-*-*-15-*-*-*-c-*-*-ansi-"=0A= "-Misc-Fixed-Medium-R-Normal--15-140-75-75-C-90-ISO8859-1")=0A= "Default font for special display frames.=0A= =0A= This is used only to define the standard value of=0A= `1on1-special-display-frame-alist'. Customize that variable, not this=0A= one. If you change this variable, you will need to restart Emacs for=0A= it to take effect.")=0A= =0A= (defvar 1on1-default-special-frame-mouse-color "Yellow"=0A= "Default mouse color for special display frames.=0A= =0A= This is used only to define the standard value of=0A= `1on1-special-display-frame-alist'. Customize that variable, not this=0A= one. If you change this variable, you will need to restart Emacs for=0A= it to take effect.")=0A= =0A= (defvar 1on1-default-special-frame-cursor-color "Yellow"=0A= "Default text cursor color for special display frames.=0A= =0A= This is used only to define the standard value of=0A= `1on1-special-display-frame-alist'. Customize that variable, not this=0A= one. If you change this variable, you will need to restart Emacs for=0A= it to take effect.")=0A= =0A= (defvar 1on1-default-special-frame-menu-bar-lines 1=0A= "Number of lines used for the menu bar of special display frames.=0A= =0A= This is used only to define the standard value of=0A= `1on1-special-display-frame-alist'. Customize that variable, not this=0A= one. If you change this variable, you will need to restart Emacs for=0A= it to take effect.")=0A= =0A= (defvar 1on1-default-special-frame-upper-left-corner '(0 . 0)=0A= "Position of upper left corner of special display frames.=0A= A cons whose car is the distance from the top in pixels=0A= and whose cdr is the distance from the left in pixels.=0A= =0A= This is used only to define the standard value of=0A= `1on1-special-display-frame-alist'. Customize that variable, not this=0A= one. If you change this variable, you will need to restart Emacs for=0A= it to take effect.")=0A= =0A= (defvar 1on1-default-special-frame-size '(80 . 20)=0A= "Default size of special display frames.=0A= A cons whose car is the frame width in pixels=0A= and whose cdr is the frame height in pixels.=0A= =0A= This is used only to define the standard value of=0A= `1on1-special-display-frame-alist'. Customize that variable, not this=0A= one. If you change this variable, you will need to restart Emacs for=0A= it to take effect.")=0A= =0A= ;; Use values from the standard list, when available. However, we have = no way of=0A= ;; distinguishing values predefined in vanilla Emacs from user settings.=0A= (defcustom 1on1-special-display-frame-alist=0A= (list=0A= (or (assq 'font special-display-frame-alist)=0A= (cons 'font 1on1-default-special-frame-font))=0A= (or (assq 'width special-display-frame-alist)=0A= (cons 'width (car 1on1-default-special-frame-size)))=0A= (or (assq 'height special-display-frame-alist)=0A= (cons 'height (cdr 1on1-default-special-frame-size)))=0A= (or (assq 'mouse-color special-display-frame-alist)=0A= (cons 'mouse-color 1on1-default-special-frame-mouse-color))=0A= (or (assq 'cursor-color special-display-frame-alist)=0A= (cons 'cursor-color 1on1-default-special-frame-cursor-color))=0A= (or (assq 'menu-bar-lines special-display-frame-alist)=0A= (cons 'menu-bar-lines 1on1-default-special-frame-menu-bar-lines))=0A= (or (assq 'foreground-color special-display-frame-alist)=0A= (cons 'foreground-color 1on1-default-special-frame-foreground))=0A= (or (assq 'background-color special-display-frame-alist)=0A= (cons 'background-color 1on1-default-special-frame-background))=0A= (or (assq 'top special-display-frame-alist)=0A= (cons 'top (car 1on1-default-special-frame-upper-left-corner)))=0A= (or (assq 'left special-display-frame-alist)=0A= (cons 'left (cdr 1on1-default-special-frame-upper-left-corner)))=0A= (or (assq 'unsplittable special-display-frame-alist)=0A= (cons 'unsplittable t))=0A= (or (assq 'user-position special-display-frame-alist)=0A= (cons 'user-position t))=0A= (or (assq 'vertical-scroll-bars special-display-frame-alist)=0A= (cons 'vertical-scroll-bars 'right)))=0A= "Properties to be used for One-on-One `special-display-frame-alist'.=0A= If you customize this variable, you will need to rerun `1on1-emacs'=0A= for the new value to take effect."=0A= ;; If we didn't need Emacs 20 compatibility, this could be:=0A= ;; :type '(alist :key-type symbol :value-type sexp)=0A= :type '(repeat (cons :format "%v" (symbol :tag "Frame Parameter") = (sexp :tag "Value")))=0A= :group 'One-On-One)=0A= =0C=0A= =0A= =0A= ;;; Main command ***************************************=0A= ;;;=0A= ;;;###autoload=0A= (defun 1on1-emacs ()=0A= "One-on-One Emacs setup.=0A= Use `1on1-default-frame-alist' and `1on1-special-display-frame-alist'.=0A= =0A= If `1on1-minibuffer-frame-flag' is non-nil, then create=0A= minibuffer-only frame, `1on1-minibuffer-frame', using=0A= `1on1-minibuffer-frame-alist'.=0A= =0A= If `1on1-separate-minibuffer-*Help*-flag' is non-nil, then use=0A= special frame for *Help* buffer.=0A= =0A= If `1on1-separate-minibuffer-*Completions*-flag' is non-nil, then=0A= use special frame for *Completions* buffer."=0A= (interactive)=0A= (setq default-frame-alist (append 1on1-default-frame-alist = default-frame-alist)=0A= special-display-frame-alist (append = 1on1-special-display-frame-alist=0A= special-display-frame-alist))=0A= =0A= ;; *Help* frame=0A= (if 1on1-*Help*-frame-flag=0A= (add-to-list=0A= 'special-display-buffer-names=0A= (list "*Help*" '1on1-display-*Help*-frame=0A= (list (cons 'background-color 1on1-help-frame-background)=0A= (cons 'mouse-color 1on1-help-frame-mouse+cursor-color)=0A= (cons 'cursor-color = 1on1-help-frame-mouse+cursor-color)=0A= '(height . 40))))=0A= (setq special-display-buffer-names=0A= (remove-if (lambda (elt) (equal "*Help*" (car elt)))=0A= special-display-buffer-names)))=0A= =0A= ;; *Completions* frame=0A= ;; If `1on1-minibuffer-frame-flag' is non-nil, then *Completions* = frame must be treated=0A= ;; specially, so that it gets focus from the minibuffer frame. This = is so, even if=0A= ;; `1on1-*Completions*-frame-flag' is nil.=0A= (if 1on1-minibuffer-frame-flag=0A= (if 1on1-*Completions*-frame-flag=0A= (add-to-list=0A= 'special-display-buffer-names=0A= `("*Completions*" 1on1-display-*Completions*-frame=0A= ((background-color ,@1on1-completions-frame-background)=0A= (mouse-color = ,@1on1-completions-frame-mouse+cursor-color)=0A= (cursor-color = ,@1on1-completions-frame-mouse+cursor-color)=0A= ,@(and 1on1-completions-frame-width=0A= `((width ,@1on1-completions-frame-width))))))=0A= (add-to-list 'special-display-buffer-names=0A= `("*Completions*" = 1on1-display-*Completions*-frame)))=0A= (setq special-display-buffer-names=0A= (remove-if (lambda (elt) (equal "*Completions*" (car elt)))=0A= special-display-buffer-names)))=0A= =0A= ;; Minibuffer frame=0A= (when 1on1-minibuffer-frame-flag=0A= ;; `display-buffer' (& `*-other-window' fns) will use separate = frames.=0A= (setq pop-up-frames t=0A= pop-up-frame-alist (append default-frame-alist = pop-up-frame-alist))=0A= =0A= ;; Set up `1on1-minibuffer-frame'.=0A= (setq minibuffer-frame-alist (append 1on1-minibuffer-frame-alist=0A= minibuffer-frame-alist))=0A= (if 1on1-minibuffer-frame=0A= (modify-frame-parameters 1on1-minibuffer-frame = 1on1-minibuffer-frame-alist)=0A= (setq 1on1-minibuffer-frame=0A= (let ((after-make-frame-functions nil)) ; E.g. inhibit = `fit-frame'.=0A= (make-frame 1on1-minibuffer-frame-alist))))=0A= =0A= ;; Resize and reposition it. If variable = `1on1-minibuffer-frame-width'=0A= ;; or `1on1-minibuffer-frame-top/bottom' is nil, calculate = automatically.=0A= (1on1-set-minibuffer-frame-width)=0A= (1on1-set-minibuffer-frame-top/bottom)=0A= =0A= ;; Rename minibuffer frame. (`rename-frame' is defined in = `frame-cmds.el'.)=0A= (when (fboundp 'rename-frame)=0A= (rename-frame 1on1-minibuffer-frame "Emacs minibuffer = \=0A= show/hide: hold CTRL + click in window"))=0A= (setq minibuffer-auto-raise t)=0A= ;; Background colors of minibuffer frame: 3 states=0A= (add-hook 'isearch-mode-hook '1on1-color-isearch-minibuffer-frame)=0A= (add-hook 'isearch-mode-end-hook = '1on1-color-minibuffer-frame-on-exit)=0A= (add-hook 'minibuffer-setup-hook = '1on1-color-minibuffer-frame-on-setup)=0A= (add-hook 'minibuffer-exit-hook '1on1-color-minibuffer-frame-on-exit)=0A= ;; Redefine built-in fns so they color minibuffer frame.=0A= (1on1-setup-minibuffer-frame-coloring))=0A= =0A= ;; Hooks.=0A= (if 1on1-change-cursor-on-overwrite/read-only-flag=0A= (add-hook 'post-command-hook = '1on1-change-cursor-on-overwrite/read-only)=0A= (1on1-set-cursor-type 1on1-default-frame-cursor-type)=0A= (remove-hook 'post-command-hook = '1on1-change-cursor-on-overwrite/read-only))=0A= (if 1on1-change-cursor-on-input-method-flag=0A= (add-hook 'post-command-hook '1on1-change-cursor-on-input-method)=0A= (setq current-input-method nil)=0A= (1on1-change-cursor-on-input-method)=0A= (remove-hook 'post-command-hook '1on1-change-cursor-on-input-method))=0A= (add-hook 'minibuffer-exit-hook '1on1-reset-minibuffer-frame)=0A= =0A= (setq w32-grab-focus-on-raise nil=0A= win32-grab-focus-on-raise nil) ; older name=0A= (1on1-setup-mode-line))=0A= =0A= ;; This is inspired by code from Juri Linkov .=0A= (defun 1on1-change-cursor-on-input-method ()=0A= "Set cursor type depending on whether an input method is used or not."=0A= (when 1on1-change-cursor-on-input-method-flag=0A= (set-cursor-color=0A= (if current-input-method=0A= 1on1-default-frame-cursor-color-input-method=0A= (let ((bufname (buffer-name (current-buffer))))=0A= (cond=0A= ((string=3D "*Help*" bufname) = 1on1-help-frame-mouse+cursor-color)=0A= ((string=3D "*Completions*" bufname) = 1on1-completions-frame-mouse+cursor-color)=0A= ((eq 1on1-minibuffer-frame (selected-frame))=0A= 1on1-minibuffer-frame-cursor-color)=0A= ((special-display-p bufname) = 1on1-default-special-frame-cursor-color)=0A= (t 1on1-default-frame-cursor-color)))))))=0A= =0A= ;; This is from Juri Linkov , with read-only added.=0A= (defun 1on1-change-cursor-on-overwrite/read-only ()=0A= "Set cursor type differently for overwrite mode and read-only buffer.=0A= That is, use one cursor type for overwrite mode and read-only buffers,=0A= and another cursor type otherwise."=0A= (1on1-set-cursor-type (if (or buffer-read-only overwrite-mode)=0A= = 1on1-default-frame-cursor-type-overwrite/read-only=0A= 1on1-default-frame-cursor-type)))=0A= =0A= (unless (fboundp 'set-cursor-type) (defalias 'set-cursor-type = '1on1-set-cursor-type))=0A= ;; This is essentially from Juri Linkov .=0A= (defun 1on1-set-cursor-type (cursor-type)=0A= "Set the cursor type of the selected frame to CURSOR-TYPE.=0A= When called interactively, prompt for the type to use.=0A= To get the frame's current cursor type, use `frame-parameters'."=0A= (interactive=0A= (list (intern (completing-read "Cursor type: "=0A= (mapcar 'list '("box" "hollow" "bar" = "hbar" nil))))))=0A= (modify-frame-parameters (selected-frame) (list (cons 'cursor-type = cursor-type))))=0A= =0A= (defun 1on1-box-cursor-when-idle ()=0A= "Change the cursor to a box cursor when Emacs is idle."=0A= (let ((type (cdr (assoc 'cursor-type (frame-parameters)))))=0A= (unless (eq type 'box)=0A= (setq 1on1-last-cursor-type type)=0A= (1on1-set-cursor-type 'box)))) =0A= =0A= (defun 1on1-box-cursor-when-idle-off ()=0A= "Turn off changing the cursor to a box cursor when Emacs is idle."=0A= (when 1on1-last-cursor-type (1on1-set-cursor-type = 1on1-last-cursor-type)))=0A= =0A= (defalias 'toggle-box-cursor-when-idle '1on1-toggle-box-cursor-when-idle)=0A= (defun 1on1-toggle-box-cursor-when-idle (&optional arg)=0A= "Turn on or off automatically changing to a box cursor when idle.=0A= When on, the cursor is changed to a box whenever Emacs is idle.=0A= With prefix argument, turn on if ARG > 0; else turn off."=0A= (interactive "P")=0A= (setq 1on1-box-cursor-when-idle-p=0A= (if arg (> (prefix-numeric-value arg) 0) (not = 1on1-box-cursor-when-idle-p)))=0A= (cond (1on1-box-cursor-when-idle-p=0A= (timer-activate-when-idle 1on1-box-cursor-when-idle-timer)=0A= (add-hook 'pre-command-hook '1on1-box-cursor-when-idle-off)=0A= (message "Turned ON making cursor a box when Emacs is idle."))=0A= (t=0A= (cancel-timer 1on1-box-cursor-when-idle-timer)=0A= (remove-hook 'pre-command-hook '1on1-box-cursor-when-idle-off)=0A= (message "Turned OFF making cursor a box when Emacs is = idle."))))=0A= =0A= (defun 1on1-set-box-cursor-when-idle-interval (secs)=0A= "Set wait until automatically change to a box cursor when Emacs is = idle.=0A= Whenever Emacs is idle for this many seconds it will change the cursor=0A= to a box.=0A= =0A= To turn on or off automatically changing to a box cursor when idle,=0A= use `\\[toggle-box-cursor-when-idle]."=0A= (interactive=0A= "nSeconds to idle, before changing to a box cursor: ")=0A= (timer-set-idle-time 1on1-box-cursor-when-idle-timer=0A= (setq 1on1-box-cursor-when-idle-interval secs)=0A= t))=0A= =0A= (defun 1on1-display-*Help*-frame (buf &optional args)=0A= "Display *Help* buffer in its own frame.=0A= `special-display-function' is used to do the actual displaying.=0A= BUF and ARGS are the arguments to `special-display-function'."=0A= (let ((old-ptr-shape x-pointer-shape)=0A= return-window)=0A= (when (boundp 'x-pointer-xterm)=0A= (setq x-pointer-shape x-pointer-xterm))=0A= (setq return-window (select-window (funcall special-display-function = buf args)))=0A= (raise-frame)=0A= (setq x-pointer-shape old-ptr-shape)=0A= return-window))=0A= =0A= (defun 1on1-display-*Completions*-frame (buf &optional args)=0A= "Display *Completions* buffer in its own frame.=0A= `special-display-function' is used to do the actual displaying.=0A= Completion input events are redirected to `1on1-minibuffer-frame'.=0A= BUF and ARGS are the arguments to `special-display-function'."=0A= (let ((old-ptr-shape x-pointer-shape)=0A= return-window)=0A= (when (and 1on1-*Completions*-frame-flag (boundp = 'x-pointer-box-spiral))=0A= (setq x-pointer-shape x-pointer-box-spiral))=0A= (setq return-window (select-window (funcall special-display-function = buf args)))=0A= (when (fboundp 'zoom-frm-out)=0A= (condition-case nil (progn (zoom-frm-out) (zoom-frm-out)) ; In = `zoom-frm.el'.=0A= (error nil)))=0A= =0A= ;; We reposition frame this way, instead of binding = `special-display-frame-alist'=0A= ;; with this value, because `after-make-frame-functions' might = resize frame.=0A= (when 1on1-*Completions*-frame-at-right-flag=0A= (modify-frame-parameters=0A= (selected-frame) ; Hard-code 7 here - what does = it depend on?=0A= `((left . ,(- (x-display-pixel-width) (+ (frame-pixel-width) = 7))))))=0A= (raise-frame)=0A= (when (boundp '1on1-minibuffer-frame)=0A= (redirect-frame-focus (selected-frame) 1on1-minibuffer-frame))=0A= (when (and 1on1-*Completions*-frame-flag (boundp = 'x-pointer-box-spiral))=0A= (setq x-pointer-shape old-ptr-shape))=0A= return-window))=0A= =0A= (defun 1on1-set-minibuffer-frame-top/bottom ()=0A= "Set position of minibuffer frame.=0A= Use `1on1-minibuffer-frame-top/bottom' if non-nil.=0A= Else, place minibuffer at bottom of display."=0A= (when (boundp '1on1-minibuffer-frame)=0A= (modify-frame-parameters=0A= 1on1-minibuffer-frame=0A= `((top ,@ (or 1on1-minibuffer-frame-top/bottom=0A= (- (* 2 (frame-char-height = 1on1-minibuffer-frame)))))))))=0A= =0A= (defun 1on1-set-minibuffer-frame-width ()=0A= "Set width of minibuffer frame, in characters.=0A= Use `1on1-minibuffer-frame-width' if not nil.=0A= Else, set width relative to character size of `1on1-minibuffer-frame'=0A= and display size, and depending on=0A= `1on1-minibuffer-frame-width-percent':=0A= =0A= (/ (* 1on1-minibuffer-frame-width-percent (x-display-pixel-width))=0A= (* 100 (frame-char-width 1on1-minibuffer-frame)))"=0A= (when (boundp '1on1-minibuffer-frame)=0A= (set-frame-width=0A= 1on1-minibuffer-frame=0A= (or 1on1-minibuffer-frame-width=0A= (/ (* 1on1-minibuffer-frame-width-percent = (x-display-pixel-width))=0A= (* 100 (frame-char-width 1on1-minibuffer-frame)))))))=0A= =0A= (defun 1on1-color-minibuffer-frame-on-setup ()=0A= "Change background of minibuffer frame to reflect the minibuffer depth.=0A= Use this when increasing the minibuffer recursion depth."=0A= (when (boundp '1on1-minibuffer-frame)=0A= (save-window-excursion=0A= (select-frame 1on1-minibuffer-frame)=0A= (set-background-color 1on1-active-minibuffer-frame-background)=0A= (let ((count (minibuffer-depth)))=0A= (while (> count 1)=0A= (set-background-color (1on1-increment-color-hue ; Change bg = hue slightly.=0A= (frame-parameter nil 'background-color)=0A= = 1on1-color-minibuffer-frame-on-setup-increment))=0A= (setq count (1- count)))))))=0A= =0A= (defun 1on1-color-minibuffer-frame-on-exit ()=0A= "Change background of minibuffer frame to reflect the minibuffer depth.=0A= Use this when reducing the minibuffer recursion depth."=0A= (when (boundp '1on1-minibuffer-frame)=0A= (save-window-excursion=0A= (select-frame 1on1-minibuffer-frame)=0A= (if (< (minibuffer-depth) 2)=0A= (set-background-color = 1on1-inactive-minibuffer-frame-background)=0A= (set-background-color (1on1-increment-color-hue ; Change bg hue = slightly.=0A= (frame-parameter nil 'background-color)=0A= = 1on1-color-minibuffer-frame-on-exit-increment))))))=0A= =0A= ;; This is essentially a version of `doremi-increment-color-component' = for hue only.=0A= (defun 1on1-increment-color-hue (color increment)=0A= "Increase hue component of COLOR by INCREMENT."=0A= (unless (string-match "#" color) ; Convert color name to #hhh...=0A= (setq color (hexrgb-color-values-to-hex (x-color-values color))))=0A= ;; Convert RGB to HSV=0A= (let* ((rgb (x-color-values color))=0A= (red (/ (float (nth 0 rgb)) 65535.0)) ; Convert from 0-65535 = to 0.0-1.0=0A= (green (/ (float (nth 1 rgb)) 65535.0))=0A= (blue (/ (float (nth 2 rgb)) 65535.0))=0A= (hsv (hexrgb-rgb-to-hsv red green blue))=0A= (hue (nth 0 hsv))=0A= (saturation (nth 1 hsv))=0A= (value (nth 2 hsv)))=0A= (setq hue (+ hue (/ increment 100.0)))=0A= (when (> hue 1.0) (setq hue (1- hue)))=0A= (hexrgb-color-values-to-hex (mapcar (lambda (x) (floor (* x = 65535.0)))=0A= (hexrgb-hsv-to-rgb hue = saturation value)))))=0A= =0A= (defun 1on1-color-isearch-minibuffer-frame ()=0A= "Use `1on1-isearch-minibuffer-frame-background' for minibuffer."=0A= (and (boundp '1on1-minibuffer-frame)=0A= (save-window-excursion=0A= (select-frame 1on1-minibuffer-frame)=0A= (set-background-color=0A= ;; Can also try `x-defined-colors', defined in `x-win.el'.=0A= ;; It contains all colors currently supported by X windows.=0A= (if (x-color-defined-p = 1on1-isearch-minibuffer-frame-background)=0A= 1on1-isearch-minibuffer-frame-background=0A= "white")))))=0A= =0A= (defun 1on1-flash-ding-minibuffer-frame (&optional do-not-terminate)=0A= "Ring bell (`ding'), after flashing minibuffer frame, if relevant.=0A= Terminates any keyboard macro executing, unless arg DO-NOT-TERMINATE = non-nil."=0A= (flash-ding do-not-terminate (and (boundp '1on1-minibuffer-frame)=0A= 1on1-minibuffer-frame)))=0A= =0A= (defun 1on1-setup-minibuffer-frame-coloring ()=0A= "Redefine some built-in functions so they color the minibuffer frame.=0A= Functions redefined: `y-or-n-p', `top-level', `abort-recursive-exit'."=0A= =0A= (or (fboundp 'old-y-or-n-p)=0A= (fset 'old-y-or-n-p (symbol-function 'y-or-n-p)))=0A= =0A= ;; REPLACES ORIGINAL (built-in function):=0A= ;; Temporarily colors minibuffer frame to "active" color.=0A= ;;=0A= (defun y-or-n-p (prompt)=0A= "Ask user a \"y or n\" question. Return t if answer is \"y\".=0A= Takes one argument, which is the string to display to ask the question.=0A= It should end in a space; `y-or-n-p' adds `(y or n) ' to it.=0A= No confirmation of answer is requested; a single character is enough.=0A= Also accepts SPC to mean yes, or DEL to mean no."=0A= (1on1-color-minibuffer-frame-on-setup)=0A= (prog1 (old-y-or-n-p prompt) (1on1-color-minibuffer-frame-on-exit)))=0A= =0A= =0A= (or (fboundp 'old-top-level)=0A= (fset 'old-top-level (symbol-function 'top-level)))=0A= =0A= ;; REPLACES ORIGINAL (built-in function):=0A= ;; Resets color of minibuffer frame to "inactive" color.=0A= ;;=0A= (defun top-level ()=0A= "Exit all recursive editing levels."=0A= (interactive)=0A= (1on1-color-minibuffer-frame-on-exit)=0A= (old-top-level))=0A= =0A= =0A= (or (fboundp 'old-abort-recursive-edit)=0A= (fset 'old-abort-recursive-edit (symbol-function = 'abort-recursive-edit)))=0A= =0A= ;; REPLACES ORIGINAL (built-in function):=0A= ;; Resets color of minibuffer frame to "inactive" color.=0A= ;;=0A= (defun abort-recursive-edit ()=0A= "Abort command that requested this recursive edit or minibuffer = input."=0A= (interactive)=0A= (1on1-color-minibuffer-frame-on-exit)=0A= (old-abort-recursive-edit)))=0A= =0A= (defun 1on1-setup-mode-line ()=0A= "Set up mode-line faces."=0A= (when 1on1-color-mode-line-flag=0A= (set-face-background 'modeline 1on1-active-mode-line-background)=0A= (when (facep 'mode-line-inactive) ; Emacs 22=0A= (set-face-background 'mode-line-inactive = 1on1-inactive-mode-line-background))))=0A= =0A= (defun 1on1-reset-minibuffer-frame ()=0A= (when 1on1-minibuffer-frame=0A= (set-frame-size 1on1-minibuffer-frame=0A= (frame-width 1on1-minibuffer-frame)=0A= 1on1-minibuffer-frame-height)=0A= (1on1-set-minibuffer-frame-top/bottom)))=0A= =0A= ;; Bind this to some key in the minibuffer completion maps. I use `C-o'.=0A= ;;;###autoload=0A= (defun 1on1-fit-minibuffer-frame ()=0A= "Fit the standalone minibuffer frame height to its contents.=0A= Repeat to increase the height by 1.=0A= Bind this in minibuffer keymaps to a key such as `C-o' that you can=0A= use during minibuffer input."=0A= (interactive)=0A= (unless (require 'fit-frame nil t)=0A= (error "You need to load library `fit-frame.el' to use this = command"))=0A= ;; We could assume the minibuffer frame is `1on1-minibuffer-frame', = but we don't.=0A= (when (and (active-minibuffer-window)=0A= (save-selected-window=0A= (select-window (minibuffer-window))=0A= ;; We should be able to use just (one-window-p),=0A= ;; but an Emacs bug means we need this:=0A= (one-window-p nil 'selected-frame)))=0A= (let* ((frame (save-selected-window=0A= (select-window (minibuffer-window)) = (selected-frame)))=0A= (frame-height (frame-height frame)))=0A= (cond ((eq last-command this-command)=0A= (set-frame-height frame (1+ (frame-height frame)))=0A= (1on1-set-minibuffer-frame-top/bottom)=0A= (condition-case nil=0A= (scroll-down (frame-height frame))=0A= (error nil)))=0A= (t=0A= (let* ((beg (1on1-minibuffer-prompt-end))=0A= (frame-width (frame-width frame))=0A= (fit-frame-min-width frame-width)=0A= (window-min-width frame-width)=0A= (fit-frame-max-width frame-width)=0A= (fit-frame-empty-width frame-width)=0A= (fit-frame-empty-special-display-width frame-width)=0A= (fit-frame-min-height frame-height)=0A= (window-min-height frame-height)=0A= (fit-frame-empty-height frame-height)=0A= (fit-frame-empty-special-display-height = frame-height))=0A= (fit-frame frame)=0A= (when (>=3D emacs-major-version 21)=0A= (set-frame-height frame (1+ (frame-height frame)))) ; A = little extra.=0A= (1on1-set-minibuffer-frame-top/bottom)=0A= (condition-case nil (scroll-down (frame-height frame)) = (error nil))))))))=0A= =0A= (defun 1on1-minibuffer-prompt-end ()=0A= "Version of `minibuffer-prompt-end' that works for Emacs 20 and later."=0A= (if (fboundp 'minibuffer-prompt-end) (minibuffer-prompt-end) = (point-min)))=0A= =0A= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=0A= ;;; oneonone.el ends here=0A= ------=_NextPart_000_0011_01C8F4A2.F1B3C970 Content-Type: image/png; name="bug-garbled-about-emacs.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bug-garbled-about-emacs.png" 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 ------=_NextPart_000_0011_01C8F4A2.F1B3C970--