X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/114f9c96795aff3b51b9060d7c9c1b77debcc99a..9f6f48455f7d25e5cc2d50485d98ff3af43946a2:/nt/addpm.c diff --git a/nt/addpm.c b/nt/addpm.c index 9bdfafc2a3..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,8 +84,7 @@ env_vars[] = }; BOOL -add_registry (path) - char *path; +add_registry (const char *path) { HKEY hrootkey = NULL; int i; @@ -112,7 +112,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 +130,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 +177,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 +191,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; @@ -236,7 +250,7 @@ main (argc, argv) MB_OKCANCEL | MB_ICONQUESTION); if (result != IDOK) { - fprintf (stderr, "Install cancelled\n"); + fprintf (stderr, "Install canceled\n"); exit (1); } } @@ -260,8 +274,6 @@ main (argc, argv) { if (strlen (start_folder) < (MAX_PATH - 20)) { - BOOL retval; - strcat (start_folder, "\\Gnu Emacs"); if (CreateDirectory (start_folder, NULL) || GetLastError () == ERROR_ALREADY_EXISTS) @@ -293,8 +305,6 @@ main (argc, 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) @@ -315,10 +325,10 @@ main (argc, argv) if (SUCCEEDED (IPersistFile_Save (lnk, unicode_path, TRUE))) shortcuts_created = 1; IPersistFile_Release (lnk); - + } } - } + } } if (com_available) @@ -355,6 +365,3 @@ main (argc, argv) return 0; } - -/* arch-tag: f923609d-b781-4ef4-abce-ca0da29cbbf0 - (do not change this comment) */