mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![Shawn O. Pearce](/assets/img/avatar_default.png)
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>
35 lines
888 B
JavaScript
35 lines
888 B
JavaScript
// 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();
|
|
}
|