Skip to content

Commit

Permalink
Merge pull request #409 from nvbn/394-history-limit
Browse files Browse the repository at this point in the history
#394 history limit
  • Loading branch information
nvbn committed Nov 19, 2015
2 parents 1bb04b4 + 2fea0d4 commit b3e9b36
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 14 deletions.
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,8 @@ The Fuck has a few settings parameters which can be changed in `$XDG_CONFIG_HOME
* `wait_command` – max amount of time in seconds for getting previous command output;
* `no_colors` – disable colored output;
* `priority` – dict with rules priorities, rule with lower `priority` will be matched first;
* `debug` – enables debug output, by default `False`.
* `debug` – enables debug output, by default `False`;
* `history_limit` &ndash numeric value of how many history commands will be scanned, like `2000`;

Example of `settings.py`:

Expand All @@ -303,7 +304,8 @@ Or via environment variables:
* `THEFUCK_NO_COLORS` – disable colored output, `true/false`;
* `THEFUCK_PRIORITY` – priority of the rules, like `no_command=9999:apt_get=100`,
rule with lower `priority` will be matched first;
* `THEFUCK_DEBUG` – enables debug output, `true/false`.
* `THEFUCK_DEBUG` – enables debug output, `true/false`;
* `THEFUCK_HISTORY_LIMIT` – how many history commands will be scanned, like `2000`.

For example:

Expand All @@ -314,6 +316,7 @@ export THEFUCK_REQUIRE_CONFIRMATION='true'
export THEFUCK_WAIT_COMMAND=10
export THEFUCK_NO_COLORS='false'
export THEFUCK_PRIORITY='no_command=9999:apt_get=100'
export THEFUCK_HISTORY_LIMIT='2000'
```

## Developing
Expand Down
2 changes: 1 addition & 1 deletion tests/test_shells.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def history_lines(mocker):
def aux(lines):
mock = mocker.patch('io.open')
mock.return_value.__enter__\
.return_value.__iter__.return_value = lines
.return_value.readlines.return_value = lines
return aux


Expand Down
6 changes: 5 additions & 1 deletion thefuck/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
'no_colors': False,
'debug': False,
'priority': {},
'history_limit': None,
'env': {'LC_ALL': 'C', 'LANG': 'C', 'GIT_TRACE': '1'}}

ENV_TO_ATTR = {'THEFUCK_RULES': 'rules',
Expand All @@ -24,7 +25,8 @@
'THEFUCK_REQUIRE_CONFIRMATION': 'require_confirmation',
'THEFUCK_NO_COLORS': 'no_colors',
'THEFUCK_PRIORITY': 'priority',
'THEFUCK_DEBUG': 'debug'}
'THEFUCK_DEBUG': 'debug',
'THEFUCK_HISTORY_LIMIT': 'history_limit'}

SETTINGS_HEADER = u"""# The Fuck settings file
#
Expand Down Expand Up @@ -126,6 +128,8 @@ def _val_from_env(self, env, attr):
return int(val)
elif attr in ('require_confirmation', 'no_colors', 'debug'):
return val.lower() == 'true'
elif attr == 'history_limit':
return int(val)
else:
return val

Expand Down
18 changes: 8 additions & 10 deletions thefuck/shells.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import shlex
import six
from .utils import DEVNULL, memoize, cache
from .conf import settings


class Generic(object):
Expand Down Expand Up @@ -52,21 +53,18 @@ def put_to_history(self, command_script):
with open(history_file_name, 'a') as history:
history.write(self._get_history_line(command_script))

def _script_from_history(self, line):
"""Returns prepared history line.
Should return a blank line if history line is corrupted or empty.
"""
return ''

def get_history(self):
"""Returns list of history entries."""
history_file_name = self._get_history_file_name()
if os.path.isfile(history_file_name):
with io.open(history_file_name, 'r',
encoding='utf-8', errors='ignore') as history:
for line in history:
encoding='utf-8', errors='ignore') as history_file:

lines = history_file.readlines()
if settings.history_limit:
lines = lines[-settings.history_limit:]

for line in lines:
prepared = self._script_from_history(line)\
.strip()
if prepared:
Expand Down

0 comments on commit b3e9b36

Please sign in to comment.