mirror of
				https://github.com/wting/autojump
				synced 2025-06-13 12:54:07 +00:00 
			
		
		
		
	initial windows support
This commit is contained in:
		
							parent
							
								
									09d8992289
								
							
						
					
					
						commit
						53eeed8a99
					
				
							
								
								
									
										12
									
								
								bin/autojump
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								bin/autojump
									
									
									
									
									
								
							| @ -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))) | ||||
|  | ||||
							
								
								
									
										2
									
								
								bin/autojump.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								bin/autojump.bat
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | ||||
| @echo off | ||||
| python %~dp0\autojump %* | ||||
							
								
								
									
										8
									
								
								bin/autojump.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								bin/autojump.lua
									
									
									
									
									
										Normal file
									
								
							| @ -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) | ||||
							
								
								
									
										15
									
								
								bin/j.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								bin/j.bat
									
									
									
									
									
										Normal file
									
								
							| @ -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 %*  | ||||
| ) | ||||
							
								
								
									
										8
									
								
								bin/jc.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								bin/jc.bat
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| @echo off | ||||
| 
 | ||||
| echo %*|>nul findstr /rx \-.* | ||||
| if ERRORLEVEL 1 ( | ||||
|   %~dp0\j.bat %cd% %* | ||||
| ) else ( | ||||
|   python %~dp0\autojump %*  | ||||
| ) | ||||
							
								
								
									
										8
									
								
								bin/jco.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								bin/jco.bat
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| @echo off | ||||
| 
 | ||||
| echo %*|>nul findstr /rx \-.* | ||||
| if ERRORLEVEL 1 ( | ||||
|   %~dp0\jc.bat %cd% %* | ||||
| ) else ( | ||||
|   python %~dp0\autojump %*  | ||||
| ) | ||||
							
								
								
									
										15
									
								
								bin/jo.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								bin/jo.bat
									
									
									
									
									
										Normal file
									
								
							| @ -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 %*  | ||||
| ) | ||||
							
								
								
									
										92
									
								
								install.py
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								install.py
									
									
									
									
									
								
							| @ -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 platform.system() != 'Windows': | ||||
|             if get_shell() not in SUPPORTED_SHELLS: | ||||
|                 print("Unsupported shell: %s" % os.getenv('SHELL'), | ||||
|                       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 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() | ||||
|             aj_shell = '%s/autojump.sh' % etc_dir | ||||
|             source_msg = "[[ -s %s ]] && source %s" % (aj_shell, aj_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") | ||||
|             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…
	
		Reference in New Issue
	
	Block a user