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