mirror of
				https://github.com/wting/autojump
				synced 2025-06-13 12:54:07 +00:00 
			
		
		
		
	fix zsh tab completion
This commit is contained in:
		
							parent
							
								
									bec6314eab
								
							
						
					
					
						commit
						6293af5b7a
					
				| @ -29,6 +29,8 @@ | ||||
| - autojump now uses ~/Library/autojump for storing data on OS X instead of | ||||
|   incorrectly using Linux's $XDG_DATA_HOME. Existing data should automatically | ||||
|   be migrated to the new location. | ||||
| - Past behavior jumped to the highest weight database entry when not passed any | ||||
|   arguments. The new behavior is to stay in the current directory. | ||||
| 
 | ||||
| 
 | ||||
| ### Release v21.6.8: | ||||
|  | ||||
							
								
								
									
										30
									
								
								bin/autojump
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								bin/autojump
									
									
									
									
									
								
							| @ -182,7 +182,10 @@ def find_matches(entries, needles): | ||||
|                 [Entry('.', 0)])) | ||||
| 
 | ||||
| 
 | ||||
| def handle_no_arguments(needle, needles, entries): | ||||
| def handle_tab_completion(needle, entries): | ||||
|     if not needle: | ||||
|         sys.exit(0) | ||||
| 
 | ||||
|     tab_needle, path = get_tab_needle_and_path(needle, TAB_SEPARATOR) | ||||
| 
 | ||||
|     if path: | ||||
| @ -195,8 +198,11 @@ def handle_no_arguments(needle, needles, entries): | ||||
|                 take(TAB_ENTRIES_COUNT, find_matches(entries, tab_needle)), | ||||
|                 TAB_SEPARATOR) | ||||
|     else: | ||||
|         print(encode_local(surround_quotes( | ||||
|                 first(find_matches(entries, needles)).path))) | ||||
|         print_tab_menu( | ||||
|                 needle, | ||||
|                 take(TAB_ENTRIES_COUNT, find_matches(entries, needle)), | ||||
|                 TAB_SEPARATOR) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| def match_anywhere(needles, haystack, ignore_case=False): | ||||
| @ -333,11 +339,9 @@ def main(args): | ||||
|     if args.add: | ||||
|         save(config, first(add_path(load(config), args.add))) | ||||
|     elif args.complete: | ||||
|         needle = first(sanitize(args.directory)) | ||||
|         tab_entries = take( | ||||
|                 TAB_ENTRIES_COUNT, | ||||
|                 find_matches(entriefy(load(config)), needle)) | ||||
|         print_tab_menu(needle, tab_entries, TAB_SEPARATOR) | ||||
|         handle_tab_completion( | ||||
|                 needle=first(sanitize(args.directory)), | ||||
|                 entries=entriefy(load(config))) | ||||
|     elif args.decrease: | ||||
|         data, entry = decrease_path(load(config), get_pwd(), args.decrease) | ||||
|         save(config, data) | ||||
| @ -360,8 +364,14 @@ def main(args): | ||||
|     else: | ||||
|         entries = entriefy(load(config)) | ||||
|         needles = sanitize(args.directory) | ||||
|         needle = first(needles) | ||||
|         handle_no_arguments(needle, needles, entries) | ||||
|         _, path = get_tab_needle_and_path(first(needles), TAB_SEPARATOR) | ||||
| 
 | ||||
|         if path: | ||||
|             # found complete tab completion entry | ||||
|             print(encode_local(surround_quotes(path))) | ||||
|         else: | ||||
|             print(encode_local(surround_quotes( | ||||
|                     first(find_matches(entries, needles))).path)) | ||||
| 
 | ||||
|     return 0 | ||||
| 
 | ||||
|  | ||||
| @ -1,15 +1,4 @@ | ||||
| # determine the data directory according to the XDG Base Directory Specification | ||||
| if [[ -n ${XDG_DATA_HOME} ]] && [[ ${XDG_DATA_HOME} == *${USER}* ]]; then | ||||
|     export AUTOJUMP_DATA_DIR="${XDG_DATA_HOME}/autojump" | ||||
| else | ||||
|     export AUTOJUMP_DATA_DIR=${HOME}/.local/share/autojump | ||||
| fi | ||||
| 
 | ||||
| if [[ ! -e ${AUTOJUMP_DATA_DIR} ]]; then | ||||
|     mkdir -p "${AUTOJUMP_DATA_DIR}" | ||||
| fi | ||||
| 
 | ||||
| # set paths if necessary for local installations | ||||
| # set paths for user installations | ||||
| if [[ -d ${HOME}/.autojump ]]; then | ||||
|     path=(${HOME}/.autojump/bin ${path}) | ||||
|     fpath=(${HOME}/.autojump/functions/ ${fpath}) | ||||
| @ -20,20 +9,16 @@ command -v brew &>/dev/null \ | ||||
|     && [[ -d "`brew --prefix`/share/zsh/site-functions" ]] \ | ||||
|     && fpath=(`brew --prefix`/share/zsh/site-functions ${fpath}) | ||||
| 
 | ||||
