summaryrefslogtreecommitdiff
path: root/git-gui/lib/shortcut.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'git-gui/lib/shortcut.tcl')
-rw-r--r--git-gui/lib/shortcut.tcl140
1 files changed, 140 insertions, 0 deletions
diff --git a/git-gui/lib/shortcut.tcl b/git-gui/lib/shortcut.tcl
new file mode 100644
index 0000000000..78878ef89d
--- /dev/null
+++ b/git-gui/lib/shortcut.tcl
@@ -0,0 +1,140 @@
+# git-gui desktop icon creators
+# Copyright (C) 2006, 2007 Shawn Pearce
+
+proc do_windows_shortcut {} {
+ global _gitworktree
+ set fn [tk_getSaveFile \
+ -parent . \
+ -title [append "[appname] ([reponame]): " [mc "Create Desktop Icon"]] \
+ -initialfile "Git [reponame].lnk"]
+ if {$fn != {}} {
+ if {[file extension $fn] ne {.lnk}} {
+ set fn ${fn}.lnk
+ }
+ if {[catch {
+ win32_create_lnk $fn [list \
+ [info nameofexecutable] \
+ [file normalize $::argv0] \
+ ] \
+ [file normalize $_gitworktree]
+ } err]} {
+ error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"]
+ }
+ }
+}
+
+proc do_cygwin_shortcut {} {
+ global argv0 _gitworktree
+
+ if {[catch {
+ set desktop [exec cygpath \
+ --windows \
+ --absolute \
+ --long-name \
+ --desktop]
+ }]} {
+ set desktop .
+ }
+ set fn [tk_getSaveFile \
+ -parent . \
+ -title [append "[appname] ([reponame]): " [mc "Create Desktop Icon"]] \
+ -initialdir $desktop \
+ -initialfile "Git [reponame].lnk"]
+ if {$fn != {}} {
+ if {[file extension $fn] ne {.lnk}} {
+ set fn ${fn}.lnk
+ }
+ if {[catch {
+ set sh [exec cygpath \
+ --windows \
+ --absolute \
+ /bin/sh.exe]
+ set me [exec cygpath \
+ --unix \
+ --absolute \
+ $argv0]
+ win32_create_lnk $fn [list \
+ $sh -c \
+ "CHERE_INVOKING=1 source /etc/profile;[sq $me] &" \
+ ] \
+ [file normalize $_gitworktree]
+ } err]} {
+ error_popup [strcat [mc "Cannot write shortcut:"] "\n\n$err"]
+ }
+ }
+}
+
+proc do_macosx_app {} {
+ global argv0 env
+
+ set fn [tk_getSaveFile \
+ -parent . \
+ -title [append "[appname] ([reponame]): " [mc "Create Desktop Icon"]] \
+ -initialdir [file join $env(HOME) Desktop] \
+ -initialfile "Git [reponame].app"]
+ if {$fn != {}} {
+ if {[file extension $fn] ne {.app}} {
+ set fn ${fn}.app
+ }
+ if {[catch {
+ set Contents [file join $fn Contents]
+ set MacOS [file join $Contents MacOS]
+ set exe [file join $MacOS git-gui]
+
+ file mkdir $MacOS
+
+ set fd [open [file join $Contents Info.plist] w]
+ puts $fd {<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>git-gui</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.spearce.git-gui</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+</dict>
+</plist>}
+ close $fd
+
+ set fd [open $exe w]
+ puts $fd "#!/bin/sh"
+ foreach name [lsort [array names env]] {
+ set value $env($name)
+ switch -- $name {
+ GIT_DIR { set value [file normalize [gitdir]] }
+ }
+
+ switch -glob -- $name {
+ SSH_* -
+ GIT_* {
+ puts $fd "if test \"z\$$name\" = z; then"
+ puts $fd " export $name=[sq $value]"
+ puts $fd "fi &&"
+ }
+ }
+ }
+ puts $fd "export PATH=[sq [file dirname $::_git]]:\$PATH &&"
+ puts $fd "cd [sq [file normalize [pwd]]] &&"
+ puts $fd "exec \\"
+ puts $fd " [sq [info nameofexecutable]] \\"
+ puts $fd " [sq [file normalize $argv0]]"
+ close $fd
+
+ file attributes $exe -permissions u+x,g+x,o+x
+ } err]} {
+ error_popup [strcat [mc "Cannot write icon:"] "\n\n$err"]
+ }
+ }
+}