reverse history commands in all backends

This commit is contained in:
Morten Enemark Lund 2018-08-14 09:58:19 +02:00
parent eda7c4b186
commit ca2e9361e1
5 changed files with 23 additions and 17 deletions

View file

@ -114,11 +114,11 @@ class History:
"""Flush the history items to disk from a buffer."""
pass
def items(self):
def items(self, reverse=False):
"""Get history items of current session."""
raise NotImplementedError
def all_items(self):
def all_items(self, reverse=False):
"""Get all history items."""
raise NotImplementedError

View file

@ -9,11 +9,11 @@ class DummyHistory(History):
def append(self, cmd):
pass
def items(self):
def items(self, reverse=False):
yield {'inp': 'dummy in action', 'ts': 1464652800, 'ind': 0}
def all_items(self):
return self.items()
def all_items(self, reverse=False):
return self.items(reverse=reverse)
def info(self):
data = collections.OrderedDict()

View file

@ -379,9 +379,13 @@ class JsonHistory(History):
self.buffer.clear()
return hf
def items(self):
def items(self, reverse=False):
"""Display history items of current session."""
for item, tss in zip(self.inps, self.tss):
if reverse:
items = zip(reversed(self.inps), reversed(self.tss))
else:
items = zip(self.inps, self.tss)
for item, tss in items:
yield {'inp': item.rstrip(), 'ts': tss[0]}
def all_items(self, reverse=False, **kwargs):
@ -406,6 +410,8 @@ class JsonHistory(History):
msg = 'xonsh history file {0!r} is not valid JSON'
print(msg.format(f), file=sys.stderr)
continue
if reverse:
commands = reversed(commands)
for c in commands:
yield {'inp': c['inp'].rstrip(), 'ts': c['ts'][0]}
# all items should also include session items

View file

@ -40,18 +40,18 @@ def construct_history(**kwargs):
return kls_history(**kwargs)
def _xh_session_parser(hist=None, **kwargs):
def _xh_session_parser(hist=None, reverse=False, **kwargs):
"""Returns history items of current session."""
if hist is None:
hist = builtins.__xonsh_history__
return hist.items()
return hist.items(reverse=reverse)
def _xh_all_parser(hist=None, **kwargs):
def _xh_all_parser(hist=None, reverse=False, **kwargs):
"""Returns all history items."""
if hist is None:
hist = builtins.__xonsh_history__
return hist.all_items()
return hist.all_items(reverse=reverse)
def _xh_find_histfile_var(file_list, default=None):

View file

@ -121,11 +121,11 @@ def xh_sqlite_get_count(sessionid=None, filename=None):
return _xh_sqlite_get_count(c, sessionid=sessionid)
def xh_sqlite_items(sessionid=None, filename=None):
def xh_sqlite_items(sessionid=None, filename=None, reverse=False):
with _xh_sqlite_get_conn(filename=filename) as conn:
c = conn.cursor()
_xh_sqlite_create_history_table(c)
return _xh_sqlite_get_records(c, sessionid=sessionid)
return _xh_sqlite_get_records(c, sessionid=sessionid, reverse=reverse)
def xh_sqlite_delete_items(size_to_keep, filename=None):
@ -208,15 +208,15 @@ class SqliteHistory(History):
cmd, str(self.sessionid), store_stdout,
filename=self.filename)
def all_items(self):
def all_items(self, reverse=False):
"""Display all history items."""
for item in xh_sqlite_items(filename=self.filename):
for item in xh_sqlite_items(filename=self.filename, reverse=reverse):
yield {'inp': item[0], 'ts': item[1], 'rtn': item[2]}
def items(self):
def items(self, reverse=False):
"""Display history items of current session."""
for item in xh_sqlite_items(
sessionid=str(self.sessionid), filename=self.filename):
sessionid=str(self.sessionid), filename=self.filename, reverse=reverse):
yield {'inp': item[0], 'ts': item[1], 'rtn': item[2]}
def info(self):