mirror of
				https://github.com/wting/autojump
				synced 2025-06-13 12:54:07 +00:00 
			
		
		
		
	move match last pattern into separate funciton and disabled
This commit is contained in:
		
							parent
							
								
									31001c9456
								
							
						
					
					
						commit
						7343ef1825
					
				
							
								
								
									
										124
									
								
								bin/autojump
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								bin/autojump
									
									
									
									
									
								
							@ -34,6 +34,7 @@ class Database:
 | 
			
		||||
        self.data = {}
 | 
			
		||||
        self.load()
 | 
			
		||||
 | 
			
		||||
    # TODO: increase logarithmically as opposed to linear
 | 
			
		||||
    def add(self, key, increment = 1):
 | 
			
		||||
        """ Increment existing paths or initialize new ones to 0. """
 | 
			
		||||
        self.data[key] = self.data.get(key, 0.) + increment
 | 
			
		||||
@ -207,6 +208,19 @@ def unico(text):
 | 
			
		||||
    else:
 | 
			
		||||
        return unicode(text)
 | 
			
		||||
 | 
			
		||||
def match_last(pattern):
 | 
			
		||||
    """ If the last pattern contains a full path, jump there.
 | 
			
		||||
    The regexp is because we need to support stuff like
 | 
			
		||||
    "j wo jo__3__/home/joel/workspace/joel" for zsh. """
 | 
			
		||||
    last_pattern_path = re.sub("(.*)"+COMPLETION_SEPARATOR, "", pattern[-1])
 | 
			
		||||
    if (len(last_pattern_path) > 0 and
 | 
			
		||||
            last_pattern_path[0] == "/" and
 | 
			
		||||
            os.path.exists(last_pattern_path)):
 | 
			
		||||
        if not ARGS.preserve:
 | 
			
		||||
            output(last_pattern_path)
 | 
			
		||||
            return True
 | 
			
		||||
    return False
 | 
			
		||||
 | 
			
		||||
def match(path, pattern, ignore_case=False, only_end=False):
 | 
			
		||||
    """ Check whether a path matches a particular pattern, and return
 | 
			
		||||
       the remaining part of the string. """
 | 
			
		||||
