X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/b3843c61858aa78d450bdaaa2e597f0a1f7b39e4..1b9ac1453d4263d7e3b6cb52a2207163fe2649c8:/src/keyboard.h diff --git a/src/keyboard.h b/src/keyboard.h index ae135b30b7..b23cc13c64 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -1,13 +1,13 @@ /* Declarations useful when processing input. Copyright (C) 1985, 1986, 1987, 1993, 2001, 2002, 2003, 2004, - 2005, 2006, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Emacs. -GNU Emacs is free software; you can redistribute it and/or modify +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 3, or (at your option) -any later version. +the Free Software Foundation, either version 3 of the License, 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 @@ -15,11 +15,10 @@ 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. */ +along with GNU Emacs. If not, see . */ #include "systime.h" /* for EMACS_TIME */ +#include "coding.h" /* for ENCODE_UTF_8 and ENCODE_SYSTEM */ /* Length of echobuf field in each KBOARD. */ @@ -80,8 +79,7 @@ struct kboard commands that set the prefix argument. */ Lisp_Object Vlast_command; - /* Normally same as last-command, but never modified by - other commands. */ + /* Normally same as last-command, but never modified by other commands. */ Lisp_Object Vreal_last_command; /* User-supplied table to translate input characters through. */ @@ -130,6 +128,9 @@ struct kboard /* Cache for modify_event_symbol. */ Lisp_Object system_key_syms; + /* The kind of display: x, w32, ... */ + Lisp_Object Vwindow_system; + /* Keymap mapping keys to alternative preferred forms. See the DEFVAR for more documentation. */ Lisp_Object Vlocal_function_key_map; @@ -170,7 +171,6 @@ struct kboard char echo_after_prompt; }; -#ifdef MULTI_KBOARD /* Temporarily used before a frame has been opened. */ extern KBOARD *initial_kboard; @@ -187,16 +187,7 @@ extern KBOARD *all_kboards; /* Nonzero in the single-kboard state, 0 in the any-kboard state. */ extern int single_kboard; -#else -extern KBOARD the_only_kboard; -#define current_kboard (&the_only_kboard) -#define all_kboards (&the_only_kboard) -#define single_kboard 1 -#endif -extern Lisp_Object Vlucid_menu_bar_dirty_flag; -extern Lisp_Object Qrecompute_lucid_menubar, Qactivate_menubar_hook; - /* Total number of times read_char has returned. */ extern int num_input_events; @@ -220,6 +211,11 @@ extern int this_command_key_count; generated by the next character. */ extern Lisp_Object internal_last_event_frame; +/* Menu items. */ + +extern Lisp_Object Vlucid_menu_bar_dirty_flag; +extern Lisp_Object Qrecompute_lucid_menubar, Qactivate_menubar_hook; + /* This holds a Lisp vector that holds the properties of a single menu item while decoding it in parse_menu_item. Using a Lisp vector to hold this information while we decode it @@ -249,6 +245,131 @@ extern Lisp_Object item_properties; /* Last property. */ /* Not nil if item is enabled. */ #define ITEM_PROPERTY_ENABLE 8 + +/* This holds a Lisp vector that holds the results of decoding + the keymaps or alist-of-alists that specify a menu. + + It describes the panes and items within the panes. + + Each pane is described by 3 elements in the vector: + t, the pane name, the pane's prefix key. + Then follow the pane's items, with 5 elements per item: + the item string, the enable flag, the item's value, + the definition, and the equivalent keyboard key's description string. + + In some cases, multiple levels of menus may be described. + A single vector slot containing nil indicates the start of a submenu. + A single vector slot containing lambda indicates the end of a submenu. + The submenu follows a menu item which is the way to reach the submenu. + + A single vector slot containing quote indicates that the + following items should appear on the right of a dialog box. + + Using a Lisp vector to hold this information while we decode it + takes care of protecting all the data from GC. */ +extern Lisp_Object menu_items; + +/* If non-nil, means that the global vars defined here are already in use. + Used to detect cases where we try to re-enter this non-reentrant code. */ +extern Lisp_Object menu_items_inuse; + +/* Number of slots currently allocated in menu_items. */ +extern int menu_items_allocated; + +/* This is the index in menu_items of the first empty slot. */ +extern int menu_items_used; + +/* The number of panes currently recorded in menu_items, + excluding those within submenus. */ +extern int menu_items_n_panes; + +#define MENU_ITEMS_PANE_NAME 1 +#define MENU_ITEMS_PANE_PREFIX 2 +#define MENU_ITEMS_PANE_LENGTH 3 + +enum menu_item_idx +{ + MENU_ITEMS_ITEM_NAME = 0, + MENU_ITEMS_ITEM_ENABLE, + MENU_ITEMS_ITEM_VALUE, + MENU_ITEMS_ITEM_EQUIV_KEY, + MENU_ITEMS_ITEM_DEFINITION, + MENU_ITEMS_ITEM_TYPE, + MENU_ITEMS_ITEM_SELECTED, + MENU_ITEMS_ITEM_HELP, + MENU_ITEMS_ITEM_LENGTH +}; + +extern Lisp_Object unuse_menu_items P_ ((Lisp_Object dummy)); + +/* This is how to deal with multibyte text if HAVE_MULTILINGUAL_MENU + isn't defined. The use of HAVE_MULTILINGUAL_MENU could probably be + confined to an extended version of this with sections of code below + using it unconditionally. */ +#ifndef HAVE_NTGUI +#if defined (USE_GTK) || defined (HAVE_NS) +# define ENCODE_MENU_STRING(str) ENCODE_UTF_8 (str) +#elif defined HAVE_X_I18N +#define ENCODE_MENU_STRING(str) ENCODE_SYSTEM (str) +#else +#define ENCODE_MENU_STRING(str) string_make_unibyte (str) +#endif /* USE_GTK */ +#else /* HAVE_NTGUI */ +#define ENCODE_MENU_STRING(str) (str) +#endif + +#if defined (HAVE_NS) || defined (HAVE_NTGUI) + +typedef void * XtPointer; +typedef unsigned char Boolean; + +/* Definitions copied from lwlib.h */ + +enum button_type +{ + BUTTON_TYPE_NONE, + BUTTON_TYPE_TOGGLE, + BUTTON_TYPE_RADIO +}; + +/* This structure is based on the one in ../lwlib/lwlib.h, with unused portions + removed. No term uses these. */ +typedef struct _widget_value +{ + /* name of widget */ + Lisp_Object lname; + char* name; + /* value (meaning depend on widget type) */ + char* value; + /* keyboard equivalent. no implications for XtTranslations */ + Lisp_Object lkey; + char* key; + /* Help string or nil if none. + GC finds this string through the frame's menu_bar_vector + or through menu_items. */ + Lisp_Object help; + /* true if enabled */ + Boolean enabled; + /* true if selected */ + Boolean selected; + /* The type of a button. */ + enum button_type button_type; +#if defined (HAVE_NTGUI) + /* true if menu title */ + Boolean title; +#endif + /* Contents of the sub-widgets, also selected slot for checkbox */ + struct _widget_value* contents; + /* data passed to callback */ + XtPointer call_data; + /* next one in the list */ + struct _widget_value* next; +} widget_value; + +extern widget_value *xmalloc_widget_value P_ ((void)); +extern widget_value *digest_single_submenu P_ ((int, int, int)); +#endif /* HAVE_NS || HAVE_NTGUI */ + /* Macros for dealing with lispy events. */ @@ -313,6 +434,7 @@ extern Lisp_Object parse_modifiers P_ ((Lisp_Object)); extern Lisp_Object reorder_modifiers P_ ((Lisp_Object)); extern Lisp_Object read_char P_ ((int, int, Lisp_Object *, Lisp_Object, int *, EMACS_TIME *)); +extern int parse_solitary_modifier (Lisp_Object symbol); /* Parent keymap of terminal-local function-key-map instances. */ @@ -321,7 +443,7 @@ extern Lisp_Object Vfunction_key_map; /* Keymap of key translations that can override keymaps. */ extern Lisp_Object Vkey_translation_map; -extern int parse_menu_item P_ ((Lisp_Object, int, int)); +extern int parse_menu_item (Lisp_Object, int); extern void echo_now P_ ((void)); extern void init_kboard P_ ((KBOARD *)); @@ -362,10 +484,11 @@ extern void gen_help_event P_ ((Lisp_Object, Lisp_Object, Lisp_Object, extern void kbd_buffer_store_help_event P_ ((Lisp_Object, Lisp_Object)); extern Lisp_Object menu_item_eval_property P_ ((Lisp_Object)); extern int kbd_buffer_events_waiting P_ ((int)); -extern void add_user_signals P_ ((int, const char *)); +extern void add_user_signal P_ ((int, const char *)); extern int tty_read_avail_input P_ ((struct terminal *, int, struct input_event *)); +extern EMACS_TIME timer_check P_ ((int)); /* arch-tag: 769cbade-1ba9-4950-b886-db265b061aa3 (do not change this comment) */