Reformat docs with prettier

This commit is contained in:
Sumner Evans 2018-05-23 23:07:58 -06:00
parent d2ca0bea52
commit a132f0922e
No known key found for this signature in database
GPG key ID: 8904527AB50022FD
13 changed files with 280 additions and 318 deletions

View file

@ -1,86 +1,58 @@
## Control your browser with your keyboard *only*. ## Control your browser with your keyboard _only_.
Replace Firefox's control mechanism with one modelled on VIM. This is a "Firefox Quantum" replacement for VimFX, Vimperator and Pentadactyl. Replace Firefox's control mechanism with one modelled on VIM. This is a "Firefox Quantum" replacement for VimFX, Vimperator and Pentadactyl. Most common tasks you want your browser to perform are bound to a single key press:
Most common tasks you want your browser to perform are bound to a single key
press:
- You want to open a new tab? Hit `t`. * You want to open a new tab? Hit `t`.
- You want to follow that link? Hit `f` and type the displayed label. (Note: hint characters should be typed in lowercase.) * You want to follow that link? Hit `f` and type the displayed label. (Note: hint characters should be typed in lowercase.)
- You want to go to the bottom of the page? Hit `G`. Or the top? `gg`. * You want to go to the bottom of the page? Hit `G`. Or the top? `gg`.
- You want to focus the text field on Wikipedia to search for another term? `gi`. * You want to focus the text field on Wikipedia to search for another term? `gi`.
- Switch to the next tab? `gt`. * Switch to the next tab? `gt`.
- Go back in time? `H`. * Go back in time? `H`.
- Notice that this tab is rubbish and you want to close it? `d`. * Notice that this tab is rubbish and you want to close it? `d`.
- Regret that decision? `u` restores it. * Regret that decision? `u` restores it.
- Want to write something in Vim? `Ctrl-i` in a text box opens it in Vim, if * Want to write something in Vim? `Ctrl-i` in a text box opens it in Vim, if you have `:native` working.
you have `:native` working. * Temporarily disable all that magic because you can't stand it? `Shift-Insert`.
- Temporarily disable all that magic because you can't stand it? `Shift-Insert`. * But how do you use your browser now? `Shift-Insert` again and we're back on.
- But how do you use your browser now? `Shift-Insert` again and we're back on.
The list could go on a bit here, but I guess you'll get the point. If you feel The list could go on a bit here, but I guess you'll get the point. If you feel lost sometimes `:help` might help you a lot, and there's always `:tutor`.
lost sometimes `:help` might help you a lot, and there's always `:tutor`.
**Highlighted features:** **Highlighted features:**
- follow any link on the site with just 2-3 key presses. * follow any link on the site with just 2-3 key presses.
- switch to any open tab by searching for its URL or title or entering its ID. * switch to any open tab by searching for its URL or title or entering its ID.
- easy customizable search settings * easy customizable search settings
- bind any supported command or commands to the key (sequence) of your liking * bind any supported command or commands to the key (sequence) of your liking
- great default bindings (if you're used to Pentadactyl or Vimperator) * great default bindings (if you're used to Pentadactyl or Vimperator)
This add-on is very usable, but is in an early stage of development. We intend This add-on is very usable, but is in an early stage of development. We intend to implement the majority of Vimperator's features.
to implement the majority of Vimperator's features.
You can get beta builds from [our website][betas]. You can get beta builds from [our website][betas].
**Permissions:** **Permissions:**
Since Tridactyl aims to provide all the features Vimperator and Pentadactyl Since Tridactyl aims to provide all the features Vimperator and Pentadactyl had, it requires quite a few permissions. Here we describe the specific permissions and why we need them.
had, it requires quite a few permissions. Here we describe the specific
permissions and why we need them.
- Access your data for all websites: * Access your data for all websites:
* This is Mozilla's way of saying that Tridactyl can read the content of web * This is Mozilla's way of saying that Tridactyl can read the content of web pages. This is necessary in order to e.g. find the links you can follow with the `:hint` command (bound to `f` by default).
pages. This is necessary in order to e.g. find the links you can follow * Exchange messages with programs other than Firefox
with the `:hint` command (bound to `f` by default). * This permission is required for Tridactyl to interact with your operating system (opening your editor to edit text areas, sending links to your video player, reading a configuration file from your disk...). This is possible thanks to an external executable we provide. If you feel this gives Tridactyl too much power you can chose not to install the external executable: Tridactyl will still work but won't be able to start external programs.
- Exchange messages with programs other than Firefox * Read and modify bookmarks:
* This permission is required for Tridactyl to interact with your * Tridactyl's command line has a powerful autocompletion mechanism. In order to be able to autocomplete your bookmarks, Tridactyl needs to read them.
operating system (opening your editor to edit text areas, sending links to * Clear recent browsing history, cookies, and related data:
your video player, reading a configuration file from your disk...). This * Tridactyl implements the `:sanitise` command Vimperator and Pentadactyl had. It works a bit like the "Clear All History" dialog you can access by pressing `Ctrl+Shift+Del` on default Firefox.
is possible thanks to an external executable we provide. If you feel this * Get data from the clipboard:
gives Tridactyl too much power you can chose not to install the external * If your clipboard contains a URL, pressing `p` will make Tridactyl follow this URL in the current tab.
executable: Tridactyl will still work but won't be able to start external * Input data to the clipboard:
programs. * Tridactyl lets you copy various elements to the clipboard such as a page's URL with `yy`, a link's URL with `;y` or the content of an HTML element with `;p`.
- Read and modify bookmarks: * Download files and read and modify the browser's download history:
* Tridactyl's command line has a powerful autocompletion mechanism. In * By pressing `;s`, `;S`, `;a` and `;A` you can save documents and pictures from a page to your download folder.
order to be able to autocomplete your bookmarks, Tridactyl needs to read * Access browsing history:
them. * The URLs of websites you've visited previously can be suggested as arguments for `:tabopen` and similar commands.
- Clear recent browsing history, cookies, and related data: * Access recently closed tabs:
* Tridactyl implements the `:sanitise` command Vimperator and Pentadactyl * If you've accidentally closed a tab or window, Tridactyl will let you open it again with the `:undo` command which is bound to `u` by default.
had. It works a bit like the "Clear All History" dialog you can access by * Access browser tabs:
pressing `Ctrl+Shift+Del` on default Firefox. * Tridactyl provides a quick tab-switching menu/command with the `:buffer` command (bound to `b`). This permission is also required to close, move, and pin tabs, amongst other things.
- Get data from the clipboard: * Access browser activity during navigation:
* If your clipboard contains a URL, pressing `p` will make Tridactyl follow * This is needed for Tridactyl to be able to go back to normal mode every time you open a new page. In the future we may use it for autocommands.
this URL in the current tab.
- Input data to the clipboard:
* Tridactyl lets you copy various elements to the clipboard such as a page's
URL with `yy`, a link's URL with `;y` or the content of an HTML element
with `;p`.
- Download files and read and modify the browser's download history:
* By pressing `;s`, `;S`, `;a` and `;A` you can save documents and pictures
from a page to your download folder.
- Access browsing history:
* The URLs of websites you've visited previously can be suggested as
arguments for `:tabopen` and similar commands.
- Access recently closed tabs:
* If you've accidentally closed a tab or window, Tridactyl will let you open
it again with the `:undo` command which is bound to `u` by default.
- Access browser tabs:
* Tridactyl provides a quick tab-switching menu/command with the `:buffer`
command (bound to `b`). This permission is also required to close, move,
and pin tabs, amongst other things.
- Access browser activity during navigation:
* This is needed for Tridactyl to be able to go back to normal mode every
time you open a new page. In the future we may use it for autocommands.
[betas]: https://tridactyl.cmcaine.co.uk/betas/?sort=time&order=desc [betas]: https://tridactyl.cmcaine.co.uk/betas/?sort=time&order=desc

