This Trac instance is not used for development anymore!

We migrated our development workflow to git and Gitea.
To test the future redirection, replace trac by ariadne in the page URL.

source: ps/trunk/source/tools/dist/FileAssociation.nsh

Last change on this file was 21723, checked in by Itms, 7 years ago

Define and associate .pyromod filetype with pyrogenesis on Linux and Windows.

The new pyrogenesis.xml file should go under $XDG_DATA_DIRS/mime/packages/ before running update-mime-database (see https://www.freedesktop.org/wiki/Specifications/AddingMIMETutor/ for more information).

Patch by s0600204 and myself.

  • Property svn:eol-style set to native
File size: 4.5 KB
Line 
1/*
2_____________________________________________________________________________
3
4 File Association
5_____________________________________________________________________________
6
7 Based on code taken from http://nsis.sourceforge.net/File_Association
8
9 Usage in script:
10 1. !include "FileAssociation.nsh"
11 2. [Section|Function]
12 ${FileAssociationFunction} "Param1" "Param2" "..." $var
13 [SectionEnd|FunctionEnd]
14
15 FileAssociationFunction=[RegisterExtension|UnRegisterExtension]
16
17_____________________________________________________________________________
18
19 ${RegisterExtension} "[executable]" "[extension]" "[description]"
20
21"[executable]" ; executable which opens the file format
22 ;
23"[extension]" ; extension, which represents the file format to open
24 ;
25"[description]" ; description for the extension. This will be display in Windows Explorer.
26 ;
27
28
29 ${UnRegisterExtension} "[extension]" "[description]"
30
31"[extension]" ; extension, which represents the file format to open
32 ;
33"[description]" ; description for the extension. This will be display in Windows Explorer.
34 ;
35
36_____________________________________________________________________________
37
38 Macros
39_____________________________________________________________________________
40
41 Change log window verbosity (default: 3=no script)
42
43 Example:
44 !include "FileAssociation.nsh"
45 !insertmacro RegisterExtension
46 ${FileAssociation_VERBOSE} 4 # all verbosity
47 !insertmacro UnRegisterExtension
48 ${FileAssociation_VERBOSE} 3 # no script
49*/
50
51
52!ifndef FileAssociation_INCLUDED
53!define FileAssociation_INCLUDED
54
55!include Util.nsh
56
57!verbose push
58!verbose 3
59!ifndef _FileAssociation_VERBOSE
60 !define _FileAssociation_VERBOSE 3
61!endif
62!verbose ${_FileAssociation_VERBOSE}
63!define FileAssociation_VERBOSE `!insertmacro FileAssociation_VERBOSE`
64!verbose pop
65
66!macro FileAssociation_VERBOSE _VERBOSE
67 !verbose push
68 !verbose 3
69 !undef _FileAssociation_VERBOSE
70 !define _FileAssociation_VERBOSE ${_VERBOSE}
71 !verbose pop
72!macroend
73
74
75
76!macro RegisterExtensionCall _EXECUTABLE _EXTENSION _DESCRIPTION
77 !verbose push
78 !verbose ${_FileAssociation_VERBOSE}
79 Push `${_DESCRIPTION}`
80 Push `${_EXTENSION}`
81 Push `${_EXECUTABLE}`
82 ${CallArtificialFunction} RegisterExtension_
83 !verbose pop
84!macroend
85
86!macro UnRegisterExtensionCall _EXTENSION _DESCRIPTION
87 !verbose push
88 !verbose ${_FileAssociation_VERBOSE}
89 Push `${_EXTENSION}`
90 Push `${_DESCRIPTION}`
91 ${CallArtificialFunction} UnRegisterExtension_
92 !verbose pop
93!macroend
94
95
96
97!define RegisterExtension `!insertmacro RegisterExtensionCall`
98!define un.RegisterExtension `!insertmacro RegisterExtensionCall`
99
100!macro RegisterExtension
101!macroend
102
103!macro un.RegisterExtension
104!macroend
105
106!macro RegisterExtension_
107 !verbose push
108 !verbose ${_FileAssociation_VERBOSE}
109
110 Exch $R2 ;exe
111 Exch
112 Exch $R1 ;ext
113 Exch
114 Exch 2
115 Exch $R0 ;desc
116 Exch 2
117 Push $0
118 Push $1
119
120 ReadRegStr $1 HKCR $R1 "" ; read current file association
121 StrCmp "$1" "" NoBackup ; is it empty
122 StrCmp "$1" "$R0" NoBackup ; is it our own
123 WriteRegStr HKCR $R1 "backup_val" "$1" ; backup current value
124NoBackup:
125 WriteRegStr HKCR $R1 "" "$R0" ; set our file association
126
127 ReadRegStr $0 HKCR $R0 ""
128 StrCmp $0 "" 0 Skip
129 WriteRegStr HKCR "$R0" "" "$R0"
130 WriteRegStr HKCR "$R0\shell" "" "open"
131 WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0"
132Skip:
133 WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"'
134 WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0"
135 WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"'
136
137 Pop $1
138 Pop $0
139 Pop $R2
140 Pop $R1
141 Pop $R0
142
143 !verbose pop
144!macroend
145
146
147
148!define UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
149!define un.UnRegisterExtension `!insertmacro UnRegisterExtensionCall`
150
151!macro UnRegisterExtension
152!macroend
153
154!macro un.UnRegisterExtension
155!macroend
156
157!macro UnRegisterExtension_
158 !verbose push
159 !verbose ${_FileAssociation_VERBOSE}
160
161 Exch $R1 ;desc
162 Exch
163 Exch $R0 ;ext
164 Exch
165 Push $0
166 Push $1
167
168 ReadRegStr $1 HKCR $R0 ""
169 StrCmp $1 $R1 0 NoOwn ; only do this if we own it
170 ReadRegStr $1 HKCR $R0 "backup_val"
171 StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key
172 DeleteRegKey HKCR $R0
173 Goto NoOwn
174
175Restore:
176 WriteRegStr HKCR $R0 "" $1
177 DeleteRegValue HKCR $R0 "backup_val"
178 DeleteRegKey HKCR $R1 ;Delete key with association name settings
179
180NoOwn:
181
182 Pop $1
183 Pop $0
184 Pop $R1
185 Pop $R0
186
187 !verbose pop
188!macroend
189
190!endif # !FileAssociation_INCLUDED
Note: See TracBrowser for help on using the repository browser.