Skip to content
andychu edited this page Mar 11, 2020 · 58 revisions

Project Goals

Rich Command Shells

Rich Terminals

Models for Integrating Commands and Graphics

IDEs

  • RStudio -- Has a REPL and different types of panes for displaying an interacting with data. Notably, the entire IDE runs on the desktop and it runs in a browser. I think this is done with Google Web Toolkit.
    • Oil will borrow the model of R data frames (as well as borrowing from enhancements like dplyr, data.table)

Protocols

  • List of Jupyter Kernels -- how do they work? There is a bash kernel. How does it do completion? What hooks does oil need to support kernels?
    • IBash Notebook -- Has the ability to display images inline with the display command. Two problems: buffering, and interacting with REPLs you spawn. These seem like pretty big problems.
  • Microsoft's Language Server Protocol
    • Protocol History -- Is this suitable for shell? Oil will have functions, so at the very least we want to complete function arguments, as well as command line arguments. I think common queries are for declarations and uses, which apply in big shell programs as well.

JavaScript Libraries for the Browser

Implementation Issues

  • Buttery Smooth Emacs -- nice observations about legacy architectural decisions and fixes for them!

  • Adventures in Terminal Emulators -- terminal emulators involve parsing, keyboard/graphics, and Unix/libc interaction

  • Typing with Pleasure -- Nice article about typing latency. I can feel the difference in typing latency when I hit Ctrl-Alt-F1 for a text mode terminal vs. when I'm in an Ubuntu desktop, and especially a web browser.

  • Terminal and Shell Performance -- Latency distribution for different terminal emulators. How did he measure it?

Essays / Articles

Learning from Terminals to Design the Future of User Interfaces -- I agree with almost all these ideas. Current UIs are bloated and slow. Terminals are good but limited. They need graphics, images, tables, mouse interactivity, etc.

Projects

Clone this wiki locally