mirror of
https://github.com/nvbn/thefuck.git
synced 2025-02-20 20:09:07 +00:00
#68 Add rule for switching layout
This commit is contained in:
parent
5ccf163594
commit
e7d5d93056
@ -158,7 +158,8 @@ using matched rule and run it. Rules enabled by default:
|
||||
* `no_command` – fixes wrong console commands, for example `vom/vim`;
|
||||
* `python_command` – prepends `python` when you trying to run not executable/without `./` python script;
|
||||
* `rm_dir` – adds `-rf` when you trying to remove directory;
|
||||
* `sudo` – prepends `sudo` to previous command if it failed because of permissions.
|
||||
* `sudo` – prepends `sudo` to previous command if it failed because of permissions;
|
||||
* `switch_layout` – switches command from your local layout to en.
|
||||
|
||||
## Creating your own rules
|
||||
|
||||
|
2
setup.py
2
setup.py
@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
|
||||
setup(name='thefuck',
|
||||
version=1.15,
|
||||
version=1.16,
|
||||
description="Magnificent app which corrects your previous console command",
|
||||
author='Vladimir Iakovlev',
|
||||
author_email='nvbn.rm@gmail.com',
|
||||
|
18
tests/rules/test_switch_lang.py
Normal file
18
tests/rules/test_switch_lang.py
Normal file
@ -0,0 +1,18 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
from mock import Mock
|
||||
from thefuck.rules import switch_lang
|
||||
|
||||
|
||||
def test_match():
|
||||
assert switch_lang.match(Mock(stderr='command not found: фзе-пуе',
|
||||
script=u'фзе-пуе'), None)
|
||||
assert not switch_lang.match(Mock(stderr='command not found: pat-get',
|
||||
script=u'pat-get'), None)
|
||||
assert not switch_lang.match(Mock(stderr='some info',
|
||||
script=u'фзе-пуе'), None)
|
||||
|
||||
|
||||
def test_get_new_command():
|
||||
assert switch_lang.get_new_command(
|
||||
Mock(script=u'фзе-пуе штыефдд мшь'), None) == 'apt-get install vim'
|
29
thefuck/rules/switch_lang.py
Normal file
29
thefuck/rules/switch_lang.py
Normal file
@ -0,0 +1,29 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
target_layout = '''qwertyuiop[]asdfghjkl;'zxcvbnm,./QWERTYUIOP{}ASDFGHJKL:"ZXCVBNM<>?'''
|
||||
|
||||
source_layouts = [u'''йцукенгшщзхъфывапролджэячсмитьбю.ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,''']
|
||||
|
||||
|
||||
def _get_matched_layout(command):
|
||||
for source_layout in source_layouts:
|
||||
if all([ch in source_layout or ch in '-_'
|
||||
for ch in command.script.split(' ')[0]]):
|
||||
return source_layout
|
||||
|
||||
|
||||
def match(command, settings):
|
||||
return 'not found' in command.stderr and _get_matched_layout(command)
|
||||
|
||||
|
||||
def _switch(ch, layout):
|
||||
if ch in layout:
|
||||
return target_layout[layout.index(ch)]
|
||||
else:
|
||||
return ch
|
||||
|
||||
|
||||
def get_new_command(command, settings):
|
||||
matched_layout = _get_matched_layout(command)
|
||||
return ''.join(_switch(ch, matched_layout) for ch in command.script)
|
||||
|
Loading…
x
Reference in New Issue
Block a user