mirror of
				https://github.com/wting/autojump
				synced 2025-06-13 12:54:07 +00:00 
			
		
		
		
	Improved handling multiple directory needles
This commit is contained in:
		
							parent
							
								
									0ecf1b4e3b
								
							
						
					
					
						commit
						575b14a13f
					
				@ -20,14 +20,15 @@ else:
 | 
				
			|||||||
def match_anywhere(needles, haystack, ignore_case=False):
 | 
					def match_anywhere(needles, haystack, ignore_case=False):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    Matches needles anywhere in the path as long as they're in the same (but
 | 
					    Matches needles anywhere in the path as long as they're in the same (but
 | 
				
			||||||
    not necessary consecutive) order.
 | 
					    not necessary consecutive) order, and the last needle is at the end.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    For example:
 | 
					    For example:
 | 
				
			||||||
        needles = ['foo', 'baz']
 | 
					        needles = ['foo', 'baz']
 | 
				
			||||||
        regex needle = r'.*foo.*baz.*'
 | 
					        regex needle = r'foo.*/.*baz[^/]*$'
 | 
				
			||||||
        haystack = [
 | 
					        haystack = [
 | 
				
			||||||
            (path='/foo/bar/baz', weight=10),
 | 
					            (path='/foo/bar/baz', weight=10),
 | 
				
			||||||
            (path='/baz/foo/bar', weight=10),
 | 
					            (path='/baz/foo/bar', weight=10),
 | 
				
			||||||
 | 
					            (path='/foo/baz/bar', weight=11),
 | 
				
			||||||
            (path='/foo/baz', weight=10),
 | 
					            (path='/foo/baz', weight=10),
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -36,8 +37,9 @@ def match_anywhere(needles, haystack, ignore_case=False):
 | 
				
			|||||||
            (path='/foo/baz', weight=10),
 | 
					            (path='/foo/baz', weight=10),
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    regex_needle = '.*' + '.*'.join(imap(re.escape, needles)) + '.*'
 | 
					    regex_some_seps = '.*' + os.sep + '.*'
 | 
				
			||||||
    regex_flags = re.IGNORECASE | re.UNICODE if ignore_case else re.UNICODE
 | 
					    regex_no_sep_end = '[^' + os.sep + ']*$'
 | 
				
			||||||
 | 
					    regex_needle = regex_some_seps.join(imap(re.escape, needles)) + regex_no_sep_end
 | 
				
			||||||
    found = lambda haystack: re.search(
 | 
					    found = lambda haystack: re.search(
 | 
				
			||||||
        regex_needle,
 | 
					        regex_needle,
 | 
				
			||||||
        haystack.path,
 | 
					        haystack.path,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user