/* Add entries to the GNU Emacs Program Manager folder.
- Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 1995, 2001-2012 Free Software Foundation, Inc.
This file is part of 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
{
- char *name;
- char *value;
+ const char *name;
+ const char *value;
}
env_vars[] =
{
};
BOOL
-add_registry (path)
- char *path;
+add_registry (const char *path)
{
HKEY hrootkey = NULL;
int i;
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
/* 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);
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,
}
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;
MB_OKCANCEL | MB_ICONQUESTION);
if (result != IDOK)
{
- fprintf (stderr, "Install cancelled\n");
+ fprintf (stderr, "Install canceled\n");
exit (1);
}
}
{
if (strlen (start_folder) < (MAX_PATH - 20))
{
- BOOL retval;
-
strcat (start_folder, "\\Gnu Emacs");
if (CreateDirectory (start_folder, NULL)
|| GetLastError () == ERROR_ALREADY_EXISTS)
/* Ensure there is enough room for "...\GNU Emacs\Emacs.lnk". */
if (strlen (start_folder) < (MAX_PATH - 20))
{
- BOOL retval;
-
strcat (start_folder, "\\Gnu Emacs");
if (CreateDirectory (start_folder, NULL)
|| GetLastError () == ERROR_ALREADY_EXISTS)
if (SUCCEEDED (IPersistFile_Save (lnk, unicode_path, TRUE)))
shortcuts_created = 1;
IPersistFile_Release (lnk);
-
+
}
}
- }
+ }
}
if (com_available)
return 0;
}
-
-/* arch-tag: f923609d-b781-4ef4-abce-ca0da29cbbf0
- (do not change this comment) */