@ -250,74 +264,70 @@ def shell_utility():
 | 
			
		||||
    options()
 | 
			
		||||
    db = Database(DB_FILE)
 | 
			
		||||
 | 
			
		||||
    #userchoice is i if the pattern is __pattern__i, otherwise -1
 | 
			
		||||
    userchoice = -1
 | 
			
		||||
    results = []
 | 
			
		||||
 | 
			
		||||
    # if no directories, add empty string
 | 
			
		||||
    if (ARGS.directory == ''):
 | 
			
		||||
        patterns = [unico('')]
 | 
			
		||||
    else:
 | 
			
		||||
        patterns = [decode(a) for a in ARGS.directory]
 | 
			
		||||
 | 
			
		||||
    # If the last pattern contains a full path, jump there
 | 
			
		||||
    # The regexp is because we need to support stuff like
 | 
			
		||||
    # "j wo jo__3__/home/joel/workspace/joel" for zsh
 | 
			
		||||
    last_pattern_path = re.sub("(.*)"+COMPLETION_SEPARATOR, "", patterns[-1])
 | 
			
		||||
    if (len(last_pattern_path)>0 and
 | 
			
		||||
            last_pattern_path[0] == "/" and
 | 
			
		||||
            os.path.exists(last_pattern_path)):
 | 
			
		||||
        if not ARGS.complete: output(last_pattern_path)
 | 
			
		||||
    # check last pattern for full path
 | 
			
		||||
    # FIXME: disabled until tab completion is fixed on the shell side
 | 
			
		||||
    # if match_last(patterns): return True
 | 
			
		||||
 | 
			
		||||
    #userchoice is i if the pattern is __pattern__i, otherwise -1
 | 
			
		||||
    userchoice = -1
 | 
			
		||||
    results = []
 | 
			
		||||
 | 
			
		||||
    #check for ongoing completion, and act accordingly
 | 
			
		||||
    endmatch = re.search(COMPLETION_SEPARATOR+"([0-9]+)", patterns[-1])
 | 
			
		||||
    if endmatch:  #user has selected a completion
 | 
			
		||||
        userchoice = int(endmatch.group(1))
 | 
			
		||||
        patterns[-1] = re.sub(COMPLETION_SEPARATOR+"[0-9]+.*",
 | 
			
		||||
                "", patterns[-1])
 | 
			
		||||
    else: #user hasn't selected a completion, display the same choices again
 | 
			
		||||
        endmatch = re.match("(.*)"+COMPLETION_SEPARATOR, patterns[-1])
 | 
			
		||||
        if endmatch: patterns[-1] = endmatch.group(1)
 | 
			
		||||
 | 
			
		||||
    dirs = list(db.data.items())
 | 
			
		||||
    dirs.sort(key=itemgetter(1), reverse=True)
 | 
			
		||||
    if ARGS.complete or userchoice != -1:
 | 
			
		||||
        max_matches = 9
 | 
			
		||||
    else:
 | 
			
		||||
        #check for ongoing completion, and act accordingly
 | 
			
		||||
        endmatch = re.search(COMPLETION_SEPARATOR+"([0-9]+)", patterns[-1])
 | 
			
		||||
        if endmatch:  #user has selected a completion
 | 
			
		||||
            userchoice = int(endmatch.group(1))
 | 
			
		||||
            patterns[-1] = re.sub(COMPLETION_SEPARATOR+"[0-9]+.*",
 | 
			
		||||
                    "", patterns[-1])
 | 
			
		||||
        else: #user hasn't selected a completion, display the same choices again
 | 
			
		||||
            endmatch = re.match("(.*)"+COMPLETION_SEPARATOR, patterns[-1])
 | 
			
		||||
            if endmatch: patterns[-1] = endmatch.group(1)
 | 
			
		||||
        max_matches = 1
 | 
			
		||||
 | 
			
		||||
        dirs = list(db.data.items())
 | 
			
		||||
        dirs.sort(key=itemgetter(1), reverse=True)
 | 
			
		||||
        if ARGS.complete or userchoice != -1:
 | 
			
		||||
            max_matches = 9
 | 
			
		||||
        else:
 | 
			
		||||
            max_matches = 1
 | 
			
		||||
    # Don't jump to the current directory
 | 
			
		||||
    try:
 | 
			
		||||
        current_dir = decode(os.path.realpath(os.curdir))
 | 
			
		||||
    #Sometimes the current path doesn't exist anymore.
 | 
			
		||||
    #In that case, jump if possible.
 | 
			
		||||
    except OSError:
 | 
			
		||||
        current_dir = None
 | 
			
		||||
    find_matches(dirs, patterns, results, False, max_matches, current_dir)
 | 
			
		||||
    # If not found, try ignoring case.
 | 
			
		||||
    # On completion always show all results
 | 
			
		||||
    if ARGS.complete or not results:
 | 
			
		||||
        find_matches(dirs, patterns, results,
 | 
			
		||||
                ignore_case=True,
 | 
			
		||||
                max_matches=max_matches, current_dir=current_dir)
 | 
			
		||||
 | 
			
		||||
        # Don't jump to the current directory
 | 
			
		||||
        try:
 | 
			
		||||
            current_dir = decode(os.path.realpath(os.curdir))
 | 
			
		||||
        #Sometimes the current path doesn't exist anymore.
 | 
			
		||||
        #In that case, jump if possible.
 | 
			
		||||
        except OSError:
 | 
			
		||||
            current_dir = None
 | 
			
		||||
        find_matches(dirs, patterns, results, False, max_matches, current_dir)
 | 
			
		||||
        # If not found, try ignoring case.
 | 
			
		||||
        # On completion always show all results
 | 
			
		||||
        if ARGS.complete or not results:
 | 
			
		||||
            find_matches(dirs, patterns, results,
 | 
			
		||||
                    ignore_case=True,
 | 
			
		||||
                    max_matches=max_matches, current_dir=current_dir)
 | 
			
		||||
    if ARGS.complete and ARGS.bash: quotes = "'"
 | 
			
		||||
    else: quotes = ""
 | 
			
		||||
 | 
			
		||||
        if ARGS.complete and ARGS.bash: quotes = "'"
 | 
			
		||||
        else: quotes = ""
 | 
			
		||||
    if userchoice != -1:
 | 
			
		||||
        if len(results) > userchoice-1 :
 | 
			
		||||
            output(unico("%s%s%s") % (quotes,results[userchoice-1],quotes))
 | 
			
		||||
    elif len(results) > 1 and ARGS.complete:
 | 
			
		||||
        output("\n".join(("%s%s%d%s%s" % (patterns[-1],
 | 
			
		||||
            COMPLETION_SEPARATOR, n+1, COMPLETION_SEPARATOR, r)
 | 
			
		||||
            for n, r in enumerate(results[:8]))))
 | 
			
		||||
    elif results: output(unico("%s%s%s")%(quotes,results[0],quotes))
 | 
			
		||||
    else:
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
        if userchoice != -1:
 | 
			
		||||
            if len(results) > userchoice-1 :
 | 
			
		||||
                output(unico("%s%s%s") % (quotes,results[userchoice-1],quotes))
 | 
			
		||||
        elif len(results) > 1 and ARGS.complete:
 | 
			
		||||
            output("\n".join(("%s%s%d%s%s" % (patterns[-1],
 | 
			
		||||
                COMPLETION_SEPARATOR, n+1, COMPLETION_SEPARATOR, r)
 | 
			
		||||
                for n, r in enumerate(results[:8]))))
 | 
			
		||||
        elif results: output(unico("%s%s%s")%(quotes,results[0],quotes))
 | 
			
		||||
        else:
 | 
			
		||||
            return False
 | 
			
		||||
    if not ARGS.preserve:
 | 
			
		||||
        db.maintenance()
 | 
			
		||||
 | 
			
		||||
        if not ARGS.preserve:
 | 
			
		||||
            db.maintenance()
 | 
			
		||||
 | 
			
		||||
        return True
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    if not shell_utility(): sys.exit(1)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user