| # add change pwd hook | ||||
| autojump_chpwd() { | ||||
|     if [[ "${AUTOJUMP_KEEP_SYMLINKS}" == "1" ]]; then | ||||
|         _PWD_ARGS="" | ||||
|     else | ||||
|         _PWD_ARGS="-P" | ||||
|     fi | ||||
|     { (autojump -a "$(pwd ${_PWD_ARGS})"&)>/dev/null 2>>|${AUTOJUMP_DATA_DIR}/autojump_errors ; } 2>/dev/null | ||||
|     (autojump -a "$(pwd)" &) &>/dev/null | ||||
| } | ||||
| 
 | ||||
| typeset -gaU chpwd_functions | ||||
| chpwd_functions+=autojump_chpwd | ||||
| 
 | ||||
| # default autojump command | ||||
| j() { | ||||
|     # Cannot use =~ due to MacPorts zsh v4.2, see issue #125. | ||||
|     if [[ ${@} == -* ]]; then | ||||
|         autojump ${@} | ||||
|         return | ||||
| @ -50,46 +35,45 @@ j() { | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # jump to child directory (subdirectory of current path) | ||||
| jc() { | ||||
|     if [[ ${@} == -* ]]; then | ||||
|         j ${@} | ||||
|     else | ||||
|         j $(pwd)/ ${@} | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| jo() { | ||||
|     if [[ ${@} == -* ]]; then | ||||
|         j ${@} | ||||
|         autojump ${@} | ||||
|         return | ||||
|     fi | ||||
| 
 | ||||
|     if [ -z $(autojump $@) ]; then | ||||
|         echo "autojump: directory '${@}' not found" | ||||
|         echo "Try \`autojump --help\` for more information." | ||||
|         false | ||||
|     else | ||||
|         case ${OSTYPE} in | ||||
|             linux-gnu) | ||||
|                 xdg-open "$(autojump $@)" | ||||
|                 ;; | ||||
|             darwin*) | ||||
|                 open "$(autojump $@)" | ||||
|                 ;; | ||||
|             cygwin) | ||||
|                 cygstart "" $(cygpath -w -a $(pwd)) | ||||
|                 ;; | ||||
|             *) | ||||
|                 echo "Unknown operating system." 1>&2 | ||||
|                 ;; | ||||
|         esac | ||||
|     fi | ||||
|     j $(pwd)/ ${@} | ||||
| } | ||||
| 
 | ||||
| # open autojump results in file browser | ||||
| jo() { | ||||
|     if [[ ${@} == -* ]]; then | ||||
|         autojump ${@} | ||||
|         return | ||||
|     fi | ||||
| 
 | ||||
|     case ${OSTYPE} in | ||||
|         linux-gnu) | ||||
|             xdg-open "$(autojump $@)" | ||||
|             ;; | ||||
|         darwin*) | ||||
|             open "$(autojump $@)" | ||||
|             ;; | ||||
|         cygwin) | ||||
|             cygstart "" $(cygpath -w -a $(pwd)) | ||||
|             ;; | ||||
|         *) | ||||
|             echo "Unknown operating system." 1>&2 | ||||
|             ;; | ||||
|     esac | ||||
| } | ||||
| 
 | ||||
| # open autojump results (child directory) in file browser | ||||
| jco() { | ||||
|     if [[ ${@} == -* ]]; then | ||||
|         j ${@} | ||||
|     else | ||||
|         jo $(pwd) ${@} | ||||
|         autojump ${@} | ||||
|         return | ||||
|     fi | ||||
| 
 | ||||
|     jo $(pwd)/ ${@} | ||||
| } | ||||
|  | ||||
| @ -65,17 +65,22 @@ def get_tab_needle_and_path(tab_entry, separator): | ||||
| 
 | ||||
|         [needle]__[index]__[path] | ||||
|     """ | ||||
|     matches = re.search( | ||||
|             r'(.*?)' + | ||||
|             separator + | ||||
|             r'[0-9]{1}' + | ||||
|             separator + | ||||
|             r'(.*)', | ||||
|     match_needle = re.search(r'(.*?)' + separator, tab_entry) | ||||
|     match_path = re.search( | ||||
|             separator + r'[0-9]{1}' + separator + r'(.*)', | ||||
|             tab_entry) | ||||
| 
 | ||||
|     if matches: | ||||
|         return matches.groups() | ||||
|     return None, None | ||||
|     if match_needle: | ||||
|         tab_needle = match_needle.group(1) | ||||
|     else: | ||||
|         tab_needle = None | ||||
| 
 | ||||
|     if match_path: | ||||
|         path = match_path.group(1) | ||||
|     else: | ||||
|         path = None | ||||
| 
 | ||||
|     return tab_needle, path | ||||
| 
 | ||||
| 
 | ||||
| def get_pwd(): | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user