annotate nt/addpm.c @ 101458:36abe982e7cd

2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-as-html): Turn \par into a paragraph. * org.el (org-agenda-tags-todo-honor-ignore-options): Declare variable. * org-table.el (org-table-insert-hline): Fix typo in fuction call to `backward-char'. * org-exp.el (org-export-as-html): Remove the initial space from colon examples. * org.el (org-scan-tags): Call `org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item'. * org-agenda.el (org-agenda-todo-list, org-agenda-match-view): New customization groups. (org-agenda-tags-todo-honor-ignore-options): New option. (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item): New function. (org-agenda-get-todos): Use `org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item'. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-format-source-code-or-example): Escape HTML characters also in examples that anre not treated with htmlize. Also, just switch to EXAMPLE processing if we do not have a good version of htmlize. * org-rmail.el: Fix copyright notice. * org.el (org-activate-footnote-links): Improve footnote link highlighting. * org-footnote.el (org-footnote-normalize): Fix finding the end of a footnote definition at the end of the file. * org-table.el (org-table-get-specials): Add an imagined hline at the end of the table. This can be useful for references that want to go to the end of the table. Also fix bug when computing last row constants, in tables that do not start right at the right margin. (org-table-eval-formula): Match and replace remove references. (org-table-formula-substitute-names): Make sure that names inside a "remote" call are left alone, the will be replaced later when the remote call is handled. (org-table-convert-refs-to-rc): Do not convert things that might look like a reference, but are really part of an ID or namei n a remote reference. (org-table-get-remote-range): New function. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-faces.el (org-clock-overlay): Fix bug in face definition. * org-clock.el (org-clock-put-overlay): Use new face instead of `secondary-selection'. * org-faces.el (org-clock-overlay): New face. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-get-current-options): Include the option for publishing time stamps. * org.el (org-toggle-heading): Renamed from `org-toggel-region-headings'. No longer needs a region defined, but will use it if there is one. (org-ctrl-c-star): Simplified, relying more on the internal workings of `org-toggle-heading'. (org-toggle-item): Renamed from `org-toggle-region-items'. No longer needs a region defined, but will use it if there is one. (org-ctrl-c-minus): Simplified, relying more on the inernal workings of `org-toggle-item'. * org-export-latex.el (org-export-latex-preprocess): Fix bug in environment detection. Also, do real changes only in unprotected places. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-export-latex.el (org-export-latex-quotation-marks): Use `org-if-unprotected-1'. (org-export-latex-set-initial-vars): Check for class definition in property. * org-macs.el (org-if-unprotected-1): New macro. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-compat.el (org-count-lines): New function. * org-exp.el (org-export-format-source-code-or-example): Handle switches related to text areas. * org.el (org-activate-footnote-links): Don't allow match inside a link. * org-footnote.el (org-footnote-re): Don't allow match inside a link. * org-export-latex.el (org-export-latex-links): Keep a relative path relative also after export. * org-exp.el (org-export-html-scripts): Fix HTML snippet. * org.el (org-make-tags-matcher): Never use IDO for completing the tags matcher match string. (org-completing-read): Also remove the special biding for "?". * org-attach.el (org-attach-allow-inheritance): New option. (org-attach-inherited): New variable. (org-attach-dir): Handle properties related to the attachment directory. (org-attach-check-absolute-path): New function. (org-attach-set-directory, org-attach-set-inherit): New commands. (org-attach): Accommodate the new commands in the dispatcher. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-compat.el (org-fit-window-to-buffer): Fix bug with using `window-full-width-p'. * org-exp.el (org-export-as-html): Only check for images files that really can be inlined * org.el (org-image-file-name-regexp, org-file-image-p): Allow the list of extensions to be a parameter. * org-exp.el (org-export-html-inline-image-extensions): New variable. * org-agenda.el (org-prepare-agenda): Use `org-agenda-block-separator'. (org-agenda-block-separator): New option. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-export-latex.el (org-export-latex-tables): Call `org-table-clean-before-export' with the new optional argument. * org-exp.el (org-table-clean-before-export): New optional parameter MAYBE-QUOTED, allows for quoted characters like \# in first column. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-plot.el (org-plot/gnuplot): Fix text-ind parameter for histograms. * org-colview.el (org-colview-construct-allowed-dates): Better error catching when a date/time property does not have allowed values defined. * org-colview-xemacs.el (org-colview-construct-allowed-dates): Better error catching when a date/time property does not have allowed values defined. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-map-entries): Restore point and restriction after `org-map-entries'. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-time=, org-time<, org-time<=, org-time>) (org-time>=, org-time<>): Make sure both values are dates. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-archive.el (org-extract-archive-heading): Allow %s for file name also in achive location heading. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-archive.el (org-add-archive-files): Uniquify the list before returning it. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-compat.el (org-fit-window-to-buffer): Use `window-full-width-p'. * org-export-latex.el (org-export-latex-fixed-width): Enforce the space after the colon in short examples. * org-exp.el (org-export-protect-colon-examples): Rewritten, to enforce a space after the colon. However, we also allow lines that are *only* a colon. (org-export-as-html): Enforce the space after the colon in short examples. (org-export-preprocess-string): Do the colon example protection earlier. (org-export-remove-timestamps): Do not check for protection at the end of the line. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-format-latex-options): Add new matcher for single letters between dollars. (org-get-header): Function removed. (org-heading-components): New function. * org-exp.el (org-export-define-heading-targets): Record ID's also as alternative targets. (org-export-as-html): Interpret "id:" links to other files by preserving the relative path. * org-jsinfo.el (org-infojs-handle-options): Catch the case if v is nil. * org-exp.el (org-export-normalize-links): Protect the main link, to avoid special character processing. * org-export-latex.el (org-export-latex-special-keyword-regexp): New variable. (org-export-latex-special-string-regexps): Variable removed. (org-export-latex-keywords): Use the new regexp. * org-exp.el (org-export-handle-include-files): Fetch switches and put them into the BEGIN statement. * org-timer.el (org-timer-mode-line-string): New variable. * org-clock.el (org-clock-mode-line-map): Renamed from `org-clock-mode-map'. (org-clock-mode-line-timer): Renamed from `org-mode-line-timer'. (org-clock-update-mode-line): Renamed from `org-update-mode-line'. (org-clock-put-overlay): Renamed from `org-put-clock-overlay'. (org-clock-remove-overlays): Renamed from `org-remove-clock-overlays'. * org-timer.el (org-timer-pause-or-continue): Implement stopping and mode line display. (org-timer-stop): New command. (org-timer-seconds): Return correct time when timer is paused. (org-timer-mode-line-timer): New variable. (org-timer-set-mode-line, org-timer-update-mode-line): New functions. * org.el (org-insert-heading): Handle new value `auto' for `org-blank-before-new-entry'. (org-org-menu): Add new items for timer functions. * org-list.el (org-insert-item): Handle new value `auto' for `org-blank-before-new-entry'. * org.el (org-blank-before-new-entry): New value `auto', made default. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-normalize-links): If the link is also used as the description, protect the description. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-closest-date): Fix bug with yearly repeats, in combination with preference of the past as it is used for deadline and scheduling search. * org-exp.el (org-html-handle-time-stamps): No longer check for the `org-export-with-timestamps' option, because the preprocesser has taken care of this already. * org.el (org-entry-properties): Catch the case when this is called in a non-org-mode file. * org-export-latex.el (org-export-latex-remove-from-headlines): Variable made obsolete, also LaTeX export now uses the standard variables. (org-export-as-latex): Add the timestamps parameter to the preprocessor parameter list. (org-export-latex-content): Export the remaining keywords without considering to remove them. (org-export-latex-keywords-maybe): Make the REMOVE-LIST optional. Use bold font instead of tt font for the keywords. (org-export-latex-fontify-headline): Format headlines, assuming that all keywords still present should be published. (org-export-latex-keywords): Remove argument TIMESTAMPS and just publish what ever remains of the time stamps. (org-export-latex-list-parameters): New option. (org-export-latex-lists): Pass additional parameters to the list converter. * org-exp.el (org-export-preprocess-string): Remove clock lines and timestamps already in the preprocesor. (org-export-remove-timestamps, org-export-remove-clock-lines): New functions. (org-export-as-ascii, org-export-as-html): Add the timestamps parameter to the preprocessor parameter list. * org-list.el (org-list-parse-list): Parse for checkboxes. (org-list-to-generic): Introduce and handle new parameters :cbon and :cboff. (org-list-to-latex, org-list-to-html, org-list-to-texinfo): Add optional parameter PARAMS. * org-export-latex.el (org-export-latex-special-chars): Fix problems with interpreting dollar signs. (org-inside-latex-math-p): New function. (org-export-latex-preprocess): Protect all the math fragments. * org.el (org-latex-regexps): Allow a dash after a dollar. * org-w3m.el (org-w3m-copy-for-org-mode): Always deactivate the mark after copying. * org-agenda.el (org-run-agenda-series): Have series options set when finalizing the agenda. * org-exp.el (org-export-format-source-code-or-example): Protect the converted examples. * org.el (org-set-regexps-and-options): Fix the regexp `org-complex-heading-regexp'. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-edit-src-get-label-format): New function. (org-coderef-label-format): New option. (org-edit-src-code, org-edit-src-find-region-and-lang): Parse for a label format specification and make sure it is used in the edit buffer. (org-edit-src-get-label-format): New function. (org-store-link): Handle new coderef formats. (org-link-search): Handle new coderef formats. * org-footnote.el (org-footnote-create-definition) (org-footnote-goto-local-insertion-point): Make footnote insertion work correctly when the "Footnotes" headline is the last line in the buffer. * org.el (org-goto-marker-or-bmk): Expose context after jumping to the location. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-w3m.el (org-w3m): New customization group. (org-w3m-deactivate-mark): New option. (org-w3m-copy-for-org-mode): Deactivate region, unless the user option say not to. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org.el (org-set-font-lock-defaults): Trigger footnote fontification. (org-activate-footnote-links): New function. (org-activate-links): New entry `footnote'. * org-faces.el (org-footnote): New face. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-macs.el (org-re): Handle the [:word:] class. * org-exp.el (org-export-preprocess-string): Call `org-export-protect-colon-examples'. (org-export-protect-colon-examples): Renamed from `org-export-protect-examples', and scope limited to lines starting with a colon. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-exp.el (org-export-preprocess-string): Move the preprocess hook to after turning on Org-mode. (org-export-preprocess-after-include-files-hook) (org-export-preprocess-after-tree-selection-hook) (org-export-preprocess-before-backend-specifics-hook) (org-export-preprocess-final-hook): New hooks. (org-export-preprocess-string): Run the new hooks. * org.el (org-ctrl-c-minus): Fix indentation for new items. * org-footnote.el: New file. * org.el (org-footnote): Require footnote code. (org-startup-options): Add new footnote options. (org-mode-map): New keybindig for footnotes. (org-ctrl-c-ctrl-c): Add function at footnotes. (org-org-menu): New menu entries for footnotes. * org-export-latex.el (org-export-as-latex): Pass footnote variable to preprocessor. (org-export-latex-preprocess): Treat multiple references to a footnote. * org-exp.el (org-export-preprocess-string): Call `org-footnote-normalize'. (org-export-as-ascii, org-export-as-html): Pass footnote variable to preprocessor. (org-export-as-html): Treat multiple references to a footnote. 2009-01-25 Carsten Dominik <carsten.dominik@gmail.com> * org-export-latex.el (org-export-latex-links): Handle coderef links. * org.el (org-bracket-link-analytic-regexp++): New variable. (org-make-link-regexps): Initialize `org-bracket-link-analytic-regexp++'. (org-store-link): Implement special case in edit-src buffer. (org-insert-link): No use of ide to insert stored links. (org-link-search): Implement special case for coderefs. * org-exp.el (org-export-html-scripts): New constant. (org-export-html-style-default): Add a new style for highlighted code. (org-export-code-refs): New variable. (org-export-preprocess-string): Initialize `org-export-code-refs'. Call `org-export-replace-src-segments-and-examples' No longer call `org-export-protect-examples'. (org-export-target-internal-links): Take care of coderef targets. (org-export-last-code-line-counter-value): New variable. (org-export-replace-src-segments-and-examples): Renamed from `org-export-replace-src-segments', and modified. (org-export-format-source-code-or-example): Renamed from `org-export-format-source-code'. (org-export-number-lines): New function. (org-export-as-ascii, org-export-as-html): Handle coderef links.
author Carsten Dominik <dominik@science.uva.nl>
date Sun, 25 Jan 2009 15:49:43 +0000
parents 3f0ac2f6febc
children 1d1d5d9bd884
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1 /* Add entries to the GNU Emacs Program Manager folder.
94795
188974bfdea0 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92206
diff changeset
2 Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
100954
aeceb2460b39 Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 94795
diff changeset
3 2008, 2009 Free Software Foundation, Inc.
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
4
14185
aba3b91c8b3d Update FSF's ddress in preamble
Erik Naggum <erik@naggum.no>
parents: 13438
diff changeset
5 This file is part of GNU Emacs.
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
6
94795
188974bfdea0 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92206
diff changeset
7 GNU Emacs is free software: you can redistribute it and/or modify
14185
aba3b91c8b3d Update FSF's ddress in preamble
Erik Naggum <erik@naggum.no>
parents: 13438
diff changeset
8 it under the terms of the GNU General Public License as published by
94795
188974bfdea0 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92206
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
188974bfdea0 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92206
diff changeset
10 (at your option) any later version.
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
11
14185
aba3b91c8b3d Update FSF's ddress in preamble
Erik Naggum <erik@naggum.no>
parents: 13438
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
aba3b91c8b3d Update FSF's ddress in preamble
Erik Naggum <erik@naggum.no>
parents: 13438
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
aba3b91c8b3d Update FSF's ddress in preamble
Erik Naggum <erik@naggum.no>
parents: 13438
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
aba3b91c8b3d Update FSF's ddress in preamble
Erik Naggum <erik@naggum.no>
parents: 13438
diff changeset
15 GNU General Public License for more details.
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
16
14185
aba3b91c8b3d Update FSF's ddress in preamble
Erik Naggum <erik@naggum.no>
parents: 13438
diff changeset
17 You should have received a copy of the GNU General Public License
94795
188974bfdea0 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92206
diff changeset
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
19
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
20 /****************************************************************************
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
21 *
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
22 * Program: addpm (adds emacs to the Windows program manager)
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
23 *
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
24 * Usage:
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
25 * argv[1] = install path for emacs
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
26 *
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
27 * argv[2] used to be an optional argument for setting the icon.
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
28 * But now Emacs has a professional looking icon of its own.
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
29 * If users really want to change it, they can go into the settings of
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
30 * the shortcut that is created and do it there.
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
31 */
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
32
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
33 /* Use parts of shell API that were introduced by the merge of IE4
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
34 into the desktop shell. If Windows 95 or NT4 users do not have IE4
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
35 installed, then the DDE fallback for creating icons the Windows 3.1
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
36 progman way will be used instead, but that is prone to lockups
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
37 caused by other applications not servicing their message queues. */
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
38 #define _WIN32_IE 0x400
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
39 /* Request C Object macros for COM interfaces. */
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
40 #define COBJMACROS 1
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
41
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
42 #include <windows.h>
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
43 #include <shlobj.h>
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
44 #include <ddeml.h>
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
45 #include <stdlib.h>
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
46 #include <stdio.h>
92206
7bd66631686c Include malloc.h.
Juanma Barranquero <lekktu@gmail.com>
parents: 80106
diff changeset
47 #include <malloc.h>
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
48
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
49 HDDEDATA CALLBACK
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
50 DdeCallback (UINT uType, UINT uFmt, HCONV hconv,
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
51 HSZ hsz1, HSZ hsz2, HDDEDATA hdata,
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
52 DWORD dwData1, DWORD dwData2)
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
53 {
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
54 return ((HDDEDATA) NULL);
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
55 }
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
56
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
57 #define DdeCommand(str) \
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
58 DdeClientTransaction (str, strlen (str)+1, conversation, (HSZ)NULL, \
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
59 CF_TEXT, XTYP_EXECUTE, 30000, NULL)
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
60
15130
493eee829532 (REG_ROOT): Don't use a trailing backslash.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14185
diff changeset
61 #define REG_ROOT "SOFTWARE\\GNU\\Emacs"
80106
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
62 #define REG_GTK "SOFTWARE\\GTK\\2.0"
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
63 #define REG_APP_PATH \
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
64 "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\emacs.exe"
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
65
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
66 static struct entry
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
67 {
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
68 char *name;
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
69 char *value;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
70 }
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
71 env_vars[] =
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
72 {
15130
493eee829532 (REG_ROOT): Don't use a trailing backslash.
Geoff Voelker <voelker@cs.washington.edu>
parents: 14185
diff changeset
73 {"emacs_dir", NULL},
35424
36acbc3cb53e (env_vars): Add a version-independent site-lisp
Andrew Innes <andrewi@gnu.org>
parents: 31084
diff changeset
74 {"EMACSLOADPATH", "%emacs_dir%/site-lisp;%emacs_dir%/../site-lisp;%emacs_dir%/lisp;%emacs_dir%/leim"},
20011
f9429fb3dd05 addpm.c (env_vars): Fix misplaced % in SHELL entry.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19717
diff changeset
75 {"SHELL", "%emacs_dir%/bin/cmdproxy.exe"},
15322
eb3d8a25866a (env_vars): Use slashes, not backslashes.
Richard M. Stallman <rms@gnu.org>
parents: 15188
diff changeset
76 {"EMACSDATA", "%emacs_dir%/etc"},
eb3d8a25866a (env_vars): Use slashes, not backslashes.
Richard M. Stallman <rms@gnu.org>
parents: 15188
diff changeset
77 {"EMACSPATH", "%emacs_dir%/bin"},
19717
11f3ea181591 (env_vars): Put site-lisp before lisp in EMACSLOADPATH.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19396
diff changeset
78 /* We no longer set INFOPATH because Info-default-directory-list
11f3ea181591 (env_vars): Put site-lisp before lisp in EMACSLOADPATH.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19396
diff changeset
79 is then ignored. */
11f3ea181591 (env_vars): Put site-lisp before lisp in EMACSLOADPATH.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19396
diff changeset
80 /* {"INFOPATH", "%emacs_dir%/info"}, */
15322
eb3d8a25866a (env_vars): Use slashes, not backslashes.
Richard M. Stallman <rms@gnu.org>
parents: 15188
diff changeset
81 {"EMACSDOC", "%emacs_dir%/etc"},
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
82 {"TERM", "cmd"}
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
83 };
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
84
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
85 BOOL
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
86 add_registry (path)
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
87 char *path;
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
88 {
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
89 HKEY hrootkey = NULL;
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
90 int i;
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
91 BOOL ok = TRUE;
80106
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
92 DWORD size;
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
93
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
94 /* Record the location of Emacs to the App Paths key if we have
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
95 sufficient permissions to do so. This helps Windows find emacs quickly
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
96 if the user types emacs.exe in the "Run Program" dialog without having
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
97 emacs on their path. Some applications also use the same registry key
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
98 to discover the installation directory for programs they are looking for.
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
99 Multiple installations cannot be handled by this method, but it does not
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
100 affect the general operation of other installations of Emacs, and we
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
101 are blindly overwriting the Start Menu entries already.
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
102 */
92206
7bd66631686c Include malloc.h.
Juanma Barranquero <lekktu@gmail.com>
parents: 80106
diff changeset
103 if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, REG_APP_PATH, 0, "",
80106
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
104 REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL,
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
105 &hrootkey, NULL) == ERROR_SUCCESS)
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
106 {
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
107 int len;
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
108 char *emacs_path;
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
109 HKEY gtk_key = NULL;
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
110
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
111 len = strlen (path) + 15; /* \bin\emacs.exe + terminator. */
92206
7bd66631686c Include malloc.h.
Juanma Barranquero <lekktu@gmail.com>
parents: 80106
diff changeset
112 emacs_path = (char *) alloca (len);
80106
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
113 sprintf (emacs_path, "%s\\bin\\emacs.exe", path);
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
114
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
115 RegSetValueEx (hrootkey, NULL, 0, REG_SZ, emacs_path, len);
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
116
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
117 /* Look for a GTK installation. If found, add it to the library search
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
118 path for Emacs so that the image libraries it provides are available
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
119 to Emacs regardless of whether it is in the path or not. */
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
120 if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_GTK, REG_OPTION_NON_VOLATILE,
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
121 KEY_READ, &gtk_key) == ERROR_SUCCESS)
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
122 {
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
123 if (RegQueryValueEx (gtk_key, "DllPath", NULL, NULL,
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
124 NULL, &size) == ERROR_SUCCESS)
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
125 {
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
126 char *gtk_path = (char *) alloca (size);
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
127 if (RegQueryValueEx (gtk_key, "DllPath", NULL, NULL,
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
128 gtk_path, &size) == ERROR_SUCCESS)
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
129 {
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
130 /* Make sure the emacs bin directory continues to be searched
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
131 first by including it as well. */
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
132 char *dll_paths;
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
133 len = strlen (path) + 5 + size;
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
134 dll_paths = (char *) alloca (size + strlen (path) + 1);
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
135 sprintf (dll_paths, "%s\\bin;%s", path, gtk_path);
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
136 RegSetValueEx (hrootkey, "Path", 0, REG_SZ, dll_paths, len);
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
137 }
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
138 }
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
139 RegCloseKey (gtk_key);
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
140 }
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
141 RegCloseKey (hrootkey);
7bb8839f9001 (add_registry): Add an App Paths registry key.
Jason Rumney <jasonr@gnu.org>
parents: 79730
diff changeset
142 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
143
69449
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
144 /* Previous versions relied on registry settings, but we do not need
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
145 them any more. If registry settings are installed from a previous
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
146 version, replace them to ensure they are the current settings.
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
147 Otherwise, do nothing. */
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
148
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
149 /* Check both the current user and the local machine to see if we
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
150 have any resources. */
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
151
69449
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
152 if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT,
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
153 REG_OPTION_NON_VOLATILE,
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
154 KEY_WRITE, &hrootkey) != ERROR_SUCCESS
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
155 && RegOpenKeyEx (HKEY_CURRENT_USER, REG_ROOT,
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
156 REG_OPTION_NON_VOLATILE,
e2359be8b645 (add_registry): Don't change the registry unless keys
Jason Rumney <jasonr@gnu.org>
parents: 69446
diff changeset
157 KEY_WRITE, &hrootkey) != ERROR_SUCCESS)
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
158 {
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
159 return FALSE;
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
160 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
161
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
162 for (i = 0; i < (sizeof (env_vars) / sizeof (env_vars[0])); i++)
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
163 {
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
164 char * value = env_vars[i].value ? env_vars[i].value : path;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
165
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
166 if (RegSetValueEx (hrootkey, env_vars[i].name,
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
167 0, REG_EXPAND_SZ,
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
168 value, lstrlen (value) + 1) != ERROR_SUCCESS)
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
169 ok = FALSE;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
170 }
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
171
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
172 RegCloseKey (hrootkey);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
173
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
174 return (ok);
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
175 }
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
176
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
177 int
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
178 main (argc, argv)
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
179 int argc;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 45810
diff changeset
180 char *argv[];
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
181 {
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
182 char start_folder[MAX_PATH + 1];
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
183 int shortcuts_created = 0;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
184 int com_available = 1;
19396
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
185 char modname[MAX_PATH];
19717
11f3ea181591 (env_vars): Put site-lisp before lisp in EMACSLOADPATH.
Geoff Voelker <voelker@cs.washington.edu>
parents: 19396
diff changeset
186 char *prog_name;
19396
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
187 char *emacs_path;
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
188 char *p;
31084
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
189 int quiet = 0;
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
190 HRESULT result;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
191 IShellLinkA *shortcut;
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
192
19396
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
193 /* If no args specified, use our location to set emacs_path. */
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
194
69446
bffee52ee41d (main): Accept -q as alternative for /q.
Jason Rumney <jasonr@gnu.org>
parents: 68648
diff changeset
195 if (argc > 1
bffee52ee41d (main): Accept -q as alternative for /q.
Jason Rumney <jasonr@gnu.org>
parents: 68648
diff changeset
196 && (argv[1][0] == '/' || argv[1][0] == '-')
bffee52ee41d (main): Accept -q as alternative for /q.
Jason Rumney <jasonr@gnu.org>
parents: 68648
diff changeset
197 && argv[1][1] == 'q')
31084
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
198 {
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
199 quiet = 1;
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
200 --argc;
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
201 ++argv;
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
202 }
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
203
19396
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
204 if (argc > 1)
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
205 emacs_path = argv[1];
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
206 else
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
207 {
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
208 if (!GetModuleFileName (NULL, modname, MAX_PATH) ||
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
209 (p = strrchr (modname, '\\')) == NULL)
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
210 {
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
211 fprintf (stderr, "fatal error");
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
212 exit (1);
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
213 }
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
214 *p = 0;
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
215
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
216 /* Set emacs_path to emacs_dir if we are in "%emacs_dir%\bin". */
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
217 if ((p = strrchr (modname, '\\')) && stricmp (p, "\\bin") == 0)
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
218 {
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
219 *p = 0;
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
220 emacs_path = modname;
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
221 }
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
222 else
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
223 {
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
224 fprintf (stderr, "usage: addpm emacs_path\n");
19396
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
225 exit (1);
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
226 }
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
227
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
228 /* Tell user what we are going to do. */
31084
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
229 if (!quiet)
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
230 {
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
231 int result;
22796
903554be7bfc (main): Explicitly check result of message box for OK.
Geoff Voelker <voelker@cs.washington.edu>
parents: 20011
diff changeset
232
31084
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
233 char msg[ MAX_PATH ];
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
234 sprintf (msg, "Install Emacs at %s?\n", emacs_path);
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
235 result = MessageBox (NULL, msg, "Install Emacs",
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
236 MB_OKCANCEL | MB_ICONQUESTION);
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
237 if (result != IDOK)
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
238 {
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
239 fprintf (stderr, "Install cancelled\n");
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
240 exit (1);
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
241 }
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
242 }
19396
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
243 }
d0ffa428c6e3 (env_vars): Set SHELL to cmdproxy.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16828
diff changeset
244
31084
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
245 add_registry (emacs_path);
2f7db3489395 (main): Accept /q to mean install based on addpm's
Andrew Innes <andrewi@gnu.org>
parents: 26535
diff changeset
246 prog_name = "runemacs.exe";
13438
705eb8c3d935 (env_vars): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 12329
diff changeset
247
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
248 /* Try to install globally. */
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
249
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
250 if (!SUCCEEDED (CoInitialize (NULL))
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
251 || !SUCCEEDED (CoCreateInstance (&CLSID_ShellLink, NULL,
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
252 CLSCTX_INPROC_SERVER, &IID_IShellLinkA,
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
253 (void **) &shortcut)))
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
254 {
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
255 com_available = 0;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
256 }
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
257
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
258 if (com_available
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
259 && SHGetSpecialFolderPath (NULL, start_folder, CSIDL_COMMON_PROGRAMS, 0))
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
260 {
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
261 if (strlen (start_folder) < (MAX_PATH - 20))
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
262 {
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
263 BOOL retval;
12329
e97b20222345 Mostly rewritten.
Richard M. Stallman <rms@gnu.org>
parents: 12181
diff changeset
264
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
265 strcat (start_folder, "\\Gnu Emacs");
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
266 if (CreateDirectory (start_folder, NULL)
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
267 || GetLastError () == ERROR_ALREADY_EXISTS)
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
268 {
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
269 char full_emacs_path[MAX_PATH + 1];
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
270 IPersistFile *lnk;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
271 strcat (start_folder, "\\Emacs.lnk");
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
272 sprintf (full_emacs_path, "%s\\bin\\%s", emacs_path, prog_name);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
273 IShellLinkA_SetPath (shortcut, full_emacs_path);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
274 IShellLinkA_SetDescription (shortcut, "GNU Emacs");
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
275 result = IShellLinkA_QueryInterface (shortcut, &IID_IPersistFile,
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
276 (void **) &lnk);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
277 if (SUCCEEDED (result))
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
278 {
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
279 wchar_t unicode_path[MAX_PATH];
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
280 MultiByteToWideChar (CP_ACP, 0, start_folder, -1,
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
281 unicode_path, MAX_PATH);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
282 if (SUCCEEDED (IPersistFile_Save (lnk, unicode_path, TRUE)))
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
283 shortcuts_created = 1;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
284 IPersistFile_Release (lnk);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
285 }
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
286 }
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
287 }
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
288 }
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
289
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
290 if (!shortcuts_created && com_available
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
291 && SHGetSpecialFolderPath (NULL, start_folder, CSIDL_PROGRAMS, 0))
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
292 {
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
293 /* Ensure there is enough room for "...\GNU Emacs\Emacs.lnk". */
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
294 if (strlen (start_folder) < (MAX_PATH - 20))
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
295 {
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
296 BOOL retval;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
297
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
298 strcat (start_folder, "\\Gnu Emacs");
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
299 if (CreateDirectory (start_folder, NULL)
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
300 || GetLastError () == ERROR_ALREADY_EXISTS)
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
301 {
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
302 char full_emacs_path[MAX_PATH + 1];
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
303 IPersistFile *lnk;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
304 strcat (start_folder, "\\Emacs.lnk");
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
305 sprintf (full_emacs_path, "%s\\bin\\%s", emacs_path, prog_name);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
306 IShellLinkA_SetPath (shortcut, full_emacs_path);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
307 IShellLinkA_SetDescription (shortcut, "GNU Emacs");
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
308 result = IShellLinkA_QueryInterface (shortcut, &IID_IPersistFile,
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
309 (void **) &lnk);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
310 if (SUCCEEDED (result))
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
311 {
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
312 wchar_t unicode_path[MAX_PATH];
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
313 MultiByteToWideChar (CP_ACP, 0, start_folder, -1,
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
314 unicode_path, MAX_PATH);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
315 if (SUCCEEDED (IPersistFile_Save (lnk, unicode_path, TRUE)))
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
316 shortcuts_created = 1;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
317 IPersistFile_Release (lnk);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
318
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
319 }
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
320 }
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
321 }
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
322 }
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
323
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
324 if (com_available)
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
325 IShellLinkA_Release (shortcut);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
326
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
327 /* Need to call uninitialize, even if ComInitialize failed. */
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
328 CoUninitialize ();
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
329
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
330 /* Fallback on old DDE method if the above failed. */
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
331 if (!shortcuts_created)
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
332 {
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
333 DWORD dde = 0;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
334 HCONV conversation;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
335 HSZ progman;
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
336 char add_item[MAX_PATH*2 + 100];
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
337
101206
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
338 DdeInitialize (&dde, (PFNCALLBACK) DdeCallback, APPCMD_CLIENTONLY, 0);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
339 progman = DdeCreateStringHandle (dde, "PROGMAN", CP_WINANSI);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
340 conversation = DdeConnect (dde, progman, progman, NULL);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
341 if (conversation)
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
342 {
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
343 DdeCommand ("[CreateGroup (\"Gnu Emacs\")]");
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
344 DdeCommand ("[ReplaceItem (Emacs)]");
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
345 sprintf (add_item, "[AddItem (\"%s\\bin\\%s\", Emacs)]",
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
346 emacs_path, prog_name);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
347 DdeCommand (add_item);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
348
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
349 DdeDisconnect (conversation);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
350 }
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
351
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
352 DdeFreeStringHandle (dde, progman);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
353 DdeUninitialize (dde);
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
354 }
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
355
3f0ac2f6febc (main): Try using COM to create start menu shortcuts
Jason Rumney <jasonr@gnu.org>
parents: 100954
diff changeset
356 return 0;
12181
702f2ac242de Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
357 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
358
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
359 /* arch-tag: f923609d-b781-4ef4-abce-ca0da29cbbf0
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 49600
diff changeset
360 (do not change this comment) */