Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Anthony Scopatz - xonsh

Anthony Scopatz - xonsh

Xonsh is general purpose shell that combines Python and the best features of Bash, zsh, and fish. Relying only the standard library and PLY, the xonsh language is a strict superset of Python that compiles to a Python AST. The shell provides exciting features such as a rich history, tab completion from bash and man pages, syntax highlighting, auto-suggestion, foreign-function aliases and more!

https://us.pycon.org/2016/schedule/presentation/2046/

PyCon 2016

May 29, 2016
Tweet

More Decks by PyCon 2016

Other Decks in Programming

Transcript

  1. whoami • Prof. Anthony Scopatz - Nuclear Engineering Program, Mechanical

    Eng. Dept. • Python Software Foundation Fellow • Former Numfocus Board Member • ERGS - http://www.ergs.sc.edu
  2. what is xonsh Features include: • Naturally typed environment variables

    • Inherits the environment from BASH • Uses BASH completion for subprocess commands • Regular expression filename globbing • Its own PLY-based lexer and parser • xonsh code parses into a Python AST • You can do all the normal Python things, like arithmetic and importing • Captured and uncaptured subprocesses • Pipes, redirection, and non-blocking subprocess syntax support • Help and superhelp with ? and ?? • Command aliasing • Optional fish-like, prompt-toolkit based interface • Rich history • Color prompts • Low system overhead http://xonsh.org
  3. stages • conceptualization, best(python, bash) • investigation into particulars •

    moral compulsion to act • anger • regret • acceptance
  4. quotes “Just stumbled across xonsh by @scopatz -- holy cow

    it's amazing. I've never been so happy to rewrite a .rc file” - @gilforsyth “I've tweeted about Xonsh before, and finally spent a day using it exclusively. I must have it on ALL PLATFORMS now.” - @wbuthod “@pathogenomenick @btnaughton @lexnederbragt the dark wizardry of @scopatz :-) check out xonsh.org” -@biochemistries
  5. how does it work Traditional language phases • lexer (ply)

    • parser (ply) • syntax tree transformation (xonsh) • compiler (python) • execution (python)
  6. lexer This is trickier than you’d think, because Python is

    not whitespace sensitive inside of expressions, but subprocess commands are: $ ls -l $ ls - l $ ls-l
  7. parser Uses yacc to assemble a xonsh AST built out

    of only Python AST nodes. Let’s xonsh use Python’s exec() & eval(). BASH-isms are translated into calls to functions that are shoved into builtins.
  8. syntax tree transformation To help resolve ambiguity, ls -l, xonsh

    safely attempts a context sensitive parsing.
  9. syntax tree transformation To help resolve ambiguity, ls -l, xonsh

    safely attempts a context sensitive parsing. If the leftmost name is not found in the Python context and the line can be parsed in subprocess mode, the line is wrapped in $[].
  10. syntax tree transformation To help resolve ambiguity, ls -l, xonsh

    safely attempts a context sensitive parsing. If the leftmost name is not found in the Python context and the line can be parsed in subprocess mode, the line is wrapped in $[]. Totally avoidable via $(ls -l) and $[ls -
  11. install - http://xonsh.org conda: $ conda install -c scopatz xonsh

    pip: $ pip install xonsh source: Download the source from github (zip file), then run the following from the source directory, $ python setup.py install and others!