mirror of
https://github.com/wting/autojump
synced 2024-10-27 20:34:07 +00:00
refactor config
This commit is contained in:
parent
5838226923
commit
6ce1790e8f
84
bin/autojump
84
bin/autojump
@ -162,7 +162,7 @@ class Database:
|
|||||||
def get_weight(self, path):
|
def get_weight(self, path):
|
||||||
return self.data[path]
|
return self.data[path]
|
||||||
|
|
||||||
def maintenance(self):
|
def maintenance(self, max_paths=1000, decay_rate=0.1):
|
||||||
"""
|
"""
|
||||||
Decay weights by 10%, periodically remove bottom 10% entries.
|
Decay weights by 10%, periodically remove bottom 10% entries.
|
||||||
"""
|
"""
|
||||||
@ -172,9 +172,9 @@ class Database:
|
|||||||
items = self.data.items()
|
items = self.data.items()
|
||||||
|
|
||||||
for path, _ in items:
|
for path, _ in items:
|
||||||
self.data[path] *= 0.9
|
self.data[path] *= (1 - decay_rate)
|
||||||
|
|
||||||
if len(self.data) > self.config['max_paths']:
|
if len(self.data) > max_paths:
|
||||||
remove_cnt = int(0.1 * len(self.data))
|
remove_cnt = int(0.1 * len(self.data))
|
||||||
for path in sorted(self.data, key=self.data.get)[:remove_cnt]:
|
for path in sorted(self.data, key=self.data.get)[:remove_cnt]:
|
||||||
del self.data[path]
|
del self.data[path]
|
||||||
@ -195,46 +195,50 @@ class Database:
|
|||||||
self.save()
|
self.save()
|
||||||
return removed
|
return removed
|
||||||
|
|
||||||
def config_defaults():
|
def get_env_var(env_var, default=None):
|
||||||
config = {}
|
"""
|
||||||
|
If an environment variable is present, '0' or 'false' will evaluate to
|
||||||
|
False, everything else is True.
|
||||||
|
|
||||||
config['version'] = 'release-v21.7.0'
|
If an environment variable is not present, will return default.
|
||||||
config['max_paths'] = 1000
|
"""
|
||||||
config['separator'] = '__'
|
value = os.environ.get(env_var)
|
||||||
config['home'] = os.path.expanduser('~')
|
if value:
|
||||||
|
if value == '0' or value.lower() == 'false':
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return default
|
||||||
|
|
||||||
config['ignore_case'] = False
|
def get_config():
|
||||||
config['keep_symlinks'] = False
|
"""
|
||||||
# TODO(ting|2013-07-06): remove debug flag
|
Set defaults and update with environmental variables.
|
||||||
config['debug'] = False
|
"""
|
||||||
config['match_cnt'] = 1
|
config = dict(
|
||||||
|
version = 'release-v21.7.0',
|
||||||
|
separator = '__',
|
||||||
|
home = os.path.expanduser('~'),
|
||||||
|
match_cnt = 1,
|
||||||
|
ignore_case = get_env_var('AUTOJUMP_IGNORE_CASE', False),
|
||||||
|
keep_symlinks = get_env_var('AUTOJUMP_KEEP_SYMLINKS', False),
|
||||||
|
)
|
||||||
|
|
||||||
xdg_data = os.environ.get('XDG_DATA_HOME') or \
|
xdg_data = os.environ.get(
|
||||||
|
'XDG_DATA_HOME',
|
||||||
os.path.join(config['home'], '.local', 'share')
|
os.path.join(config['home'], '.local', 'share')
|
||||||
config['data'] = os.path.join(xdg_data, 'autojump')
|
)
|
||||||
|
|
||||||
|
config['data'] = os.environ.get(
|
||||||
|
'AUTOJUMP_DATA_DIR',
|
||||||
|
os.path.join(xdg_data, 'autojump')
|
||||||
|
)
|
||||||
|
|
||||||
|
# TODO(ting|2013-07-13): switch to database.txt
|
||||||
config['db'] = config['data'] + '/autojump.txt'
|
config['db'] = config['data'] + '/autojump.txt'
|
||||||
|
|
||||||
return config
|
return config
|
||||||
|
|
||||||
def parse_env_args(config):
|
|
||||||
# TODO(ting|2013-07-06): refactor with .get() defaults
|
|
||||||
if 'AUTOJUMP_DATA_DIR' in os.environ:
|
|
||||||
config['data'] = os.environ.get('AUTOJUMP_DATA_DIR')
|
|
||||||
config['db'] = config['data'] + '/autojump.txt'
|
|
||||||
|
|
||||||
if config['data'] == config['home']:
|
|
||||||
config['db'] = config['data'] + '/.autojump.txt'
|
|
||||||
|
|
||||||
if 'AUTOJUMP_IGNORE_CASE' in os.environ and \
|
|
||||||
os.environ.get('AUTOJUMP_IGNORE_CASE') == '1':
|
|
||||||
config['ignore_case'] = True
|
|
||||||
|
|
||||||
if 'AUTOJUMP_KEEP_SYMLINKS' in os.environ and \
|
|
||||||
os.environ.get('AUTOJUMP_KEEP_SYMLINKS') == '1':
|
|
||||||
config['keep_symlinks'] = True
|
|
||||||
|
|
||||||
return config
|
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description='Automatically jump to directory passed as an argument.',
|
description='Automatically jump to directory passed as an argument.',
|
||||||
@ -269,6 +273,8 @@ def parse_args():
|
|||||||
'-v', '--version', action="version", version="%(prog)s " +
|
'-v', '--version', action="version", version="%(prog)s " +
|
||||||
config['version'], help='show version information and exit')
|
config['version'], help='show version information and exit')
|
||||||
|
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
# TODO(ting|2013-07-06): move logic outside of function
|
# TODO(ting|2013-07-06): move logic outside of function
|
||||||
# return parser.parse_args()
|
# return parser.parse_args()
|
||||||
# config = parse_env_args(config_defaults())
|
# config = parse_env_args(config_defaults())
|
||||||
@ -429,10 +435,10 @@ def find_matches(config, db, patterns, ignore_case=False, fuzzy=False):
|
|||||||
return results
|
return results
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
# TODO(ting|2013-07-06): replace with ChainMap (Python 3.3+)
|
config = get_config()
|
||||||
# config = parse_env_args(config_defaults())
|
args = parse_args()
|
||||||
# args = parse_args()
|
|
||||||
config = parse_args(parse_env_args(config_defaults()))
|
# config = parse_args(parse_env_args(config_defaults()))
|
||||||
|
|
||||||
sep = config['separator']
|
sep = config['separator']
|
||||||
db = Database(config)
|
db = Database(config)
|
||||||
|
Loading…
Reference in New Issue
Block a user