X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/7c3320d8b9d3beaf952b20cfe1843181c1c7af65..acaf905b1130aae80fa59d2c861ffd4c8eb75486:/nt/addpm.c diff --git a/nt/addpm.c b/nt/addpm.c index 20b289f676..361726b10e 100644 --- a/nt/addpm.c +++ b/nt/addpm.c @@ -1,6 +1,5 @@ /* 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. @@ -62,11 +61,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,7 +84,7 @@ env_vars[] = }; BOOL -add_registry (char *path) +add_registry (const char *path) { HKEY hrootkey = NULL; int i; @@ -111,7 +112,7 @@ add_registry (char *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 @@ -129,10 +130,26 @@ add_registry (char *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); @@ -160,7 +177,7 @@ add_registry (char *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, @@ -180,8 +197,8 @@ main (int argc, char *argv[]) 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; @@ -233,7 +250,7 @@ main (int argc, char *argv[]) MB_OKCANCEL | MB_ICONQUESTION); if (result != IDOK) { - fprintf (stderr, "Install cancelled\n"); + fprintf (stderr, "Install canceled\n"); exit (1); } } @@ -257,8 +274,6 @@ main (int argc, char *argv[]) { if (strlen (start_folder) < (MAX_PATH - 20)) { - BOOL retval; - strcat (start_folder, "\\Gnu Emacs"); if (CreateDirectory (start_folder, NULL) || GetLastError () == ERROR_ALREADY_EXISTS) @@ -290,8 +305,6 @@ main (int argc, char *argv[]) /* 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) @@ -352,6 +365,3 @@ main (int argc, char *argv[]) return 0; } - -/* arch-tag: f923609d-b781-4ef4-abce-ca0da29cbbf0 - (do not change this comment) */