View file

@ -11,7 +11,6 @@ A broad outline is thus:
5. This `ex` string is sent to the `ex str` parser, and converted into an internal Tridactyl function, e.g. `commmands.scrollPage(1)`, or if not possible, we report an error to the user 5. This `ex` string is sent to the `ex str` parser, and converted into an internal Tridactyl function, e.g. `commmands.scrollPage(1)`, or if not possible, we report an error to the user
6. These functions then interface with the WebExtensions API and will hide any message passing that needs to occur. If the function fails, it reports an error as in step 5. 6. These functions then interface with the WebExtensions API and will hide any message passing that needs to occur. If the function fails, it reports an error as in step 5.
browser -> keyEvents -> parser picker -> mode parser -> terminal character -> ex command -> "ex str" parser -> (function | error) -> browser browser -> keyEvents -> parser picker -> mode parser -> terminal character -> ex command -> "ex str" parser -> (function | error) -> browser
The process for "BrowserEvents", which occur when the user or some other code manipulates the browser through some non-Tridactyl method is similar, but we skip the parser picker step for now. The process for "BrowserEvents", which occur when the user or some other code manipulates the browser through some non-Tridactyl method is similar, but we skip the parser picker step for now.

View file

@ -85,7 +85,7 @@ Improvements over vimperator:
## Architecture ## Architecture
*This is an early draft and may be entirely replaced.* _This is an early draft and may be entirely replaced._
ex-commands as functions (typed and with helper functions in some other scope): ex-commands as functions (typed and with helper functions in some other scope):

