Code

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