initial windows support

pull/253/head
Michael Lawson 10 years ago
parent 09d8992289
commit 53eeed8a99

@ -50,6 +50,7 @@ from autojump_utils import get_tab_entry_info
from autojump_utils import get_pwd
from autojump_utils import has_uppercase
from autojump_utils import is_osx
from autojump_utils import is_windows
from autojump_utils import last
from autojump_utils import print_entry
from autojump_utils import print_local
@ -72,6 +73,10 @@ def set_defaults():
os.path.expanduser('~'),
'Library',
'autojump')
elif is_windows():
data_home = os.path.join(
os.getenv('LOCALAPPDATA'),
'autojump')
else:
data_home = os.getenv(
'XDG_DATA_HOME',
@ -258,13 +263,13 @@ def match_consecutive(needles, haystack, ignore_case=False):
(path="/moo/foo/baz", weight=10),
(path="/foo/baz", weight=10)]
"""
regex_no_sep = '[^' + os.sep + ']*'
regex_one_sep = regex_no_sep + os.sep + regex_no_sep
sep = os.sep.encode('string-escape')
regex_no_sep = '[^' + sep + ']*'
regex_one_sep = regex_no_sep + sep + regex_no_sep
regex_no_sep_end = regex_no_sep + '$'
# can't use compiled regex because of flags
regex_needle = regex_one_sep.join(needles) + regex_no_sep_end
regex_flags = re.IGNORECASE | re.UNICODE if ignore_case else re.UNICODE
found = lambda entry: re.search(
regex_needle,
entry.path,
@ -336,7 +341,6 @@ def print_stats(data, data_path):
def main(args): # noqa
config = set_defaults()
# all arguments are mutually exclusive
if args.add:
save(config, first(add_path(load(config), args.add)))

@ -0,0 +1,2 @@
@echo off
python %~dp0\autojump %*

@ -0,0 +1,8 @@
local HOME = clink.get_env("USERPROFILE") .."\\"
local AUTOJUMP_BIN = HOME .. ".autojump\\bin\\autojump"
function autojump_add_to_database()
os.execute("python " .. AUTOJUMP_BIN .. " --add " .. clink.get_cwd())
end
clink.prompt.register_filter(autojump_add_to_database, 99)

@ -0,0 +1,15 @@
@echo off
echo %*|>nul findstr /rx \-.*
if ERRORLEVEL 1 (
for /f %%G in ('python %~dp0\autojump %*') do set new_path=%%G
if exist %new_path%/nul (
cd %new_path%
) else (
echo autojump: directory %* not found
echo try `autojump --help` for more information
)
echo %new_path%
) else (
python %~dp0\autojump %*
)

@ -0,0 +1,8 @@
@echo off
echo %*|>nul findstr /rx \-.*
if ERRORLEVEL 1 (
%~dp0\j.bat %cd% %*
) else (
python %~dp0\autojump %*
)

@ -0,0 +1,8 @@
@echo off
echo %*|>nul findstr /rx \-.*
if ERRORLEVEL 1 (
%~dp0\jc.bat %cd% %*
) else (
python %~dp0\autojump %*
)

@ -0,0 +1,15 @@
@echo off
echo %*|>nul findstr /rx \-.*
if ERRORLEVEL 1 (
for /f %%G in ('python %~dp0\autojump %*') do set new_path=%%G
if exist %new_path%/nul (
start %new_path%
) else (
echo autojump: directory %* not found
echo try `autojump --help` for more information
)
echo %new_path%
) else (
python %~dp0\autojump %*
)

@ -78,16 +78,21 @@ def parse_arguments():
if sys.version_info[0] == 2 and sys.version_info[1] < 6:
print("Python v2.6+ or v3.0+ required.", file=sys.stderr)
sys.exit(1)
if get_shell() not in SUPPORTED_SHELLS:
print("Unsupported shell: %s" % os.getenv('SHELL'),
file=sys.stderr)
sys.exit(1)
if args.system and os.geteuid() != 0:
print("Please rerun as root for system-wide installation.",
file=sys.stderr)
sys.exit(1)
if platform.system() != 'Windows':
if get_shell() not in SUPPORTED_SHELLS:
print("Unsupported shell: %s" % os.getenv('SHELL'),
file=sys.stderr)
sys.exit(1)
if args.system and os.geteuid() != 0:
print("Please rerun as root for system-wide installation.",
file=sys.stderr)
sys.exit(1)
else:
if args.system:
print("System-wide installation is not supported on Windows.",
file=sys.stderr)
sys.exit(1)
if args.destdir != default_user_destdir \
or args.prefix != default_user_prefix \
@ -109,26 +114,29 @@ def parse_arguments():
return args
def print_post_installation_message(etc_dir):
if get_shell() == 'fish':
aj_shell = '%s/autojump.fish' % etc_dir
source_msg = "if test -f %s; . %s; end" % (aj_shell, aj_shell)
def print_post_installation_message(etc_dir, bin_dir):
if platform.system() != 'Windows':
if get_shell() == 'fish':
aj_shell = '%s/autojump.fish' % etc_dir
source_msg = "if test -f %s; . %s; end" % (aj_shell, aj_shell)
# TODO(ting|2013-12-31): check config.fish location on OSX
rcfile = '~/.config/fish/config.fish'
else:
aj_shell = '%s/autojump.sh' % etc_dir
source_msg = "[[ -s %s ]] && source %s" % (aj_shell, aj_shell)
if platform.system() == 'Darwin' and get_shell() == 'bash':
rcfile = '~/.profile'
# TODO(ting|2013-12-31): check config.fish location on OSX
rcfile = '~/.config/fish/config.fish'
else:
rcfile = '~/.%src' % get_shell()
print("\nPlease manually add the following line(s) to %s:" % rcfile)
print('\n\t' + source_msg)
if get_shell() == 'zsh':
print("\n\tautoload -U compinit && compinit -u")
aj_shell = '%s/autojump.sh' % etc_dir
source_msg = "[[ -s %s ]] && source %s" % (aj_shell, aj_shell)
if platform.system() == 'Darwin' and get_shell() == 'bash':
rcfile = '~/.profile'
else:
rcfile = '~/.%src' % get_shell()
print("\nPlease manually add the following line(s) to %s:" % rcfile)
print('\n\t' + source_msg)
if get_shell() == 'zsh':
print("\n\tautoload -U compinit && compinit -u")
else:
print("\nPlease manually add %s to your user path" % bin_dir)
print("\nPlease restart terminal(s) before running autojump.\n")
@ -139,10 +147,11 @@ def main(args):
print("Installing autojump to %s ..." % args.destdir)
bin_dir = os.path.join(args.destdir, args.prefix, 'bin')
etc_dir = os.path.join(args.destdir, 'etc/profile.d')
doc_dir = os.path.join(args.destdir, args.prefix, 'share/man/man1')
icon_dir = os.path.join(args.destdir, args.prefix, 'share/autojump')
etc_dir = os.path.join(args.destdir, 'etc', 'profile.d')
doc_dir = os.path.join(args.destdir, args.prefix, 'share', 'man', 'man1')
icon_dir = os.path.join(args.destdir, args.prefix, 'share', 'autojump')
zshshare_dir = os.path.join(args.destdir, args.zshshare)
clink_dir = os.path.join(os.getenv("LOCALAPPDATA"),'clink')
mkdir(bin_dir, args.dryrun)
mkdir(etc_dir, args.dryrun)
@ -154,18 +163,27 @@ def main(args):
cp('./bin/autojump_argparse.py', bin_dir, args.dryrun)
cp('./bin/autojump_data.py', bin_dir, args.dryrun)
cp('./bin/autojump_utils.py', bin_dir, args.dryrun)
cp('./bin/autojump.sh', etc_dir, args.dryrun)
cp('./bin/autojump.bash', etc_dir, args.dryrun)
cp('./bin/autojump.fish', etc_dir, args.dryrun)
cp('./bin/autojump.zsh', etc_dir, args.dryrun)
cp('./bin/_j', zshshare_dir, args.dryrun)
if platform.system() != 'Windows':
cp('./bin/autojump.sh', etc_dir, args.dryrun)
cp('./bin/autojump.bash', etc_dir, args.dryrun)
cp('./bin/autojump.fish', etc_dir, args.dryrun)
cp('./bin/autojump.zsh', etc_dir, args.dryrun)
cp('./bin/_j', zshshare_dir, args.dryrun)
if args.custom_install:
modify_autojump_sh(etc_dir, args.dryrun)
else:
cp('./bin/autojump.lua', clink_dir, args.dryrun)
cp('./bin/autojump.bat', bin_dir, args.dryrun)
cp('./bin/j.bat', bin_dir, args.dryrun)
cp('./bin/jc.bat', bin_dir, args.dryrun)
cp('./bin/jo.bat', bin_dir, args.dryrun)
cp('./bin/jco.bat', bin_dir, args.dryrun)
cp('./bin/icon.png', icon_dir, args.dryrun)
cp('./docs/autojump.1', doc_dir, args.dryrun)
if args.custom_install:
modify_autojump_sh(etc_dir, args.dryrun)
print_post_installation_message(etc_dir)
print_post_installation_message(etc_dir, bin_dir)
if __name__ == "__main__":
sys.exit(main(parse_arguments()))

@ -8,6 +8,7 @@ import platform
import shutil
import sys
sys.path.append('bin')
from autojump_argparse import ArgumentParser
@ -111,6 +112,10 @@ def remove_user_data(dryrun=False):
os.path.expanduser('~'),
'Library',
'autojump')
elif platform.system() == 'Windows':
data_home = os.path.join(
os.getenv('APPDATA'),
'autojump')
else:
data_home = os.getenv(
'XDG_DATA_HOME',
@ -127,9 +132,13 @@ def remove_user_data(dryrun=False):
def remove_user_installation(dryrun=False):
default_destdir = os.path.join(os.path.expanduser("~"), '.autojump')
clink_dir = os.path.join(os.getenv("LOCALAPPDATA"),'clink')
if os.path.exists(default_destdir):
print("\nFound user installation...")
rmdir(default_destdir, dryrun)
if platform.system() == 'Windows':
if os.path.exists(clink_dir):
rm(os.path.join(clink_dir,'autojump.lua'), dryrun)
def rm(path, dryrun):

Loading…
Cancel
Save