Mercurial > hg > xemacs-beta
annotate src/console-x.h @ 5882:bbe4146603db
Reduce regexp usage, now CL-oriented non-regexp code available, core Lisp
lisp/ChangeLog addition:
2015-04-01 Aidan Kehoe <kehoea@parhasard.net>
When calling #'string-match with a REGEXP without regular
expression special characters, call #'search, #'mismatch, #'find,
etc. instead, making our code less likely to side-effect other
functions' match data and a little faster.
* apropos.el (apropos-command):
* apropos.el (apropos):
Call (position ?\n ...) rather than (string-match "\n" ...) here.
* buff-menu.el:
* buff-menu.el (buffers-menu-omit-invisible-buffers):
Don't fire up the regexp engine just to check if a string starts
with a space.
* buff-menu.el (select-buffers-tab-buffers-by-mode):
Don't fire up the regexp engine just to compare mode basenames.
* buff-menu.el (format-buffers-tab-line):
* buff-menu.el (build-buffers-tab-internal): Moved to being a
label within the following.
* buff-menu.el (buffers-tab-items): Use the label.
* bytecomp.el (byte-compile-log-1):
Don't fire up the regexp engine just to look for a newline.
* cus-edit.el (get):
Ditto.
* cus-edit.el (custom-variable-value-create):
Ditto, but for a colon.
* descr-text.el (describe-text-sexp):
Ditto.
* descr-text.el (describe-char-unicode-data):
Use #'split-string-by-char given that we're just looking for a
semicolon.
* descr-text.el (describe-char):
Don't fire up the regexp engine just to look for a newline.
* disass.el (disassemble-internal):
Ditto.
* files.el (file-name-sans-extension):
Implement this using #'position.
* files.el (file-name-extension):
Correct this function's docstring, implement it in terms of
#'position.
* files.el (insert-directory):
Don't fire up the regexp engine to split a string by space; don't
reverse the list of switches, this is actually a longstand bug as
far as I can see.
* gnuserv.el (gnuserv-process-filter):
Use #'position here, instead of consing inside #'split-string
needlessly.
* gtk-file-dialog.el (gtk-file-dialog-update-dropdown):
Use #'split-string-by-char here, don't fire up #'split-string for
directory-sep-char.
* gtk-font-menu.el (hack-font-truename):
Implement this more cheaply in terms of #'find,
#'split-string-by-char, #'equal, rather than #'string-match,
#'split-string, #'string-equal.
* hyper-apropos.el (hyper-apropos-grok-functions):
* hyper-apropos.el (hyper-apropos-grok-variables):
Look for a newline using #'position rather than #'string-match in
these functions.
* info.el (Info-insert-dir):
* info.el (Info-insert-file-contents):
* info.el (Info-follow-reference):
* info.el (Info-extract-menu-node-name):
* info.el (Info-menu):
Look for fixed strings using #'position or #'search as appropriate
in this file.
* ldap.el (ldap-decode-string):
* ldap.el (ldap-encode-string):
#'encode-coding-string, #'decode-coding-string are always
available, don't check if they're fboundp.
* ldap.el (ldap-decode-address):
* ldap.el (ldap-encode-address):
Use #'split-string-by-char in these functions.
* lisp-mnt.el (lm-creation-date):
* lisp-mnt.el (lm-last-modified-date):
Don't fire up the regexp engine just to look for spaces in this file.
* menubar-items.el (default-menubar):
Use (not (mismatch ...)) rather than #'string-match here, for
simple regexp.
Use (search "beta" ...) rather than (string-match "beta" ...)
* menubar-items.el (sort-buffers-menu-alphabetically):
* menubar-items.el (sort-buffers-menu-by-mode-then-alphabetically):
* menubar-items.el (group-buffers-menu-by-mode-then-alphabetically):
Don't fire up the regexp engine to check if a string starts with
a space or an asterisk.
Use the more fine-grained results of #'compare-strings; compare
case-insensitively for the buffer menu.
* menubar-items.el (list-all-buffers):
* menubar-items.el (tutorials-menu-filter):
Use #'equal rather than #'string-equal, which, in this context,
has the drawback of not having a bytecode, and no redeeming
features.
* minibuf.el:
* minibuf.el (un-substitute-in-file-name):
Use #'count, rather than counting the occurences of $ using the
regexp engine.
* minibuf.el (read-file-name-internal-1):
Don't fire up the regexp engine to search for ?=.
* mouse.el (mouse-eval-sexp):
Check for newline with #'find.
* msw-font-menu.el (mswindows-reset-device-font-menus):
Split a string by newline with #'split-string-by-char.
* mule/japanese.el:
* mule/japanese.el ("Japanese"):
Use #'search rather than #'string-match; canoncase before
comparing; fix a bug I had introduced where I had been making case
insensitive comparisons where the case mattered.
* mule/korea-util.el (default-korean-keyboard):
Look for ?3 using #'find, not #'string-march.
* mule/korea-util.el (quail-hangul-switch-hanja):
Search for a fixed string using #'search.
* mule/mule-cmds.el (set-locale-for-language-environment):
#'position, #'substitute rather than #'string-match,
#'replace-in-string.
* newcomment.el (comment-make-extra-lines):
Use #'search rather than #'string-match for a simple string.
* package-get.el (package-get-remote-filename):
Use #'position when looking for ?@
* process.el (setenv):
* process.el (read-envvar-name):
Use #'position when looking for ?=.
* replace.el (map-query-replace-regexp):
Use #'split-string-by-char instead of using an inline
implementation of it.
* select.el (select-convert-from-cf-text):
* select.el (select-convert-from-cf-unicodetext):
Use #'position rather than #'string-match in these functions.
* setup-paths.el (paths-emacs-data-root-p):
Use #'search when looking for simple string.
* sound.el (load-sound-file):
Use #'split-string-by-char rather than an inline reimplementation
of same.
* startup.el (splash-screen-window-body):
* startup.el (splash-screen-tty-body):
Search for simple strings using #'search.
* version.el (emacs-version):
Ditto.
* x-font-menu.el (hack-font-truename):
Implement this more cheaply in terms of #'find,
#'split-string-by-char, #'equal, rather than #'string-match,
#'split-string, #'string-equal.
* x-font-menu.el (x-reset-device-font-menus-core):
Use #'split-string-by-char here.
* x-init.el (x-initialize-keyboard):
Search for a simple string using #'search.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Wed, 01 Apr 2015 14:28:20 +0100 |
parents | 308d34e9f07d |
children |
rev | line source |
---|---|
428 | 1 /* Define X specific console, device, and frame object for XEmacs. |
2 Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. | |
3 Copyright (C) 1994, 1995 Board of Trustees, University of Illinois. | |
1318 | 4 Copyright (C) 1996, 2002, 2003 Ben Wing. |
428 | 5 |
6 This file is part of XEmacs. | |
7 | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5176
diff
changeset
|
8 XEmacs is free software: you can redistribute it and/or modify it |
428 | 9 under the terms of the GNU General Public License as published by the |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5176
diff
changeset
|
10 Free Software Foundation, either version 3 of the License, or (at your |
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5176
diff
changeset
|
11 option) any later version. |
428 | 12 |
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
5176
diff
changeset
|
19 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
428 | 20 |
21 /* Synched up with: Not in FSF. */ | |
22 | |
23 | |
24 /* Authorship: | |
25 | |
26 Ultimately based on FSF, then later on JWZ work for Lemacs. | |
27 Rewritten over time by Ben Wing and Chuck Thompson (original | |
28 multi-device work by Chuck Thompson). | |
29 */ | |
30 | |
440 | 31 #ifndef INCLUDED_console_x_h_ |
32 #define INCLUDED_console_x_h_ | |
428 | 33 |
34 #ifdef HAVE_X_WINDOWS | |
35 | |
36 #include "console.h" | |
2484 | 37 /* must come before Xutil.h, which is included indirectly from xintrinsic.h, |
38 to avoid breakage in keysym-parsing macros from X11R6, at least X.org as | |
39 of 2005-01-17, and probably XFree86 too from reports on c.e.x */ | |
40 #include <X11/keysym.h> | |
428 | 41 #include "xintrinsic.h" |
1346 | 42 #include "../lwlib/lwlib.h" |
428 | 43 |
44 #include <X11/cursorfont.h> | |
45 #include <X11/Xatom.h> | |
46 #include <X11/StringDefs.h> | |
47 | |
48 #ifdef HAVE_XPM | |
49 #include <X11/xpm.h> | |
50 #endif | |
51 | |
4916
a6c778975d7d
split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents:
4908
diff
changeset
|
52 #ifdef HAVE_XFT |
3094 | 53 /* shut up GCC */ |
54 #define face_index face_index_arg | |
55 #define glyph_index glyph_index_arg | |
56 #include <X11/Xft/Xft.h> | |
57 #undef glyph_index | |
58 #undef face_index | |
59 #endif | |
60 | |
428 | 61 /* R5 defines the XPointer type, but R4 doesn't. |
62 R4 also doesn't define a version number, but R5 does. */ | |
63 #if (XlibSpecificationRelease < 5) | |
64 # define XPointer char * | |
65 #endif | |
66 | |
1204 | 67 #ifdef __cplusplus |
68 #define X_CLASSFIELD c_class | |
69 #else | |
70 #define X_CLASSFIELD class | |
71 #endif | |
72 | |
428 | 73 /* Variables associated with the X display frame this emacs is using. */ |
74 extern XtAppContext Xt_app_con; | |
75 | |
76 extern Lisp_Object Vx_gc_pointer_shape; | |
77 extern Lisp_Object Vx_scrollbar_pointer_shape; | |
78 extern Lisp_Object Qx_error; | |
79 | |
80 /* Number of pixels below each line. */ | |
81 extern int x_interline_space; /* #### implement me */ | |
82 | |
458 | 83 extern Fixnum x_selection_timeout; |
428 | 84 |
85 struct frame *x_any_window_to_frame (struct device *d, Window); | |
86 struct frame *x_any_widget_or_parent_to_frame (struct device *d, | |
87 Widget widget); | |
88 struct frame *decode_x_frame (Lisp_Object); | |
89 struct frame *x_window_to_frame (struct device *d, Window); | |
90 struct device *get_device_from_display (Display *dpy); | |
91 struct device *decode_x_device (Lisp_Object); | |
92 | |
93 void x_handle_selection_notify (XSelectionEvent *event); | |
94 void x_handle_selection_request (XSelectionRequestEvent *event); | |
95 void x_handle_selection_clear (XSelectionClearEvent *event); | |
96 void x_handle_property_notify (XPropertyEvent *event); | |
97 | |
440 | 98 void Xatoms_of_select_x (struct device *d); |
5176
8b2f75cecb89
rename objects* (.c, .h and .el files) to fontcolor*
Ben Wing <ben@xemacs.org>
parents:
5016
diff
changeset
|
99 void Xatoms_of_fontcolor_x (struct device *d); |
428 | 100 |
101 void x_wm_set_shell_iconic_p (Widget shell, int iconic_p); | |
102 void x_wm_set_cell_size (Widget wmshell, int cw, int ch); | |
103 void x_wm_set_variable_size (Widget wmshell, int width, int height); | |
104 | |
4952
19a72041c5ed
Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents:
4528
diff
changeset
|
105 const Ascbyte *x_event_name (int event_type); |
1204 | 106 int check_if_pending_expose_event (struct device *d); |
428 | 107 int x_error_handler (Display *disp, XErrorEvent *event); |
108 void expect_x_error (Display *dpy); | |
109 int x_error_occurred_p (Display *dpy); | |
110 int signal_if_x_error (Display *dpy, int resumable_p); | |
111 int x_IO_error_handler (Display *disp); | |
112 | |
1346 | 113 widget_value *xmalloc_widget_value (void); |
114 | |
115 LWLIB_ID new_lwlib_id (void); | |
116 | |
117 void gcpro_popup_callbacks (LWLIB_ID id); | |
118 void ungcpro_popup_callbacks (LWLIB_ID id); | |
119 int popup_handled_p (LWLIB_ID id); | |
120 void free_popup_widget_value_tree (widget_value *wv); | |
121 void popup_selection_callback (Widget widget, LWLIB_ID ignored_id, | |
122 XtPointer client_data); | |
123 Extbyte *add_accel_and_to_external (Lisp_Object string); | |
124 int button_item_to_widget_value (Lisp_Object gui_object_instance, | |
125 Lisp_Object gui_item, widget_value *wv, | |
126 int allow_text_field_p, int no_keys_p, | |
127 int menu_entry_p, int accel_p); | |
128 widget_value * gui_items_to_widget_values (Lisp_Object gui_object_instance, | |
129 Lisp_Object items, int accel_p); | |
130 Extbyte *menu_separator_style_and_to_external (const Ibyte *s); | |
131 Lisp_Object widget_value_unwind (Lisp_Object closure); | |
132 | |
428 | 133 void x_output_string (struct window *w, struct display_line *dl, |
867 | 134 Ichar_dynarr *buf, int xpos, int xoffset, |
428 | 135 int start_pixpos, int width, face_index findex, |
136 int cursor, int cursor_start, int cursor_width, | |
137 int cursor_height); | |
138 void x_generate_shadow_pixels (struct frame *f, | |
139 unsigned long *top_shadow, | |
140 unsigned long *bottom_shadow, | |
141 unsigned long background, | |
142 unsigned long core_background); | |
143 | |
144 int x_initialize_frame_menubar (struct frame *f); | |
145 void x_init_modifier_mapping (struct device *d); | |
5016
2ade80e8c640
enable more warnings and fix them
Ben Wing <ben@xemacs.org>
parents:
4969
diff
changeset
|
146 void x_has_keysym (KeySym, Lisp_Object, int); |
428 | 147 |
593 | 148 int x_frame_window_state (struct frame *f); |
149 | |
428 | 150 #define X_ERROR_OCCURRED(dpy, body) \ |
151 (expect_x_error (dpy), body, x_error_occurred_p (dpy)) | |
152 | |
153 #define HANDLING_X_ERROR(dpy, body) \ | |
154 (expect_x_error (dpy), body, signal_if_x_error (dpy, 0)) | |
155 | |
156 void Initialize_Locale (void); | |
157 | |
158 #ifdef HAVE_XIM | |
159 | |
160 /* X Input Method `methods' */ | |
161 void XIM_init_device (struct device *d); | |
162 void XIM_init_frame (struct frame *f); | |
163 void XIM_SetSpotLocation (struct frame *f, int x, int y); | |
164 void XIM_SetGeometry (struct frame *f); | |
165 void XIM_focus_event (struct frame *f, int in_p); | |
166 | |
167 #ifdef XIM_XLIB | |
168 /* XtTypeConverter */ | |
169 Boolean EmacsXtCvtStringToXIMStyles ( | |
170 Display *dpy, | |
171 XrmValuePtr args, | |
172 Cardinal *num_args, | |
173 XrmValuePtr from, | |
174 XrmValuePtr to_in_out, | |
175 XtPointer *converter_data); | |
176 | |
177 /* XtDestructor */ | |
178 void EmacsFreeXIMStyles ( | |
179 XtAppContext app, | |
180 XrmValuePtr to, | |
181 XtPointer converter_data, | |
182 XrmValuePtr args, | |
183 Cardinal *num_args); | |
184 | |
185 #ifdef DEBUG_XEMACS | |
186 void describe_Window (Window win); | |
187 void describe_XFontSet (XFontSet font_set); | |
188 void describe_XIM (XIM im); | |
189 void describe_XIMStyle (XIMStyle style); | |
190 void describe_XIMStyles (XIMStyles *styles); | |
191 void describe_XIC (XIC ic); | |
192 void describe_event_mask (unsigned long mask); | |
4528
726060ee587c
First draft of g++ 4.3 warning removal patch. Builds. *Needs ChangeLogs.*
Stephen J. Turnbull <stephen@xemacs.org>
parents:
4522
diff
changeset
|
193 void describe_XRectangle (const char *name, XRectangle *rect); |
428 | 194 void describe_Status (Status status); |
195 #endif /* DEBUG_XEMACS */ | |
196 #endif /* XIM_XLIB */ | |
197 #endif /* HAVE_XIM */ | |
198 | |
771 | 199 extern Lisp_Object Qxintl; |
200 | |
428 | 201 extern int in_resource_setting; |
202 extern int in_specifier_change_function; | |
203 | |
204 extern Lisp_Object Vx_initial_argv_list; /* #### ugh! */ | |
205 | |
206 #endif /* HAVE_X_WINDOWS */ | |
440 | 207 |
208 #endif /* INCLUDED_console_x_h_ */ |