Using numbers instead of strings made things complicated when dealing
with logging (:set was more complex, :get returned a number instead of a
string...). This commit fixes this.
Note that this commit removes validation for logging levels. This means
that users can now set erroneous logging levels. Fixing this will
require better type info generation in the compiler and will happen in
another commit.
This fixes the pop-in of the un-selected hints after one is selected,
since on completion we're removing all hints instead of just clearing
the filter. It also fixes hints remaining present on SPAs like github,
see #981.
`pick` in `msgsafe.ts` was not type safe and was concealing an error
where HTMLElements don't have a `pick` property. Then
`MsgSafeNode.pick` would have always been absent, which would have
caused `isTextEditable` to fail to detect elements with the ARIA role
of `application`. Using real types throughout allows us to fix this by
iterating over `Element.attributes`, which appears to do the right
thing.
Per-document modes might actually leave `TabLeft` completely unused by
most people, so we should be careful to not let that code start to
decay.
Sample tridactylrc turned out to not need updating
It looks like help docs don't reference this functionality anywhere
else, so this should be all the autocommand-related changes.
Turned out this was simple - I'd forgotten to switch the controller to
use the content versions of hinting and finding, so the controller was
using the background versions which were messaging-based proxies for
the content versions that weren't running any more. Calling the
content versions directly fixed hinting immediately.
I've been programming on pure instinct for like five hours and I'm not
sure what exactly I did any more. I *think* that what I did was
something like:
* Split `state.ts` into `state.ts` and `content_state.ts`, then
removed mode from state and moved it to content_state.
* Made the types in content_state.ts a hair more powerful
* Fixed all errors resulting from those two changes, in the process
swapping state out for content_state wherever appropriate.
* Moved a couple excmds from background into content since they
depended heavily on the mode and should live with the mode
* Split the controller in half, moving the parser logic to the content
script and leaving acceptExCmds in the background
version. content_controller forwards excmds to background script
using messaging.
* Nuked the keydown_* code, since we no longer need to forward keys to
the background.
* Went around fixing everything resulting from *those* changes, mostly
the various perversions of keydown listeners
* Various tweaks here and there that probably didn't do anything but I
was just changing things at random a third of the time and I really
need to go through this and clean it up.
Things that work:
* excmds are nice now. each tab has its own commandline; they stay
open when you navigate between tabs and you can come back to them
after doing stuff in another tab and finish your command line input.
* keybinds that don't don't involve mode switching: `[[`, `]]`, `j`,
`k`, `r`, etc, all still functional.
* You can turn on hinting mode and, again, navigate to another tab
which will *not* be in hinting mode, do whatever you need to do
there including excmds or more hinting, and then come back to finish
the hint you started in the first tab
* You can exit hint mode by pressing escape. :P
Things that I broke:
* ...Actually quite a bunch of stuff, I think.
* I don't seem to be able to *finish* a hint any more. Sometimes I
can't even get one key in.
https://github.com/tridactyl/tridactyl/pull/964 broke `:installnative`
because I forgot to convert both `nativeinstallcmd` and
`win_nativeinstallcmd` to the new format. This commit fixes that.
This commit implements typechecking in the `:set` excmd. It uses metadata
to make sure the given argument is valid.
Some of the settings were stored as numbers in the config while they
were passed as strings to `:set()`. This prevented them from being
configurable. This has been fixed by turning them into string in the
config and ensuring that they are correctly deserialized when retrieved
from the config.
Note that there still are a few settings that are stored as int in the
config (namely the tts ones). This should probably be fixed at some
point but is not urgent as it has always been impossible to configure
them and nobody ever complained about it.
We now generate doc/type metadata for classes. In order to do this, we
added a level of indirection to the metadata object, this makes telling
the difference between classes and functions easier.
This commit makes sure typescript targets es2016 when compiling
gen_metadata.ts and than when generating metadata, only the necessary
files are parsed (src/excmds.ts and src/config.ts for now). This
slightly improves build time.
This commit adds type information to multiple default_config attributes.
This enables removing the "permitted values" bit in some of the comments
as TypeDoc displays type information when available.
This commit turns default_config into a class. This is useful because
TypeDoc's layout for classes is better than the one for object literals.
On top of that, default_config being a class will help with adding type
information to settings, which will in turn let us generate config
metadata that we will then be able to use to typecheck `:set` and to
provide more information in completions.