View file

@ -2,7 +2,6 @@
See also [content-scripts-bug.md](content-scripts-bug.md). See also [content-scripts-bug.md](content-scripts-bug.md).
Vimperator and pentadactyl are addons that replace most of the Firefox UX with a keyboard-focused interface inspired by Vim. They enjoy moderate popularity and are particularly highlighted as "interesting add-ons" for porting on the Mozilla wiki[0]. Vimperator and pentadactyl are addons that replace most of the Firefox UX with a keyboard-focused interface inspired by Vim. They enjoy moderate popularity and are particularly highlighted as "interesting add-ons" for porting on the Mozilla wiki[0].
From now on I'll just say "Vimperator" instead of "Vimperator and pentadactyl" or similar. From now on I'll just say "Vimperator" instead of "Vimperator and pentadactyl" or similar.

View file

@ -2,37 +2,40 @@
Useful workarounds and methods to get the power we want in the brave new world of webextensions. Useful workarounds and methods to get the power we want in the brave new world of webextensions.
- Function in newtab * Function in newtab
- [chrome_url_overrides](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/chrome_url_overrides) * [chrome_url_overrides](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/chrome_url_overrides)
- Function in home page * Function in home page
- [chrome_settings_overrides](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/chrome_settings_overrides) * [chrome_settings_overrides](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/chrome_settings_overrides)
- (Downside for both is that we need to reimplement a useful home and newtab page) * (Downside for both is that we need to reimplement a useful home and newtab page)
- Shell and write access to filesystem * Shell and write access to filesystem
- [Native_messaging](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Native_messaging) * [Native_messaging](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Native_messaging)
- Hiding firefox chrome * Hiding firefox chrome
- API proposal for hiding tabstrip (but not nav bar): [Bug 1332447](https://api-dev.bugzilla.mozilla.org/show_bug.cgi?id=1332447)
- :Gijs discusses why nav bar can't be hidden, but I still don't get why whatever happens in fullscreen can't just also happen in windowed mode.
- Hiding with userChrome.css
- http://kb.mozillazine.org/Chrome_element_names_and_IDs
- e.g. "#tabbrowser-tabs { visibility: collapse !important; }"
- requires restart, probably
- Commandline thru toolbar API * API proposal for hiding tabstrip (but not nav bar): [Bug 1332447](https://api-dev.bugzilla.mozilla.org/show_bug.cgi?id=1332447)
- [Bug 1215064](https://bugzilla.mozilla.org/show_bug.cgi?id=1215064) * :Gijs discusses why nav bar can't be hidden, but I still don't get why whatever happens in fullscreen can't just also happen in windowed mode.
- As currently envisioned, size is fixed, I think * Hiding with userChrome.css
- Commandline thru HTML injection into webcontent * http://kb.mozillazine.org/Chrome_element_names_and_IDs
- Dangerous, see [Bug 1287590](https://bugzilla.mozilla.org/show_bug.cgi?id=1287590) * e.g. "#tabbrowser-tabs { visibility: collapse !important; }"
- Shadow DOM would probably be simpler than iframe, but not implemented yet [Bug 1205323](https://bugzilla.mozilla.org/show_bug.cgi?id=1205323) * requires restart, probably
- Commandline thru search suggestions on the omnibar (this is a bit mad)
- [chrome_settings_overrides](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/chrome_settings_overrides)
- [Find API](https://bug1332144.bmoattachments.org/attachment.cgi?id=8905651) * Commandline thru toolbar API
- [Bug 1332144](https://bugzilla.mozilla.org/show_bug.cgi?id=1332144) * [Bug 1215064](https://bugzilla.mozilla.org/show_bug.cgi?id=1215064)
- [Demo](https://github.com/Allasso/Find_API_demo_WE_advanced) * As currently envisioned, size is fixed, I think
- How to replicate find links? Do we care? * Commandline thru HTML injection into webcontent
- Can this be used to exfiltrate info about about pages? * Dangerous, see [Bug 1287590](https://bugzilla.mozilla.org/show_bug.cgi?id=1287590)
* Shadow DOM would probably be simpler than iframe, but not implemented yet [Bug 1205323](https://bugzilla.mozilla.org/show_bug.cgi?id=1205323)
* Commandline thru search suggestions on the omnibar (this is a bit mad)
- Can't navigate to restricted URLs * [chrome_settings_overrides](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/chrome_settings_overrides)
- [about:](https://bugzilla.mozilla.org/show_bug.cgi?id=1371793)
- [file:](https://bugzilla.mozilla.org/show_bug.cgi?id=1266960) * [Find API](https://bug1332144.bmoattachments.org/attachment.cgi?id=8905651)
* [Bug 1332144](https://bugzilla.mozilla.org/show_bug.cgi?id=1332144)
* [Demo](https://github.com/Allasso/Find_API_demo_WE_advanced)
* How to replicate find links? Do we care?
* Can this be used to exfiltrate info about about pages?
* Can't navigate to restricted URLs
* [about:](https://bugzilla.mozilla.org/show_bug.cgi?id=1371793)
* [file:](https://bugzilla.mozilla.org/show_bug.cgi?id=1266960)

View file

@ -1,14 +1,14 @@
## Components ## Components
- Iterable of visible links on page * Iterable of visible links on page
- Algorithm for choosing hint characters for each link * Algorithm for choosing hint characters for each link
- Mode for controller and excmd to refine and select hints: * Mode for controller and excmd to refine and select hints:
- I imagine `:hint` to start * I imagine `:hint` to start
- `:hint j` to refine to only hints starting with j * `:hint j` to refine to only hints starting with j
- `:hint jk` to refine to hints starting with jk * `:hint jk` to refine to hints starting with jk
- To make maps easier we can have `:hintaddchar j` and have the state of the current hintstr stored content-side. * To make maps easier we can have `:hintaddchar j` and have the state of the current hintstr stored content-side.
## Improvements ## Improvements

View file

@ -2,73 +2,60 @@
Vimperator is going to die once Firefox deprecates XUL and switches webextensions. Needs fixing, or nobody will be able to use the internet any more. Vimperator is going to die once Firefox deprecates XUL and switches webextensions. Needs fixing, or nobody will be able to use the internet any more.
Valiant efforts have been begun to sort out some parts of Firefox's WebExtension implementation: Valiant efforts have been begun to sort out some parts of Firefox's WebExtension implementation: https://bugzilla.mozilla.org/show_bug.cgi?id=1215061
https://bugzilla.mozilla.org/show_bug.cgi?id=1215061
This only deals with the keyboard binding aspect. We need to think about the GUI / hinting etc: we need to make sure everything we want to have in Vimperator is possible using WebExtensions. This only deals with the keyboard binding aspect. We need to think about the GUI / hinting etc: we need to make sure everything we want to have in Vimperator is possible using WebExtensions.
Chrome et al. already use WebExtensions, and there are a few vim-like extensions for it, such as cVim/Vimium. It would make sense to look at how these extensions work and see what is not currently possible in Firefox. An obvious part of what they cannot do is change the GUI of the browser. Vimperator allows you to hide parts of the browser when they are not needed. Chrome et al. already use WebExtensions, and there are a few vim-like extensions for it, such as cVim/Vimium. It would make sense to look at how these extensions work and see what is not currently possible in Firefox. An obvious part of what they cannot do is change the GUI of the browser. Vimperator allows you to hide parts of the browser when they are not needed.
It would also be sensible to have a list of ideal things that can't currently be done in Vimperator, e.g. embedding Vim client, that we would like. (look at Petrosaur) It would also be sensible to have a list of ideal things that can't currently be done in Vimperator, e.g. embedding Vim client, that we would like. (look at Petrosaur)
There is currently a magic console in Firefox that we could perhaps hijack, which is built on GCLI: https://developer.mozilla.org/en/docs/Tools/GCLI https://github.com/joewalker/gcli/blob/master/docs/index.md -- even says that it could be used as part of a browser extension
There is currently a magic console in Firefox that we could perhaps hijack, which is built on GCLI:
https://developer.mozilla.org/en/docs/Tools/GCLI
https://github.com/joewalker/gcli/blob/master/docs/index.md -- even says that it could be used as part of a browser extension
# Avoiding JavaScript: # Avoiding JavaScript:
CoffeeScript; EMScripten, ELM, Node.js (interpretereter?)
(broccoli) CoffeeScript; EMScripten, ELM, Node.js (interpretereter?) (broccoli) What is NPM? Browserify is dependency management
What is NPM? Browserify is dependency management
# Useful libraries # Useful libraries
PEG - parses stuff (e.g. command input) PEG - parses stuff (e.g. command input)
# cVim # cVim
Code not well documented, could glean useful stuff from just stripping out what Chrome API is used Code not well documented, could glean useful stuff from just stripping out what Chrome API is used
## Useful links: ## Useful links:
https://www.codementor.io/gmuresan/building-a-chrome-extension-reactjs-broccoli-sass-du1081zv0 https://www.codementor.io/gmuresan/building-a-chrome-extension-reactjs-broccoli-sass-du1081zv0
# Useful links # Useful links
https://developer.chrome.com/extensions/commands
https://github.com/lydell/webextension-keyboard
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Background_scripts
https://github.com/shinglyu/QuantumVim - Vimium style stuff in WebExtensions
https://github.com/mishoo/UglifyJS2 - Minify JS: check that compiling to Firefox addon doesn't already do this
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API
http://arcturo.github.io/library/coffeescript/ - Coffee Script textbook
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Getting_started_with_web-ext - web-ext will automatically reload a changed extension
https://developer.chrome.com/extensions/commands https://github.com/lydell/webextension-keyboard https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Background_scripts https://github.com/shinglyu/QuantumVim - Vimium style stuff in WebExtensions https://github.com/mishoo/UglifyJS2 - Minify JS: check that compiling to Firefox addon doesn't already do this https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API http://arcturo.github.io/library/coffeescript/ - Coffee Script textbook https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Getting_started_with_web-ext - web-ext will automatically reload a changed extension
# Names # Names
Tridactyl (like Pentadactyl, but worse, last cuturally relevant in 2005 like Salad Fingers) Tridactyl (like Pentadactyl, but worse, last cuturally relevant in 2005 like Salad Fingers)
# Features we really really want # Features we really really want
- Hiding misc UI (tabs, menu, urlbar, etc.)
- Interacting with other addons (simulating presses on buttons?) * Hiding misc UI (tabs, menu, urlbar, etc.)
- ]][[ to inc/dec url * Interacting with other addons (simulating presses on buttons?)
- command line for opening tabs/completion/interacting with addons/changing settings * ]][[ to inc/dec url
- "buffer" tab searching / tab groups? * command line for opening tabs/completion/interacting with addons/changing settings
- searching for tabs between windows? * "buffer" tab searching / tab groups?
* searching for tabs between windows?
# Features we need less? # Features we need less?
autocmds?
macros?
autocmds? macros?
# Vimium notes # Vimium notes
Uses descriptors a lot - what even are they?
Loading into firefox doesn't give any errors / doesn't seem to expose any functions?
Uses descriptors a lot - what even are they? Loading into firefox doesn't give any errors / doesn't seem to expose any functions?
# Other stuff # Other stuff
Would be nice to have self-writing documentation, for autocmd use etc?
Could use .litcoffee for markdown comments in code. Would be nice to have self-writing documentation, for autocmd use etc? Could use .litcoffee for markdown comments in code.
History seems to be window.history.go(), presumably in a content script? History seems to be window.history.go(), presumably in a content script?

View file

@ -31,6 +31,6 @@ Commands:
find {phrase} {direction=+/-1} find {phrase} {direction=+/-1}
hints {open|tabopen|winopen|yank} hints {open|tabopen|winopen|yank}
## search-likes ## search-likes
{page, google, amazon} {phrase} {page, google, amazon} {phrase}

View file

@ -3,11 +3,11 @@
We need to parse series of keypresses into `ex` commands, and then parse those commands into internal functions. We also need autocompletion of commands (maybe also in normal mode, qutebrowser style, to aid their discoverability), and the parser needs to change in real-time such that binds can be remapped. We need to parse series of keypresses into `ex` commands, and then parse those commands into internal functions. We also need autocompletion of commands (maybe also in normal mode, qutebrowser style, to aid their discoverability), and the parser needs to change in real-time such that binds can be remapped.
We are considering: We are considering:
- writing our own parser
- Nearley: https://github.com/Hardmath123/nearley
- Upsides: uses Earley, can use CoffeeScript
- PEG.js
- Downsides: uses PEG
* writing our own parser
* Nearley: https://github.com/Hardmath123/nearley
* Upsides: uses Earley, can use CoffeeScript
* PEG.js
* Downsides: uses PEG
Currently, we are erring on the side of writing our own parser, as neither of the other options allow for changing the parser sensibly, and do not seem to support partial matches. Generally, neither seem to be written with the expectation of interactive uses. Currently, we are erring on the side of writing our own parser, as neither of the other options allow for changing the parser sensibly, and do not seem to support partial matches. Generally, neither seem to be written with the expectation of interactive uses.

View file

@ -2,7 +2,7 @@
Some small browsers exist that use webkit/webengine for the heavy lifting. Two notable examples even have vim-like interfaces: qutebrowser and jumanji. Some small browsers exist that use webkit/webengine for the heavy lifting. Two notable examples even have vim-like interfaces: qutebrowser and jumanji.
Extending them *might* be easy, depending on the quality of the existing code base. We also need to evaluate these projects for maintainability: they're obviously going to have much less development power. Extending them _might_ be easy, depending on the quality of the existing code base. We also need to evaluate these projects for maintainability: they're obviously going to have much less development power.
If it's comparable to this project done in webextensions, then we might want to just build our own/fork/contribute. If it's comparable to this project done in webextensions, then we might want to just build our own/fork/contribute.
@ -41,4 +41,3 @@ Maybe not:
* ref control is neat, but the UI is pants. Would be easy to build an ex-mode interface. * ref control is neat, but the UI is pants. Would be easy to build an ex-mode interface.
* pwgen is trivial * pwgen is trivial
* https everywhere --> builtin? * https everywhere --> builtin?

View file

@ -1,8 +1,9 @@
# Stuff we'd like but maybe we might not be able to do # Stuff we'd like but maybe we might not be able to do
- Better link hinting * Better link hinting
- One hint per identical link? (e.g. BBC News homepage works badly without this)
- Some links need simulated mouse click (e.g. JS)
- Better normal mode motions * One hint per identical link? (e.g. BBC News homepage works badly without this)
- e.g, "next heading" * Some links need simulated mouse click (e.g. JS)
* Better normal mode motions
* e.g, "next heading"

View file

@ -1,18 +1,20 @@
# Playing with Firefox background scripts # Playing with Firefox background scripts
1. about:debugging - load temporary addon 1. about:debugging - load temporary addon
2. click "debug" 2. click "debug"
3. click "console" 3. click "console"
4. disable most things apart from logging 4. disable most things apart from logging
5. have fun 5. have fun
# Playing with content scripts # Playing with content scripts
1. about:debugging 1. about:debugging
2. dunno the rest 2. dunno the rest
# Experimental WebExtension API addons # Experimental WebExtension API addons
1. complicated, but Colin knows a bit. 1. complicated, but Colin knows a bit.
# Compiling CoffeeScript # Compiling CoffeeScript
coffee -c script.coffee coffee -c script.coffee