/* Add entries to the GNU Emacs Program Manager folder.
- Copyright (C) 1995, 2001-2015 Free Software Foundation, Inc.
+ Copyright (C) 1995, 2001-2016 Free Software Foundation, Inc.
This file is part of GNU Emacs.
}
#define DdeCommand(str) \
- DdeClientTransaction (str, strlen (str)+1, conversation, (HSZ)NULL, \
+ DdeClientTransaction ((LPBYTE)str, strlen (str)+1, conversation, (HSZ)NULL, \
CF_TEXT, XTYP_EXECUTE, 30000, NULL)
#define REG_ROOT "SOFTWARE\\GNU\\Emacs"
-#define REG_GTK "SOFTWARE\\GTK\\2.0"
#define REG_APP_PATH \
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\emacs.exe"
-#define REG_RUNEMACS_PATH \
- "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\runemacs.exe"
static struct entry
{
#endif
};
-BOOL
+void
add_registry (const char *path)
{
HKEY hrootkey = NULL;
int i;
- BOOL ok = TRUE;
- DWORD size;
/* Record the location of Emacs to the App Paths key if we have
sufficient permissions to do so. This helps Windows find emacs quickly
affect the general operation of other installations of Emacs, and we
are blindly overwriting the Start Menu entries already.
*/
- if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, REG_APP_PATH, 0, "",
+ if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, REG_APP_PATH, 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL,
&hrootkey, NULL) == ERROR_SUCCESS)
{
int len;
char *emacs_path;
- HKEY gtk_key = NULL;
len = strlen (path) + 15; /* \bin\emacs.exe + terminator. */
emacs_path = (char *) alloca (len);
sprintf (emacs_path, "%s\\bin\\emacs.exe", path);
RegSetValueEx (hrootkey, NULL, 0, REG_EXPAND_SZ, emacs_path, len);
-
- /* Look for a GTK installation. If found, add it to the library search
- path for Emacs so that the image libraries it provides are available
- to Emacs regardless of whether it is in the path or not. */
- if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_GTK, REG_OPTION_NON_VOLATILE,
- KEY_READ, >k_key) == ERROR_SUCCESS)
- {
- if (RegQueryValueEx (gtk_key, "DllPath", NULL, NULL,
- NULL, &size) == ERROR_SUCCESS)
- {
- char *gtk_path = (char *) alloca (size);
- if (RegQueryValueEx (gtk_key, "DllPath", NULL, NULL,
- gtk_path, &size) == ERROR_SUCCESS)
- {
- /* Make sure the emacs bin directory continues to be searched
- first by including it as well. */
- char *dll_paths;
- HKEY runemacs_key = NULL;
- len = strlen (path) + 5 + size;
- dll_paths = (char *) alloca (size + strlen (path) + 1);
- sprintf (dll_paths, "%s\\bin;%s", path, gtk_path);
- RegSetValueEx (hrootkey, "Path", 0, REG_EXPAND_SZ,
- dll_paths, len);
-
- /* Set the same path for runemacs.exe, as the Explorer shell
- looks this up, so the above does not take effect when
- emacs.exe is spawned from runemacs.exe. */
- if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, REG_RUNEMACS_PATH,
- 0, "", REG_OPTION_NON_VOLATILE,
- KEY_WRITE, NULL, &runemacs_key, NULL)
- == ERROR_SUCCESS)
- {
- RegSetValueEx (runemacs_key, "Path", 0, REG_EXPAND_SZ,
- dll_paths, len);
-
- RegCloseKey (runemacs_key);
- }
- }
- }
- RegCloseKey (gtk_key);
- }
RegCloseKey (hrootkey);
}
/* Check both the current user and the local machine to see if we
have any resources. */
- if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT,
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE, &hrootkey) != ERROR_SUCCESS
- && RegOpenKeyEx (HKEY_CURRENT_USER, REG_ROOT,
- REG_OPTION_NON_VOLATILE,
- KEY_WRITE, &hrootkey) != ERROR_SUCCESS)
- {
- return FALSE;
- }
+ if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT, 0,
+ KEY_WRITE | KEY_QUERY_VALUE, &hrootkey) != ERROR_SUCCESS
+ && RegOpenKeyEx (HKEY_CURRENT_USER, REG_ROOT, 0,
+ KEY_WRITE | KEY_QUERY_VALUE, &hrootkey) != ERROR_SUCCESS)
+ return;
for (i = 0; i < (sizeof (env_vars) / sizeof (env_vars[0])); i++)
{
const char * value = env_vars[i].value ? env_vars[i].value : path;
- if (RegSetValueEx (hrootkey, env_vars[i].name,
- 0, REG_EXPAND_SZ,
- value, lstrlen (value) + 1) != ERROR_SUCCESS)
- ok = FALSE;
+ /* Replace only those settings that already exist. */
+ if (RegQueryValueEx (hrootkey, env_vars[i].name, NULL,
+ NULL, NULL, NULL) == ERROR_SUCCESS)
+ RegSetValueEx (hrootkey, env_vars[i].name, 0, REG_EXPAND_SZ,
+ value, lstrlen (value) + 1);
}
RegCloseKey (hrootkey);
-
- return (ok);
}
int