mirror of
				https://github.com/nvbn/thefuck.git
				synced 2025-10-30 22:54:14 +00:00 
			
		
		
		
	Parse command line with shlex
I put that in shells so that weird shells might try to parse it differently.
This commit is contained in:
		| @@ -1,6 +1,6 @@ | ||||
| """Module with shell specific actions, each shell class should | ||||
| implement `from_shell`, `to_shell`, `app_alias`, `put_to_history` and `get_aliases` | ||||
| methods. | ||||
| implement `from_shell`, `to_shell`, `app_alias`, `put_to_history` and | ||||
| `get_aliases` methods. | ||||
|  | ||||
| """ | ||||
| from collections import defaultdict | ||||
| @@ -9,6 +9,7 @@ from subprocess import Popen, PIPE | ||||
| from time import time | ||||
| import io | ||||
| import os | ||||
| import shlex | ||||
| from .utils import DEVNULL, memoize, cache | ||||
|  | ||||
|  | ||||
| @@ -75,6 +76,10 @@ class Generic(object): | ||||
|     def how_to_configure(self): | ||||
|         return | ||||
|  | ||||
|     def split_command(self, command): | ||||
|         """Split the command using shell-like syntax.""" | ||||
|         return shlex.split(command) | ||||
|  | ||||
|  | ||||
| class Bash(Generic): | ||||
|     def app_alias(self, fuck): | ||||
| @@ -285,9 +290,14 @@ def get_aliases(): | ||||
|     return list(_get_shell().get_aliases().keys()) | ||||
|  | ||||
|  | ||||
| def split_command(command): | ||||
|     return _get_shell().split_command(command) | ||||
|  | ||||
|  | ||||
| @memoize | ||||
| def get_history(): | ||||
|     return list(_get_shell().get_history()) | ||||
|  | ||||
|  | ||||
| def how_to_configure(): | ||||
|     return _get_shell().how_to_configure() | ||||
|   | ||||
| @@ -1,13 +1,13 @@ | ||||
| from imp import load_source | ||||
| import os | ||||
| from subprocess import Popen, PIPE | ||||
| import sys | ||||
| from psutil import Process, TimeoutExpired | ||||
| import six | ||||
| from .conf import settings, DEFAULT_PRIORITY, ALL_ENABLED | ||||
| from .utils import compatibility_call | ||||
| from .exceptions import EmptyCommand | ||||
| from . import logs, shells | ||||
| from .conf import settings, DEFAULT_PRIORITY, ALL_ENABLED | ||||
| from .exceptions import EmptyCommand | ||||
| from .utils import compatibility_call | ||||
| from imp import load_source | ||||
| from psutil import Process, TimeoutExpired | ||||
| from subprocess import Popen, PIPE | ||||
| import os | ||||
| import six | ||||
| import sys | ||||
|  | ||||
|  | ||||
| class Command(object): | ||||
| @@ -21,10 +21,23 @@ class Command(object): | ||||
|         :type stderr: basestring | ||||
|  | ||||
|         """ | ||||
|         self.script = script | ||||
|         self._script = script | ||||
|         self.stdout = stdout | ||||
|         self.stderr = stderr | ||||
|  | ||||
|         try: | ||||
|             self._split_script = shells.split_command(script) | ||||
|         except: | ||||
|             self._split_script = None | ||||
|  | ||||
|     @property | ||||
|     def script(self): | ||||
|         return self._script | ||||
|  | ||||
|     @property | ||||
|     def split_script(self): | ||||
|         return self._split_script | ||||
|  | ||||
|     def __eq__(self, other): | ||||
|         if isinstance(other, Command): | ||||
|             return (self.script, self.stdout, self.stderr) \ | ||||
|   | ||||
| @@ -146,10 +146,10 @@ def replace_command(command, broken, matched): | ||||
| @memoize | ||||
| def is_app(command, *app_names): | ||||
|     """Returns `True` if command is call to one of passed app names.""" | ||||
|     for name in app_names: | ||||
|         if command.script == name \ | ||||
|                 or command.script.startswith(u'{} '.format(name)): | ||||
|             return True | ||||
|     if command.split_script is not None and len(command.split_script) > 0: | ||||
|         app = command.split_script[0] | ||||
|         return app in app_names | ||||
|  | ||||
|     return False | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user