47282d4646
Apparently under some setups on Windows Tk is hiding our file extension recommendation of ".bat" from the user and that is allowing the user to create a shortcut file which has no file extension. Double clicking on such a file in Windows Explorer brings up the associate file dialog, as Windows does not know what application to launch. We now append the file extension ".bat" to the filename of the shortcut file if it has no extension or if it has one but it is not ".bat". Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
148 lines
3.6 KiB
Tcl
148 lines
3.6 KiB
Tcl
# git-gui desktop icon creators
|
|
# Copyright (C) 2006, 2007 Shawn Pearce
|
|
|
|
proc do_windows_shortcut {} {
|
|
global argv0
|
|
|
|
set fn [tk_getSaveFile \
|
|
-parent . \
|
|
-title "[appname] ([reponame]): Create Desktop Icon" \
|
|
-initialfile "Git [reponame].bat"]
|
|
if {$fn != {}} {
|
|
if {[file extension $fn] ne {.bat}} {
|
|
set fn ${fn}.bat
|
|
}
|
|
if {[catch {
|
|
set fd [open $fn w]
|
|
puts $fd "@ECHO Entering [reponame]"
|
|
puts $fd "@ECHO Starting git-gui... please wait..."
|
|
puts $fd "@SET PATH=[file normalize [gitexec]];%PATH%"
|
|
puts $fd "@SET GIT_DIR=[file normalize [gitdir]]"
|
|
puts -nonewline $fd "@\"[info nameofexecutable]\""
|
|
puts $fd " \"[file normalize $argv0]\""
|
|
close $fd
|
|
} err]} {
|
|
error_popup "Cannot write script:\n\n$err"
|
|
}
|
|
}
|
|
}
|
|
|
|
proc do_cygwin_shortcut {} {
|
|
global argv0
|
|
|
|
if {[catch {
|
|
set desktop [exec cygpath \
|
|
--windows \
|
|
--absolute \
|
|
--long-name \
|
|
--desktop]
|
|
}]} {
|
|
set desktop .
|
|
}
|
|
set fn [tk_getSaveFile \
|
|
-parent . \
|
|
-title "[appname] ([reponame]): Create Desktop Icon" \
|
|
-initialdir $desktop \
|
|
-initialfile "Git [reponame].bat"]
|
|
if {$fn != {}} {
|
|
if {[file extension $fn] ne {.bat}} {
|
|
set fn ${fn}.bat
|
|
}
|
|
if {[catch {
|
|
set fd [open $fn w]
|
|
set sh [exec cygpath \
|
|
--windows \
|
|
--absolute \
|
|
/bin/sh]
|
|
set me [exec cygpath \
|
|
--unix \
|
|
--absolute \
|
|
$argv0]
|
|
set gd [exec cygpath \
|
|
--unix \
|
|
--absolute \
|
|
[gitdir]]
|
|
set gw [exec cygpath \
|
|
--windows \
|
|
--absolute \
|
|
[file dirname [gitdir]]]
|
|
regsub -all ' $me "'\\''" me
|
|
regsub -all ' $gd "'\\''" gd
|
|
puts $fd "@ECHO Entering $gw"
|
|
puts $fd "@ECHO Starting git-gui... please wait..."
|
|
puts -nonewline $fd "@\"$sh\" --login -c \""
|
|
puts -nonewline $fd "GIT_DIR='$gd'"
|
|
puts -nonewline $fd " '$me'"
|
|
puts $fd "&\""
|
|
close $fd
|
|
} err]} {
|
|
error_popup "Cannot write script:\n\n$err"
|
|
}
|
|
}
|
|
}
|
|
|
|
proc do_macosx_app {} {
|
|
global argv0 env
|
|
|
|
set fn [tk_getSaveFile \
|
|
-parent . \
|
|
-title "[appname] ([reponame]): Create Desktop Icon" \
|
|
-initialdir [file join $env(HOME) Desktop] \
|
|
-initialfile "Git [reponame].app"]
|
|
if {$fn != {}} {
|
|
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]
|
|
set gd [file normalize [gitdir]]
|
|
set ep [file normalize [gitexec]]
|
|
regsub -all ' $gd "'\\''" gd
|
|
regsub -all ' $ep "'\\''" ep
|
|
puts $fd "#!/bin/sh"
|
|
foreach name [array names env] {
|
|
if {[string match GIT_* $name]} {
|
|
regsub -all ' $env($name) "'\\''" v
|
|
puts $fd "export $name='$v'"
|
|
}
|
|
}
|
|
puts $fd "export PATH='$ep':\$PATH"
|
|
puts $fd "export GIT_DIR='$gd'"
|
|
puts $fd "exec [file normalize $argv0]"
|
|
close $fd
|
|
|
|
file attributes $exe -permissions u+x,g+x,o+x
|
|
} err]} {
|
|
error_popup "Cannot write icon:\n\n$err"
|
|
}
|
|
}
|
|
}
|