-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
git-gui: Use proper Windows shortcuts instead of bat files
On Windows its better to use a shortcut (.lnk file) over a batch script (.bat) as we can specify the icon file for the .lnk and thus have these git specific objects appear on the desktop with that git specific icon file. Unfortunately the authors of Tcl did not bless us with the APIs needed to create shortcuts from within Tcl. But Microsoft did give us Windows Scripting Host which allows us to execute some JavaScript that calls some sort of COM object that can operate on a .lnk file. We now build both Cygwin and non-Cygwin "desktop icons" as proper Windows .lnk files, using the "Start in" property of these files to indicate the working directory of the repository the user wants to launch. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
- Loading branch information
Shawn O. Pearce
committed
Oct 13, 2007
1 parent
d6db1ad
commit 51a41ac
Showing
4 changed files
with
84 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# git-gui Misc. native Windows 32 support | ||
# Copyright (C) 2007 Shawn Pearce | ||
|
||
proc win32_read_lnk {lnk_path} { | ||
return [exec cscript.exe \ | ||
/E:jscript \ | ||
/nologo \ | ||
[file join $::oguilib win32_shortcut.js] \ | ||
$lnk_path] | ||
} | ||
|
||
proc win32_create_lnk {lnk_path lnk_exec lnk_dir} { | ||
global oguilib | ||
|
||
set lnk_args [lrange $lnk_exec 1 end] | ||
set lnk_exec [lindex $lnk_exec 0] | ||
|
||
eval [list exec wscript.exe \ | ||
/E:jscript \ | ||
/nologo \ | ||
[file join $oguilib win32_shortcut.js] \ | ||
$lnk_path \ | ||
[file join $oguilib git-gui.ico] \ | ||
$lnk_dir \ | ||
$lnk_exec] $lnk_args | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
// git-gui Windows shortcut support | ||
// Copyright (C) 2007 Shawn Pearce | ||
|
||
var WshShell = WScript.CreateObject("WScript.Shell"); | ||
var argv = WScript.Arguments; | ||
var argi = 0; | ||
var lnk_path = argv.item(argi++); | ||
var ico_path = argi < argv.length ? argv.item(argi++) : undefined; | ||
var dir_path = argi < argv.length ? argv.item(argi++) : undefined; | ||
var lnk_exec = argi < argv.length ? argv.item(argi++) : undefined; | ||
var lnk_args = ''; | ||
while (argi < argv.length) { | ||
var s = argv.item(argi++); | ||
if (lnk_args != '') | ||
lnk_args += ' '; | ||
if (s.indexOf(' ') >= 0) { | ||
lnk_args += '"'; | ||
lnk_args += s; | ||
lnk_args += '"'; | ||
} else { | ||
lnk_args += s; | ||
} | ||
} | ||
|
||
var lnk = WshShell.CreateShortcut(lnk_path); | ||
if (argv.length == 1) { | ||
WScript.echo(lnk.TargetPath); | ||
} else { | ||
lnk.TargetPath = lnk_exec; | ||
lnk.Arguments = lnk_args; | ||
lnk.IconLocation = ico_path + ", 0"; | ||
lnk.WorkingDirectory = dir_path; | ||
lnk.Save(); | ||
} |