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