Mercurial > emacs
view admin/alloc-colors.c @ 83449:ff74a86c2b16
Overhaul and simplify single_kboard API. Allow calls to `recursive-edit' in process filters. Small fixes.
* lisp/server.el (server-process-filter): Protect `display-splash-screen'
call in a condition-case. Explain why.
* src/callint.c (Fcall_interactively): Update call to
`temporarily_switch_to_single_kboard'.
* src/fns.c (Fy_or_n_p): Ditto.
* src/frame.c (Fdelete_frame): Remove unused variable `count'.
* src/keyboard.c (wrong_kboard_jmpbuf): Remove global variable.
* src/keyboard.c (read_char): Add wrong_kboard_jmpbuf parameter to allow
for recursive calls. Update longjmp invocations. Remember the
original current_kboard, and longjmp to `wrong_kboard_jmpbuf' when a
filter, timer or sentinel changes it. Comment out unnecessary calls to
`record_single_kboard_state' and `any_kboard_state'. Update recursive
calls.
* src/keyboard.c (read_key_sequence): Add `wrong_kboard_jmpbuf' local
variable. Update setjmp and read_char calls. Abort if
interrupted_kboard died in read_char.
* src/keyboard.c (any_kboard_state, single_kboard_state)
(record_single_kboard_state): Comment out obsolete functions.
(push_frame_kboard): Remove function.
(pop_kboard): Switch out of single_kboard mode if the
kboard has been deleted.
(temporarily_switch_to_single_kboard): Change first
parameter to a frame pointer. Throw an error when caller wants to
change kboards while in single_kboard mode.
(restore_kboard_configuration): Abort if pop_kboard changed
the kboard in single_kboard mode.
(Frecursive_edit): Switch to single_kboard mode only in
nested command loops.
(cmd_error, command_loop, command_loop_1, timer_check):
Comment out unnecessary call to `any_kboard_state' and
`record_single_kboard_state'.
* src/keyboard.c (delete_kboard): Exit single_kboard mode if we have just
deleted that kboard.
* src/keyboard.c (interrupt_signal): Use `Fkill_emacs' to exit Emacs, not
`fatal_error_signal'.
* src/keyboard.h (read_char, single_kboard_state)
(record_single_kboard_state): Remove.
(temporarily_switch_to_single_kboard): Update.
* src/lread.c: Include setjmp.h. Update declaration of `read_char'.
(read_filtered_event): Call `read_char' with a local
`wrong_kboard_jmpbuf'.
* src/minibuf.c (read_minibuf): Update call to
`temporarily_switch_to_single_kboard'.
* src/termchar.h (tty_display_info): Rename `previous_terminal_frame'
member to `previous_frame'.
* src/xdisp.c (redisplay_internal): Update references to
`previous_terminal_frame'.
(display_mode_line, Fformat_mode_line): Replace calls to
`push_frame_kboard' with `push_kboard'.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-489
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Tue, 03 Jan 2006 01:50:46 +0000 |
parents | c53a9463c31a |
children | a8b22f12b3dc f9a65d7ebd29 |
line wrap: on
line source
/* Allocate X colors. Used for testing with dense colormaps. Copyright (C) 2001 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include <X11/Xlib.h> #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <unistd.h> void fatal (const char *fmt, ...) { va_list ap; va_start (ap, fmt); vfprintf (stderr, fmt, ap); fputc ('\n', stderr); va_end (ap); exit (1); } void usage (const char *progname) { fprintf (stderr, "Usage %s options\n", progname); fprintf (stderr, "-n NCOLORS allcoate NCOLORS colors\n"); exit (1); } int main (int argc, char **argv) { Display *dpy; int opt, ncolors = 0, i; XColor *allocated; int nallocated; XColor color; Colormap cmap; while ((opt = getopt (argc, argv, "n:")) != EOF) switch (opt) { case 'n': ncolors = atoi (optarg); break; case '?': usage (argv[0]); } if (ncolors == 0) usage (argv[0]); dpy = XOpenDisplay (""); if (dpy == NULL) fatal ("Cannot open display"); cmap = DefaultColormap (dpy, 0); allocated = malloc (ncolors * sizeof *allocated); nallocated = 0; memset (&color, 0, sizeof color); while (nallocated < ncolors && color.red < 65536) { allocated[nallocated] = color; if (XAllocColor (dpy, cmap, &allocated[nallocated])) { for (i = 0; i < nallocated; ++i) if (allocated[i].red == allocated[nallocated].red && allocated[i].green == allocated[nallocated].green && allocated[i].blue == allocated[nallocated].blue) break; if (i == nallocated) { printf ("allocated %d/%d/%d\n", allocated[nallocated].red, allocated[nallocated].green, allocated[nallocated].blue); ++nallocated; } } ++color.red; ++color.green; ++color.blue; } fprintf (stderr, "Waiting. Press ^C to stop.\n"); while (1) sleep (10); XCloseDisplay (dpy); return 0; } /* arch-tag: f1be90ac-5b70-43c2-835e-5a6432a25145 (do not change this comment) */