| 190 | #----------------------------------------------------------------------------- |
| 191 | |
| 192 | class AliasManager(Configurable): |
| 193 | |
| 194 | default_aliases = List(default_aliases()).tag(config=True) |
| 195 | user_aliases = List(default_value=[]).tag(config=True) |
| 196 | shell = Instance('IPython.core.interactiveshell.InteractiveShellABC', allow_none=True) |
| 197 | |
| 198 | def __init__(self, shell=None, **kwargs): |
| 199 | super(AliasManager, self).__init__(shell=shell, **kwargs) |
| 200 | # For convenient access |
| 201 | self.linemagics = self.shell.magics_manager.magics['line'] |
| 202 | self.init_aliases() |
| 203 | |
| 204 | def init_aliases(self): |
| 205 | # Load default & user aliases |
| 206 | for name, cmd in self.default_aliases + self.user_aliases: |
| 207 | if cmd.startswith('ls ') and self.shell.colors == 'NoColor': |
| 208 | cmd = cmd.replace(' --color', '') |
| 209 | self.soft_define_alias(name, cmd) |
| 210 | |
| 211 | @property |
| 212 | def aliases(self): |
| 213 | return [(n, func.cmd) for (n, func) in self.linemagics.items() |
| 214 | if isinstance(func, Alias)] |
| 215 | |
| 216 | def soft_define_alias(self, name, cmd): |
| 217 | """Define an alias, but don't raise on an AliasError.""" |
| 218 | try: |
| 219 | self.define_alias(name, cmd) |
| 220 | except AliasError as e: |
| 221 | error("Invalid alias: %s" % e) |
| 222 | |
| 223 | def define_alias(self, name, cmd): |
| 224 | """Define a new alias after validating it. |
| 225 | |
| 226 | This will raise an :exc:`AliasError` if there are validation |
| 227 | problems. |
| 228 | """ |
| 229 | caller = Alias(shell=self.shell, name=name, cmd=cmd) |
| 230 | self.shell.magics_manager.register_function(caller, magic_kind='line', |
| 231 | magic_name=name) |
| 232 | |
| 233 | def get_alias(self, name): |
| 234 | """Return an alias, or None if no alias by that name exists.""" |
| 235 | aname = self.linemagics.get(name, None) |
| 236 | return aname if isinstance(aname, Alias) else None |
| 237 | |
| 238 | def is_alias(self, name): |
| 239 | """Return whether or not a given name has been defined as an alias""" |
| 240 | return self.get_alias(name) is not None |
| 241 | |
| 242 | def undefine_alias(self, name): |
| 243 | if self.is_alias(name): |
| 244 | del self.linemagics[name] |
| 245 | else: |
| 246 | raise ValueError('%s is not an alias' % name) |
| 247 | |
| 248 | def clear_aliases(self): |
| 249 | for name, cmd in self.aliases: |
no test coverage detected