Mercurial > emacs
annotate lwlib/xrdb-cpp.c @ 35926:d2997845573f
(hi-lock-mode): Toggling hi-lock-mode now affects all
buffers. When hi-lock turned on rather than only checking current
buffer for regexps, all buffers are checked. Moved activation of
font-lock to hi-lock-refontify. When font-lock turned off rather
than removing added highlighting just in current buffer, remove it
in all buffers. Changed edit menu text from "Automatic
Highlighting" to "Regexp Highlighting" Documentation for
highlighting phrases, minor documentation changes.
(hi-lock-set-file-patterns): Execute only if there are new or
existing file patterns.
(hi-lock-refontify): Assume font-lock-fontify-buffer will first
unfontify and, if a support mode is active, will not refontify the
whole buffer. If necessary, turn on font lock. (Removed
font-lock-unfontify and font-lock support-mode-specific calls,
such as lazy-lock-fontify-window.)
(hi-lock-find-patterns): Do not turn on hi-lock-mode even if
patterns are found. Not useful now since find-file-hook is removed
if hi-lock is off, but may be needed for per-buffer hi-lock
activation.
(hi-lock-face-phrase-buffer): New function. Also added related
menu item and keybinding.
(highlight-phrase): New alias, to hi-lock-face-phrase-buffer.
(hi-lock-process-phrase): New function.
(hi-lock-line-face-buffer): Doc fixes.
(hi-lock-face-buffer): Doc fixes.
(hi-lock-unface-buffer): Doc fixes.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Tue, 06 Feb 2001 15:43:37 +0000 |
parents | e0d966fb548f |
children |
rev | line source |
---|---|
25842 | 1 /* A general interface to the widgets of different toolkits. |
2 Copyright (C) 1992, 1993 Lucid, Inc. | |
3 | |
4 This file is part of the Lucid Widget Library. | |
5 | |
6 The Lucid Widget Library is free software; you can redistribute it and/or | |
7 modify it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 2, or (at your option) | |
9 any later version. | |
10 | |
11 The Lucid Widget Library is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GNU Emacs; see the file COPYING. If not, write to | |
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
19 Boston, MA 02111-1307, USA. */ | |
20 | |
21 /* This code reads a resource database file and filters it through cpp | |
22 with the same set of preprocessor defines that `xrdb' uses. | |
23 Call lwlib_xrdb_initialize(dpy) once, and then call the function | |
24 lwlib_GetFileDatabase() instead of XrmGetFileDatabase(), | |
25 and lwlib_CombineFileDatabase() instead of XrmCombineFileDatabase(). | |
26 */ | |
27 | |
28 #ifndef __STDC_EXTENDED__ | |
29 #define __STDC_EXTENDED__ | |
30 #endif | |
31 | |
26087
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25842
diff
changeset
|
32 #ifdef HAVE_CONFIG_H |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25842
diff
changeset
|
33 #include <config.h> |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25842
diff
changeset
|
34 #endif |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25842
diff
changeset
|
35 |
25842 | 36 #include <stdio.h> |
37 #include <ctype.h> | |
38 #include <X11/Xlib.h> | |
39 #include <X11/Xos.h> | |
40 #include <X11/Intrinsic.h> | |
41 #include <X11/Xmu/SysUtil.h> | |
42 #include <sys/stat.h> | |
43 | |
44 extern char *index (); | |
45 | |
46 static int | |
47 file_p (path) | |
48 char *path; | |
49 { | |
50 struct stat status; | |
51 | |
52 return (access (path, R_OK) == 0 /* exists and is readable */ | |
53 && stat (path, &status) == 0 /* get the status */ | |
54 && (status.st_mode & S_IFDIR) == 0); /* not a directory */ | |
55 } | |
56 | |
57 #ifndef CPP_PROGRAM | |
58 #define CPP_PROGRAM "/lib/cpp" | |
59 #endif | |
60 | |
61 static char cpp_string [BUFSIZ]; | |
62 static char *cpp_file = 0; | |
63 | |
64 #define Resolution(pixels, mm) ((((pixels) * 100000 / (mm)) + 50) / 100) | |
65 | |
66 void | |
67 lwlib_xrdb_initialize (display) | |
68 Display *display; | |
69 { | |
70 Screen *screen; | |
71 Visual *visual; | |
72 char server [255]; | |
73 char *colon, *s; | |
74 | |
75 #define Push(str) \ | |
76 (strncpy (s, str, sizeof(str)), s += (sizeof(str)-1)) | |
77 | |
78 #define Print(str, thing) \ | |
79 (sprintf (s, str, thing), s = index (s, 0)) | |
80 | |
81 s = cpp_string; | |
82 Push (CPP_PROGRAM); | |
83 | |
84 Push (" -DCLIENTHOST="); | |
85 XmuGetHostname (s, sizeof (cpp_string) - (s - cpp_string)); | |
86 s = index (s, 0); | |
87 Push (" -DSERVERHOST="); | |
88 strcpy (s, XDisplayName (DisplayString (display))); | |
89 colon = index (s, ':'); | |
90 if (colon == s) | |
91 { | |
92 XmuGetHostname (s, sizeof (cpp_string) - (s - cpp_string)); | |
93 s = index (s, 0); | |
94 } | |
95 else if (colon) | |
96 s = colon; | |
97 else | |
98 s = index (s, 0); | |
99 | |
100 Print (" -DVERSION=%d", ProtocolVersion(display)); | |
101 Print (" -DREVISION=%d", ProtocolRevision(display)); | |
102 Print (" -DVENDOR=\"%s\"", ServerVendor(display)); | |
103 Print (" -DRELEASE=%d", VendorRelease(display)); | |
104 screen = DefaultScreenOfDisplay(display); | |
105 visual = DefaultVisualOfScreen(screen); | |
106 Print (" -DWIDTH=%d", screen->width); | |
107 Print (" -DHEIGHT=%d", screen->height); | |
108 Print (" -DX_RESOLUTION=%d", Resolution(screen->width,screen->mwidth)); | |
109 Print (" -DY_RESOLUTION=%d", Resolution(screen->height,screen->mheight)); | |
110 Print (" -DPLANES=%d", DisplayPlanes(display, DefaultScreen(display))); | |
111 Print (" -DBITS_PER_RGB=%d", visual->bits_per_rgb); | |
112 switch(visual->class) { | |
113 case StaticGray: Print (" -DCLASS=%s", "StaticGray"); break; | |
114 case GrayScale: Print (" -DCLASS=%s", "GrayScale"); break; | |
115 case StaticColor: Print (" -DCLASS=%s", "StaticColor"); | |
116 Print (" -DCOLOR", 0); break; | |
117 case PseudoColor: Print (" -DCLASS=%s", "PseudoColor"); | |
118 Print (" -DCOLOR", 0); break; | |
119 case TrueColor: Print (" -DCLASS=%s", "TrueColor"); | |
120 Print (" -DCOLOR", 0); break; | |
121 case DirectColor: Print (" -DCLASS=%s", "DirectColor"); | |
122 Print (" -DCOLOR", 0); break; | |
123 default: | |
124 fprintf (stderr, "unexpected visual class=%d\n", visual->class); | |
125 exit (-1); | |
126 } | |
127 *s++ = ' '; | |
128 *s = 0; | |
129 cpp_file = s; | |
130 } | |
131 | |
132 XrmDatabase | |
133 lwlib_GetFileDatabase (path) | |
134 char *path; | |
135 { | |
136 XrmDatabase db = 0; | |
137 char line [BUFSIZ]; | |
138 char *s; | |
139 FILE *file; | |
140 | |
141 if (! file_p (path)) | |
142 return 0; | |
143 | |
144 strcpy (cpp_file, path); | |
145 if (! (file = popen (cpp_string, "r"))) | |
146 { | |
147 fprintf (stderr, | |
148 "couldn't execute %s; resource file %s file not munged.\n", | |
149 CPP_PROGRAM, path); | |
150 return XrmGetFileDatabase (path); | |
151 } | |
152 while (s = fgets (line, sizeof (line), file)) | |
153 { | |
154 char ch, *tail; | |
155 if (*s == '!') continue; | |
156 for (; ((ch = *s) != '\n') && isspace(ch); s++); | |
157 if ((ch == '\0') || (ch == '\n') || (ch == '#')) continue; | |
158 tail = s + strlen (s); | |
159 if (tail - s < 3) continue; /* this would be syntactically incorrect */ | |
160 while (*(tail-1) == '\n' && /* handle \ at end of line */ | |
161 *(tail-2) == '\\') | |
162 { | |
163 if (! fgets (tail, sizeof (line) - (tail - line), file)) | |
164 continue; | |
165 tail += strlen (tail); | |
166 } | |
167 XrmPutLineResource (&db, s); | |
168 } | |
169 pclose (file); | |
170 return db; | |
171 } | |
172 | |
173 #ifdef THIS_IS_X11R5 | |
174 | |
175 int | |
176 lwlib_CombineFileDatabase (path, target_db, override) | |
177 char *path; | |
178 XrmDatabase *target_db; | |
179 Bool override; | |
180 { | |
181 XrmDatabase source_db = lwlib_GetFileDatabase (path); | |
182 if (! source_db) | |
183 return (! file_p (path)); | |
184 XrmCombineDatabase (source_db, target_db, override); | |
185 return 1; | |
186 } | |
187 | |
188 #endif /* r5 */ |