Merge branch 'master' of git://repo.or.cz/git-gui
[git/git.git] / git-gui / lib / shortcut.tcl
1 # git-gui desktop icon creators
2 # Copyright (C) 2006, 2007 Shawn Pearce
3
4 proc do_windows_shortcut {} {
5 global argv0
6
7 set fn [tk_getSaveFile \
8 -parent . \
9 -title "[appname] ([reponame]): Create Desktop Icon" \
10 -initialfile "Git [reponame].bat"]
11 if {$fn != {}} {
12 if {[catch {
13 set fd [open $fn w]
14 puts $fd "@ECHO Entering [reponame]"
15 puts $fd "@ECHO Starting git-gui... please wait..."
16 puts $fd "@SET PATH=[file normalize [gitexec]];%PATH%"
17 puts $fd "@SET GIT_DIR=[file normalize [gitdir]]"
18 puts -nonewline $fd "@\"[info nameofexecutable]\""
19 puts $fd " \"[file normalize $argv0]\""
20 close $fd
21 } err]} {
22 error_popup "Cannot write script:\n\n$err"
23 }
24 }
25 }
26
27 proc do_cygwin_shortcut {} {
28 global argv0
29
30 if {[catch {
31 set desktop [exec cygpath \
32 --windows \
33 --absolute \
34 --long-name \
35 --desktop]
36 }]} {
37 set desktop .
38 }
39 set fn [tk_getSaveFile \
40 -parent . \
41 -title "[appname] ([reponame]): Create Desktop Icon" \
42 -initialdir $desktop \
43 -initialfile "Git [reponame].bat"]
44 if {$fn != {}} {
45 if {[catch {
46 set fd [open $fn w]
47 set sh [exec cygpath \
48 --windows \
49 --absolute \
50 /bin/sh]
51 set me [exec cygpath \
52 --unix \
53 --absolute \
54 $argv0]
55 set gd [exec cygpath \
56 --unix \
57 --absolute \
58 [gitdir]]
59 set gw [exec cygpath \
60 --windows \
61 --absolute \
62 [file dirname [gitdir]]]
63 regsub -all ' $me "'\\''" me
64 regsub -all ' $gd "'\\''" gd
65 puts $fd "@ECHO Entering $gw"
66 puts $fd "@ECHO Starting git-gui... please wait..."
67 puts -nonewline $fd "@\"$sh\" --login -c \""
68 puts -nonewline $fd "GIT_DIR='$gd'"
69 puts -nonewline $fd " '$me'"
70 puts $fd "&\""
71 close $fd
72 } err]} {
73 error_popup "Cannot write script:\n\n$err"
74 }
75 }
76 }
77
78 proc do_macosx_app {} {
79 global argv0 env
80
81 set fn [tk_getSaveFile \
82 -parent . \
83 -title "[appname] ([reponame]): Create Desktop Icon" \
84 -initialdir [file join $env(HOME) Desktop] \
85 -initialfile "Git [reponame].app"]
86 if {$fn != {}} {
87 if {[catch {
88 set Contents [file join $fn Contents]
89 set MacOS [file join $Contents MacOS]
90 set exe [file join $MacOS git-gui]
91
92 file mkdir $MacOS
93
94 set fd [open [file join $Contents Info.plist] w]
95 puts $fd {<?xml version="1.0" encoding="UTF-8"?>
96 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
97 <plist version="1.0">
98 <dict>
99 <key>CFBundleDevelopmentRegion</key>
100 <string>English</string>
101 <key>CFBundleExecutable</key>
102 <string>git-gui</string>
103 <key>CFBundleIdentifier</key>
104 <string>org.spearce.git-gui</string>
105 <key>CFBundleInfoDictionaryVersion</key>
106 <string>6.0</string>
107 <key>CFBundlePackageType</key>
108 <string>APPL</string>
109 <key>CFBundleSignature</key>
110 <string>????</string>
111 <key>CFBundleVersion</key>
112 <string>1.0</string>
113 <key>NSPrincipalClass</key>
114 <string>NSApplication</string>
115 </dict>
116 </plist>}
117 close $fd
118
119 set fd [open $exe w]
120 set gd [file normalize [gitdir]]
121 set ep [file normalize [gitexec]]
122 regsub -all ' $gd "'\\''" gd
123 regsub -all ' $ep "'\\''" ep
124 puts $fd "#!/bin/sh"
125 foreach name [array names env] {
126 if {[string match GIT_* $name]} {
127 regsub -all ' $env($name) "'\\''" v
128 puts $fd "export $name='$v'"
129 }
130 }
131 puts $fd "export PATH='$ep':\$PATH"
132 puts $fd "export GIT_DIR='$gd'"
133 puts $fd "exec [file normalize $argv0]"
134 close $fd
135
136 file attributes $exe -permissions u+x,g+x,o+x
137 } err]} {
138 error_popup "Cannot write icon:\n\n$err"
139 }
140 }
141 }