about summary refs log tree commit diff
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.tcl143
1 files changed, 143 insertions, 0 deletions
diff --git a/git-gui/lib/shortcut.tcl b/git-gui/lib/shortcut.tcl
new file mode 100644
index 000000000000..97d1d7aa0268
--- /dev/null
+++ b/git-gui/lib/shortcut.tcl
@@ -0,0 +1,143 @@
+# git-gui desktop icon creators
+# Copyright (C) 2006, 2007 Shawn Pearce
+
+proc do_windows_shortcut {} {
+	global _gitworktree
+	set fn [tk_getSaveFile \
+		-parent . \
+		-title [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \
+		-initialfile "Git [reponame].lnk"]
+	if {$fn != {}} {
+		if {[file extension $fn] ne {.lnk}} {
+			set fn ${fn}.lnk
+		}
+		# Use git-gui.exe if available (ie: git-for-windows)
+		set cmdLine [auto_execok git-gui.exe]
+		if {$cmdLine eq {}} {
+			set cmdLine [list [info nameofexecutable] \
+							 [file normalize $::argv0]]
+		}
+		if {[catch {
+				win32_create_lnk $fn $cmdLine \
+					[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 [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \
+		-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 [mc "%s (%s): Create Desktop Icon" [appname] [reponame]] \
+		-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"]
+		}
+	}
+}