summaryrefslogtreecommitdiff
path: root/nt/addpm.c
diff options
context:
space:
mode:
Diffstat (limited to 'nt/addpm.c')
-rw-r--r--nt/addpm.c43
1 files changed, 29 insertions, 14 deletions
diff --git a/nt/addpm.c b/nt/addpm.c
index f2bf00813be..8a5e1a435c9 100644
--- a/nt/addpm.c
+++ b/nt/addpm.c
@@ -62,11 +62,13 @@ DdeCallback (UINT uType, UINT uFmt, HCONV hconv,
#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
{
- char *name;
- char *value;
+ const char *name;
+ const char *value;
}
env_vars[] =
{
@@ -83,8 +85,7 @@ env_vars[] =
};
BOOL
-add_registry (path)
- char *path;
+add_registry (const char *path)
{
HKEY hrootkey = NULL;
int i;
@@ -112,7 +113,7 @@ add_registry (path)
emacs_path = (char *) alloca (len);
sprintf (emacs_path, "%s\\bin\\emacs.exe", path);
- RegSetValueEx (hrootkey, NULL, 0, REG_SZ, emacs_path, len);
+ 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
@@ -130,10 +131,26 @@ add_registry (path)
/* 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_SZ, dll_paths, len);
+ 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);
@@ -161,7 +178,7 @@ add_registry (path)
for (i = 0; i < (sizeof (env_vars) / sizeof (env_vars[0])); i++)
{
- char * value = env_vars[i].value ? env_vars[i].value : path;
+ const char * value = env_vars[i].value ? env_vars[i].value : path;
if (RegSetValueEx (hrootkey, env_vars[i].name,
0, REG_EXPAND_SZ,
@@ -175,16 +192,14 @@ add_registry (path)
}
int
-main (argc, argv)
- int argc;
- char *argv[];
+main (int argc, char *argv[])
{
char start_folder[MAX_PATH + 1];
int shortcuts_created = 0;
int com_available = 1;
char modname[MAX_PATH];
- char *prog_name;
- char *emacs_path;
+ const char *prog_name;
+ const char *emacs_path;
char *p;
int quiet = 0;
HRESULT result;
@@ -315,10 +330,10 @@ main (argc, argv)
if (SUCCEEDED (IPersistFile_Save (lnk, unicode_path, TRUE)))
shortcuts_created = 1;
IPersistFile_Release (lnk);
-
+
}
}
- }
+ }
}
if (com_available)