mirror of
https://github.com/wting/autojump
synced 2024-10-27 20:34:07 +00:00
exact match with single argument finished
This commit is contained in:
parent
92b6047962
commit
9112dc97d9
@ -21,8 +21,12 @@
|
|||||||
|
|
||||||
from __future__ import division, print_function
|
from __future__ import division, print_function
|
||||||
|
|
||||||
|
from collections import namedtuple
|
||||||
|
from functools import partial
|
||||||
from itertools import ifilter
|
from itertools import ifilter
|
||||||
|
from itertools import imap
|
||||||
from math import sqrt
|
from math import sqrt
|
||||||
|
from operator import attrgetter
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
@ -30,13 +34,16 @@ import sys
|
|||||||
|
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
|
|
||||||
from data import save
|
|
||||||
from data import load
|
from data import load
|
||||||
|
from data import save
|
||||||
from utils import decode
|
from utils import decode
|
||||||
|
from utils import encode_local
|
||||||
|
from utils import first
|
||||||
from utils import is_osx
|
from utils import is_osx
|
||||||
from utils import print_dir
|
from utils import print_entry
|
||||||
|
|
||||||
VERSION = 'release-v21.8.0'
|
VERSION = 'release-v21.8.0'
|
||||||
|
Entry = namedtuple('Entry', ['path', 'weight'])
|
||||||
|
|
||||||
|
|
||||||
def set_defaults():
|
def set_defaults():
|
||||||
@ -114,7 +121,7 @@ def parse_args(config):
|
|||||||
|
|
||||||
if args.increase:
|
if args.increase:
|
||||||
try:
|
try:
|
||||||
print_dir(add_path(config, os.getcwdu(), args.increase))
|
print_entry(add_path(config, os.getcwdu(), args.increase))
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
except OSError:
|
except OSError:
|
||||||
print("Current directory no longer exists.", file=sys.stderr)
|
print("Current directory no longer exists.", file=sys.stderr)
|
||||||
@ -122,7 +129,7 @@ def parse_args(config):
|
|||||||
|
|
||||||
if args.decrease:
|
if args.decrease:
|
||||||
try:
|
try:
|
||||||
print_dir(decrease_path(config, os.getcwdu(), args.decrease))
|
print_entry(decrease_path(config, os.getcwdu(), args.decrease))
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
except OSError:
|
except OSError:
|
||||||
print("Current directory no longer exists.", file=sys.stderr)
|
print("Current directory no longer exists.", file=sys.stderr)
|
||||||
@ -136,6 +143,9 @@ def parse_args(config):
|
|||||||
print_stats(config)
|
print_stats(config)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
print(encode_local(find_matches(config, args.directory)))
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
# if args.complete:
|
# if args.complete:
|
||||||
# config['match_cnt'] = 9
|
# config['match_cnt'] = 9
|
||||||
# config['ignore_case'] = True
|
# config['ignore_case'] = True
|
||||||
@ -172,6 +182,34 @@ def decrease_path(config, path, increment=15):
|
|||||||
return path, data[path]
|
return path, data[path]
|
||||||
|
|
||||||
|
|
||||||
|
def find_matches(config, needles, count=1):
|
||||||
|
"""Return [count] paths matching needles."""
|
||||||
|
entriefy = lambda tup: Entry(*tup)
|
||||||
|
exists = lambda entry: os.path.exists(entry.path)
|
||||||
|
data = sorted(
|
||||||
|
ifilter(exists, imap(entriefy, load(config).iteritems())),
|
||||||
|
key=attrgetter('weight'),
|
||||||
|
reverse=True)
|
||||||
|
|
||||||
|
print(data[:3])
|
||||||
|
|
||||||
|
# if no arguments, return first path
|
||||||
|
if not needles:
|
||||||
|
return first(data).path
|
||||||
|
|
||||||
|
sanitize = lambda x: decode(x).rstrip(os.sep)
|
||||||
|
needle = first(imap(sanitize, needles))
|
||||||
|
|
||||||
|
exact_matches = match_exact(needle, data)
|
||||||
|
|
||||||
|
return first(exact_matches).path
|
||||||
|
|
||||||
|
|
||||||
|
def match_exact(needle, haystack):
|
||||||
|
find = lambda haystack: needle in haystack.path
|
||||||
|
return ifilter(find, haystack)
|
||||||
|
|
||||||
|
|
||||||
def purge_missing_paths(config):
|
def purge_missing_paths(config):
|
||||||
"""Remove non-existent paths."""
|
"""Remove non-existent paths."""
|
||||||
exists = lambda x: os.path.exists(x[0])
|
exists = lambda x: os.path.exists(x[0])
|
||||||
@ -185,7 +223,7 @@ def print_stats(config):
|
|||||||
data = load(config)
|
data = load(config)
|
||||||
|
|
||||||
for path, weight in sorted(data.iteritems(), key=itemgetter(1)):
|
for path, weight in sorted(data.iteritems(), key=itemgetter(1)):
|
||||||
print_dir(path, weight)
|
print_entry(path, weight)
|
||||||
|
|
||||||
print("________________________________________\n")
|
print("________________________________________\n")
|
||||||
print("%d:\t total weight" % sum(data.itervalues()))
|
print("%d:\t total weight" % sum(data.itervalues()))
|
||||||
|
17
bin/utils.py
17
bin/utils.py
@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
|
from collections import Iterable
|
||||||
import errno
|
import errno
|
||||||
|
from itertools import islice
|
||||||
import os
|
import os
|
||||||
import platform
|
import platform
|
||||||
import shutil
|
import shutil
|
||||||
@ -40,6 +42,14 @@ def encode_local(string, encoding=None):
|
|||||||
return string
|
return string
|
||||||
|
|
||||||
|
|
||||||
|
def first(xs):
|
||||||
|
it = iter(xs)
|
||||||
|
try:
|
||||||
|
return it.next()
|
||||||
|
except StopIteration:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
def is_python2():
|
def is_python2():
|
||||||
return sys.version_info[0] == 2
|
return sys.version_info[0] == 2
|
||||||
|
|
||||||
@ -69,5 +79,10 @@ def move_file(src, dst):
|
|||||||
shutil.move(src, dst)
|
shutil.move(src, dst)
|
||||||
|
|
||||||
|
|
||||||
def print_dir(path, weight):
|
def print_entry(path, weight):
|
||||||
print(encode_local("%.1f:\t%s" % (weight, path)))
|
print(encode_local("%.1f:\t%s" % (weight, path)))
|
||||||
|
|
||||||
|
|
||||||
|
def take(n, iterable):
|
||||||
|
"""Return first n items of an iterable."""
|
||||||
|
return islice(iterable, n)
|
||||||
|
Loading…
Reference in New Issue
Block a user