Quine's fork of "Hyper" by Vercel, A terminal built on web technologies
Find a file
Guillermo Rauch d8e841a3d8 Implement hterm (#28)
* remove legacy css

* hyperterm: delegate rows / cols calculation to hterm

* session: handle pty kill problems

* index: fix memory leak by removing sessions from the map upon exit

* app: remove local copy of `xterm.js`

* term: implement the `hterm` API and some needed overrides

* package: add `hterm-umd`

* hyperterm: add optimistic tab exit

* hyperterm: delegate key combination detection to the hterm <iframe> document

* term: register keyboard

* session: fix incorrect width after resizing and creating a new tab (#13)

* tabs: fix `user-select` css property

* term: fix focus issue when exiting a url

Instead of uninstalling the keyboard, we keep the
focus on the underlying terminal.

We register a new IO handler so that we intercept
all data events.

The reason we need to do this is that we can't
programmatically restore focus on the underlying
terminal unless it's in the same tick as a user
event (ie: click).

Since we were uninstalling the keyboard and
subsequently attempting to reinstall it without
such an event, pressing Ctrl+C after a url was
effectively resulting in a loss of focus and a
horrible horrible experience.

Now it's fixed :)

* text-metrics: remove module no longer used

hterm has a much better calculation technique anyways

* term: fix default bg

* term: fix nasty hterm bug that triggered an infinite copy loop

* index: add separator in `View` menu for full screen item

* term: implement cmd+K clearing and improve hterm's `wipeContents`
2016-07-03 13:35:45 -07:00
app Implement hterm (#28) 2016-07-03 13:35:45 -07:00
.gitignore Minor improvements (#15) 2016-07-02 12:03:45 -07:00
HISTORY.md Minor improvements (#15) 2016-07-02 12:03:45 -07:00
icon.icns icon 2016-07-01 15:44:50 -07:00
index.js Implement hterm (#28) 2016-07-03 13:35:45 -07:00
install.sh install all deps 2016-07-01 16:16:26 -07:00
package.json Minor improvements (#15) 2016-07-02 12:03:45 -07:00
package.sh interesting workaround to have nice zip structure with bestzip 2016-07-01 18:44:31 -07:00
README.md Make clear where to run npm start (#19) 2016-07-02 15:19:37 -07:00
rpc.js initial commit 2016-06-30 23:01:04 -07:00
session.js Implement hterm (#28) 2016-07-03 13:35:45 -07:00

hyperterm

Contribute

To install package.json dependencies in a way where the native modules are built with electron, run:

$ ./install.sh

Then, you want to make sure app/dist is populated. I recommend running webpack with --watch so that any changes you make to the app are detected.

$ cd app/
$ npm install
$ webpack --watch

Then you can run in the main directory:

$ npm start

...to launch the app!

TODO

  • Warn upon quit
  • Implement memory for tab navigation like in Chrome
  • Clone pwd when opening a new tab (as the first plugin?)
  • Implement cmd+K to clear
  • Listen on resize event coming from the pty.
  • Make sure all popular shells work well, and that we detect "url commands" appropriately for them.
  • Figure out process title extraction on other platforms.
  • Define extensibility surface and APIs
  • Define approach to conf management (~/.hyperterm.json ?)
  • When webview is shown, replace title of tab with webview's title
  • Linkify urls in stdout. If clicked, inline webview. If cmd+clicked, default browser.
  • Show icon that triggers contextmenu in tab, when hovered.
    • "Open in default browser" option in webview mode
    • Close
  • Test on Windows, Linux
  • Investigate startup time improvements
    • Optimistic (mosh-style) prompt that memoizes PS1
    • Smaller bundle (ie: uglify, but currently doesnt work with ES6)
    • Inline all the CSS/JS in the page instead of extra file