Mercurial > emacs
annotate src/w32reg.c @ 106984:61edd42cf483
merge
author | Mark A. Hershberger <mhershberger@intrahealth.org> |
---|---|
date | Mon, 25 Jan 2010 00:03:35 -0500 |
parents | 1d1d5d9bd884 |
children | e27859da5624 376148b31b5e |
rev | line source |
---|---|
13434 | 1 /* Emulate the X Resource Manager through the registry. |
75227
e90d04cd455a
Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents:
68651
diff
changeset
|
2 Copyright (C) 1990, 1993, 1994, 2001, 2002, 2003, 2004, |
106815 | 3 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
13434 | 4 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13434
diff
changeset
|
5 This file is part of GNU Emacs. |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13434
diff
changeset
|
6 |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
7 GNU Emacs is free software: you can redistribute it and/or modify |
13434 | 8 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
10 (at your option) any later version. |
13434 | 11 |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13434
diff
changeset
|
12 GNU Emacs is distributed in the hope that it will be useful, |
13434 | 13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
13434 | 19 |
20 /* Written by Kevin Gallo */ | |
21 | |
22 #include <config.h> | |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105069
diff
changeset
|
23 #include <setjmp.h> |
13434 | 24 #include "lisp.h" |
25 #include "w32term.h" | |
26 #include "blockinput.h" | |
27 | |
28 #include <stdio.h> | |
29 #include <string.h> | |
30 | |
15149
685510b93c83
(REG_ROOT): Remove trailing backslash.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
31 #define REG_ROOT "SOFTWARE\\GNU\\Emacs" |
13434 | 32 |
51501
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
33 /* Default system colors from the Display Control Panel settings. */ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
34 #define SYSTEM_DEFAULT_RESOURCES \ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
35 "emacs.foreground:SystemWindowText\0" \ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
36 "emacs.background:SystemWindow\0" \ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
37 "emacs.tooltip.attributeForeground:SystemInfoText\0" \ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
38 "emacs.tooltip.attributeBackground:SystemInfoWindow\0" \ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
39 "emacs.tool-bar.attributeForeground:SystemButtonText\0" \ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
40 "emacs.tool-bar.attributeBackground:SystemButtonFace\0" \ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
41 "emacs.menu.attributeForeground:SystemMenuText\0" \ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
42 "emacs.menu.attributeBackground:SystemMenu\0" \ |
78609
7cabb4564b1b
(SYSTEM_DEFAULT_RESOURCES): Add missing NULL terminator.
Jason Rumney <jasonr@gnu.org>
parents:
78260
diff
changeset
|
43 "emacs.scroll-bar.attributeForeground:SystemScrollbar\0" |
51501
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
44 |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
45 /* Other possibilities for default faces: |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
46 |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
47 region: Could use SystemHilight, but interferes with our ability to |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
48 see most syntax highlighting through the region face. |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
49 |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
50 modeline: Could use System(In)ActiveTitle, gradient versions (not |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
51 supported on 95 and NT), but modeline is more like a status bar |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
52 really (which don't appear to be configurable in Windows). |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
53 |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
54 highlight: Could use SystemHotTrackingColor, but it is not supported |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
55 on Windows 95 or NT, and other apps only seem to use it for menus |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
56 anyway. |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
57 |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
58 */ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
59 |
50040
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
60 static char * |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
61 w32_get_rdb_resource (rdb, resource) |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
62 char *rdb; |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
63 char *resource; |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
64 { |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
65 char *value = rdb; |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
66 int len = strlen (resource); |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
67 |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
68 while (*value) |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
69 { |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
70 /* Comparison is case-insensitive because registry searches are too. */ |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
71 if ((strnicmp (value, resource, len) == 0) && (value[len] == ':')) |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
72 return xstrdup (&value[len + 1]); |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
73 |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
74 value = strchr (value, '\0') + 1; |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
75 } |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
76 |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
77 return NULL; |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
78 } |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
79 |
105069
4cbb223d0b1c
The --quick command line option now ignores X resources and Registry settings.
Juanma Barranquero <lekktu@gmail.com>
parents:
100951
diff
changeset
|
80 static LPBYTE |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15149
diff
changeset
|
81 w32_get_string_resource (name, class, dwexptype) |
13434 | 82 char *name, *class; |
83 DWORD dwexptype; | |
84 { | |
85 LPBYTE lpvalue = NULL; | |
86 HKEY hrootkey = NULL; | |
87 DWORD dwType; | |
88 DWORD cbData; | |
89 BOOL ok = FALSE; | |
24672
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
90 HKEY hive = HKEY_CURRENT_USER; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
24672
diff
changeset
|
91 |
24672
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
92 trykey: |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
93 |
13434 | 94 BLOCK_INPUT; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
24672
diff
changeset
|
95 |
24672
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
96 /* Check both the current user and the local machine to see if we have |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
97 any resources */ |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
98 |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
99 if (RegOpenKeyEx (hive, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS) |
13434 | 100 { |
101 char *keyname; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
24672
diff
changeset
|
102 |
13434 | 103 if (RegQueryValueEx (hrootkey, name, NULL, &dwType, NULL, &cbData) == ERROR_SUCCESS |
104 && dwType == dwexptype) | |
105 { | |
106 keyname = name; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
24672
diff
changeset
|
107 } |
13434 | 108 else if (RegQueryValueEx (hrootkey, class, NULL, &dwType, NULL, &cbData) == ERROR_SUCCESS |
109 && dwType == dwexptype) | |
110 { | |
111 keyname = class; | |
112 } | |
113 else | |
114 { | |
115 keyname = NULL; | |
116 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
24672
diff
changeset
|
117 |
13434 | 118 ok = (keyname |
119 && (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL | |
120 && RegQueryValueEx (hrootkey, keyname, NULL, NULL, lpvalue, &cbData) == ERROR_SUCCESS); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
24672
diff
changeset
|
121 |
13434 | 122 RegCloseKey (hrootkey); |
123 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
24672
diff
changeset
|
124 |
13434 | 125 UNBLOCK_INPUT; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
24672
diff
changeset
|
126 |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
24672
diff
changeset
|
127 if (!ok) |
13434 | 128 { |
24672
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
129 if (lpvalue) |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
130 { |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
131 xfree (lpvalue); |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
132 lpvalue = NULL; |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
133 } |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
134 if (hive == HKEY_CURRENT_USER) |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
135 { |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
136 hive = HKEY_LOCAL_MACHINE; |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
137 goto trykey; |
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
138 } |
51501
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
139 |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
140 /* Check if there are Windows specific defaults defined. */ |
b79b842995c2
(SYSTEM_DEFAULT_RESOURCES): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
50364
diff
changeset
|
141 return w32_get_rdb_resource (SYSTEM_DEFAULT_RESOURCES, name); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
24672
diff
changeset
|
142 } |
24672
8387918b52c6
(w32_get_string_resource): Check for name in current
Andrew Innes <andrewi@gnu.org>
parents:
16588
diff
changeset
|
143 return (lpvalue); |
13434 | 144 } |
145 | |
146 /* Retrieve the string resource specified by NAME with CLASS from | |
147 database RDB. */ | |
148 | |
149 char * | |
150 x_get_string_resource (rdb, name, class) | |
50364
fcf617f53ab1
(x_get_string_resource): Use XrmDatabase.
Kim F. Storm <storm@cua.dk>
parents:
50040
diff
changeset
|
151 XrmDatabase rdb; |
13434 | 152 char *name, *class; |
153 { | |
50040
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
154 if (rdb) |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
155 { |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
156 char *resource; |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
157 |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
158 if (resource = w32_get_rdb_resource (rdb, name)) |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
159 return resource; |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
160 if (resource = w32_get_rdb_resource (rdb, class)) |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
161 return resource; |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
162 } |
57e262ca5d0d
(w32_get_rdb_resource): New function.
Juanma Barranquero <lekktu@gmail.com>
parents:
49600
diff
changeset
|
163 |
105069
4cbb223d0b1c
The --quick command line option now ignores X resources and Registry settings.
Juanma Barranquero <lekktu@gmail.com>
parents:
100951
diff
changeset
|
164 if (inhibit_x_resources) |
4cbb223d0b1c
The --quick command line option now ignores X resources and Registry settings.
Juanma Barranquero <lekktu@gmail.com>
parents:
100951
diff
changeset
|
165 /* --quick was passed, so this is a no-op. */ |
4cbb223d0b1c
The --quick command line option now ignores X resources and Registry settings.
Juanma Barranquero <lekktu@gmail.com>
parents:
100951
diff
changeset
|
166 return NULL; |
4cbb223d0b1c
The --quick command line option now ignores X resources and Registry settings.
Juanma Barranquero <lekktu@gmail.com>
parents:
100951
diff
changeset
|
167 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15149
diff
changeset
|
168 return (w32_get_string_resource (name, class, REG_SZ)); |
13434 | 169 } |
52401 | 170 |
171 /* arch-tag: 755fce25-42d7-4acb-874f-2fb42336823d | |
172 (do not change this comment) */ |