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