mirror of
https://github.com/wting/autojump
synced 2024-10-27 20:34:07 +00:00
simplified main() a bit
This commit is contained in:
parent
a8057ed1db
commit
a9bf6dc608
56
bin/autojump
56
bin/autojump
@ -48,13 +48,10 @@ from data import save
|
|||||||
from utils import decode
|
from utils import decode
|
||||||
from utils import encode_local
|
from utils import encode_local
|
||||||
from utils import first
|
from utils import first
|
||||||
from utils import get_needle
|
from utils import get_tab_needle_and_path
|
||||||
from utils import get_needle_and_index
|
|
||||||
from utils import get_pwd
|
from utils import get_pwd
|
||||||
from utils import has_uppercase
|
from utils import has_uppercase
|
||||||
from utils import is_osx
|
from utils import is_osx
|
||||||
from utils import is_tab_entry
|
|
||||||
from utils import is_tab_partial_match
|
|
||||||
from utils import last
|
from utils import last
|
||||||
from utils import print_entry
|
from utils import print_entry
|
||||||
from utils import print_tab_menu
|
from utils import print_tab_menu
|
||||||
@ -193,6 +190,23 @@ def find_matches(entries, needles):
|
|||||||
[Entry('.', 0)]))
|
[Entry('.', 0)]))
|
||||||
|
|
||||||
|
|
||||||
|
def handle_no_arguments(needle, needles, entries):
|
||||||
|
tab_needle, path = get_tab_needle_and_path(needle, TAB_SEPARATOR)
|
||||||
|
|
||||||
|
if path:
|
||||||
|
# found complete tab completion entry
|
||||||
|
print(encode_local(surround_quotes(path)))
|
||||||
|
elif tab_needle:
|
||||||
|
# found partial tab completion entry
|
||||||
|
print_tab_menu(
|
||||||
|
tab_needle,
|
||||||
|
take(TAB_ENTRIES_COUNT, find_matches(entries, tab_needle)),
|
||||||
|
TAB_SEPARATOR)
|
||||||
|
else:
|
||||||
|
print(encode_local(surround_quotes(
|
||||||
|
first(find_matches(entries, needles)).path)))
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
@ -323,6 +337,7 @@ def print_stats(data, data_path):
|
|||||||
def main(args):
|
def main(args):
|
||||||
config = set_defaults()
|
config = set_defaults()
|
||||||
|
|
||||||
|
# all arguments are mutually exclusive
|
||||||
if args.add:
|
if args.add:
|
||||||
save(config, first(add_path(load(config), args.add)))
|
save(config, first(add_path(load(config), args.add)))
|
||||||
elif args.complete:
|
elif args.complete:
|
||||||
@ -346,38 +361,15 @@ def main(args):
|
|||||||
print("Purged %d entries." % (len(old_data) - len(new_data)))
|
print("Purged %d entries." % (len(old_data) - len(new_data)))
|
||||||
elif args.stat:
|
elif args.stat:
|
||||||
print_stats(load(config), config['data_path'])
|
print_stats(load(config), config['data_path'])
|
||||||
|
elif not args.directory:
|
||||||
|
# default return value so calling shell functions have an argument
|
||||||
|
# to `cd` to
|
||||||
|
print(encode_local('.'))
|
||||||
else:
|
else:
|
||||||
if not args.directory:
|
|
||||||
# default return value so calling shell functions have an
|
|
||||||
# argument to `cd` to
|
|
||||||
print(encode_local('.'))
|
|
||||||
return 0
|
|
||||||
|
|
||||||
entries = entriefy(load(config))
|
entries = entriefy(load(config))
|
||||||
needles = sanitize(args.directory)
|
needles = sanitize(args.directory)
|
||||||
needle = first(needles)
|
needle = first(needles)
|
||||||
|
handle_no_arguments(needle, needles, entries)
|
||||||
if is_tab_entry(needle, TAB_SEPARATOR):
|
|
||||||
# the needle is a tab_entry
|
|
||||||
needle, tab_index = get_needle_and_index(needle, TAB_SEPARATOR)
|
|
||||||
tab_entries = take(
|
|
||||||
TAB_ENTRIES_COUNT,
|
|
||||||
find_matches(entries, needle))
|
|
||||||
|
|
||||||
get_ith_path = lambda i, iterable: last(take(i, iterable)).path
|
|
||||||
print(encode_local(surround_quotes(
|
|
||||||
get_ith_path(tab_index, tab_entries))))
|
|
||||||
elif is_tab_partial_match(needle, TAB_SEPARATOR):
|
|
||||||
# the needle is a partial tab_entry
|
|
||||||
needle = get_needle(needle, TAB_SEPARATOR)
|
|
||||||
tab_entries = take(
|
|
||||||
TAB_ENTRIES_COUNT,
|
|
||||||
find_matches(entriefy(load(config)), needle))
|
|
||||||
print_tab_menu(needle, tab_entries, TAB_SEPARATOR)
|
|
||||||
else:
|
|
||||||
# default behavior
|
|
||||||
print(encode_local(surround_quotes(
|
|
||||||
first(find_matches(entries, needles)).path)))
|
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
46
bin/utils.py
46
bin/utils.py
@ -59,27 +59,23 @@ def first(xs):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_needle(tab_entry, separator):
|
def get_tab_needle_and_path(tab_entry, separator):
|
||||||
"""
|
"""
|
||||||
Given a partial tab entry in the following format return the needle:
|
Given a tab entry in the following format return the needle and path:
|
||||||
|
|
||||||
[needle]__
|
[needle]__[index]__[path]
|
||||||
"""
|
|
||||||
return re.match(r'(.*)' + separator, tab_entry).group(1)
|
|
||||||
|
|
||||||
|
|
||||||
def get_needle_and_index(tab_entry, separator):
|
|
||||||
"""
|
|
||||||
Given a tab entry in the following format return the needle and index:
|
|
||||||
|
|
||||||
[needle]__[index]__[possible_match]
|
|
||||||
"""
|
"""
|
||||||
matches = re.search(
|
matches = re.search(
|
||||||
r'(.*)' +
|
r'(.*?)' +
|
||||||
separator +
|
separator +
|
||||||
r'([0-9]{1})' +
|
r'[0-9]{1}' +
|
||||||
separator, tab_entry)
|
separator +
|
||||||
return matches.group(1), int(matches.group(2))
|
r'(.*)',
|
||||||
|
tab_entry)
|
||||||
|
|
||||||
|
if matches:
|
||||||
|
return matches.groups()
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
|
||||||
def get_pwd():
|
def get_pwd():
|
||||||
@ -116,24 +112,6 @@ def is_osx():
|
|||||||
return platform.system() == 'Darwin'
|
return platform.system() == 'Darwin'
|
||||||
|
|
||||||
|
|
||||||
def is_tab_entry(needle, separator):
|
|
||||||
"""
|
|
||||||
Valid tab entry:
|
|
||||||
|
|
||||||
[needle]__[index]__[possible_match]
|
|
||||||
"""
|
|
||||||
pattern = re.compile(
|
|
||||||
'.*' +
|
|
||||||
separator +
|
|
||||||
'[0-9]{1}' +
|
|
||||||
separator)
|
|
||||||
return re.search(pattern, needle)
|
|
||||||
|
|
||||||
|
|
||||||
def is_tab_partial_match(needle, separator):
|
|
||||||
return re.match(r'(.*)' + separator, needle)
|
|
||||||
|
|
||||||
|
|
||||||
def is_windows():
|
def is_windows():
|
||||||
return platform.system() == 'Windows'
|
return platform.system() == 'Windows'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user