Giter Site home page Giter Site logo

tridactyl / tridactyl Goto Github PK

View Code? Open in Web Editor NEW
4.9K 65.0 393.0 35.94 MB

A Vim-like interface for Firefox, inspired by Vimperator/Pentadactyl.

Home Page: https://tridactyl.xyz

License: Other

Shell 1.88% TypeScript 77.14% CSS 11.69% HTML 0.65% JavaScript 5.25% Python 1.90% Nearley 0.09% PowerShell 1.31% Handlebars 0.09%
hacktoberfest firefox vim webextension

tridactyl's Introduction


Tridactyl Logo
Tridactyl

Replace Firefox's default control mechanism with one modelled on the one true editor, Vim.

Build Status Matrix Chat Join Gitter Chat Join Discord Chat Mozilla Addon Store

InstallationChangelogFirst LookFeaturesFAQContributing


Tridactyl GIF

Installation

Click this link in Firefox to install our latest "beta" build. If it doesn't install automatically, you may need to 1) rename the extension from .zip to .xpi and 2) open it with Firefox; a fool-proof method is to go to about:addons, click the extensions tab, click the cog in the top right, then click "Install Add-on From File...". If you want more options, read on.

Stable

Our "stable" builds are essentially just frozen versions of our beta builds. Our beta builds themselves are not much less stable; all our developers and about half of our users use the beta builds. Stable builds, however, do get new features documented in the changelog, whereas beta builds get new features before they are documented there.

Arch Linux

Run pacman -S firefox-tridactyl in a terminal and then restart Firefox twice.

All other operating systems (Microsoft Windows, Macintosh, Linux etc.)

Tridactyl stable can be installed from the Mozilla add-ons website (the AMO).

Beta

Click this in Firefox to install our "beta" builds. These betas used to be updated with each commit to master on this repo but are now built manually when bovine3dom remembers - see issue #3605. Your browser will automatically update from there once a day. If you want more frequent updates, you can change extensions.update.interval in about:config to whatever time you want, say, 15 minutes (900 seconds). There is also another beta build that comes without a new tab page. You can get it from here.

Extra features through Native Messaging

If you want to use advanced features such as edit-in-Vim, you'll also need to install the native messenger or executable, instructions for which can be found by typing :installnative and hitting enter once you are in Tridactyl. Arch users can install the AUR package firefox-tridactyl-native instead.

Containerized/sandboxed Firefox Installations

Snap and Flatpak: Native Messaging support here is fairly recent and may require:

  • Upgrading to a beta version of Firefox (>= 106.0b6)
  • Enabling webextension permissions: flatpak permission-set webextensions tridactyl snap.firefox yes
  • Rebooting your system (and likely nothing short of it)

See this call for testing thread and this PR for more details and troubleshooting tips.

Firejail will require explicit path whitelisting, but should be feasible based on netblue30/firejail#2109.

For other containerized installs, see troubleshooting steps in #2406 and the links above. With packaging that does support Native Messaging, the trick is usually ensuring the containerized app has permission to run the executable and can find the manifest json file.

Migrating between beta and stable builds

Our beta and stable versions store their configurations in separate places. To migrate between the two, see the wiki.

Changelog

The changelog for the stable versions can be found here.

First look

Type :help or press <F1> for online help once you're in, or :tutor for a friendly introduction. You might also find the unofficial Tridactyl Memrise course (requires login) useful for memorising keybinds.

Remember that Tridactyl cannot run on any page on about:*, data:*, view-source:* and file:*. We're sorry about that and we're working with Firefox to improve this situation by removing restrictions on existing APIs and developing a new API.

If you're enjoying Tridactyl, or not, please leave a review on the AMO.

Highlighted features

Like Vim, Tridactyl is modal, with the default mode being "normal mode". In "normal mode", many functions are available using keybindings. In "command mode" (when the command line is shown), you can execute more complex commands, known as "ex-commands". All Tridactyl functionality can be accessed by ex-commands. You can bind any ex-command to a normal-mode shortcut. We also support a .tridactylrc file, of which there is an example in the root of this repository.

Default normal-mode bindings

This is a (non-exhaustive) list of the most common normal-mode bindings. Type :help to open the online help for more details.

  • : — activate the command line
  • Shift + Insert — enter "ignore mode". Press Shift + Insert again to return to "normal mode".
  • ZZ — close all tabs and windows, but only "save" them if your about:preferences are set to "show your tabs and windows from last time"
  • . — repeat the last command
  • <C-v> – send a single keystroke to the current website, bypassing bindings

You can try :help key to know more about key. If it is an existing binding, it will take you to the help section of the command that will be executed when pressing key. For example :help . will take you to the help section of the repeat command.

Navigating with the current page

  • j/k — scroll down/up
  • h/l — scroll left/right
  • ^/$ — scroll to left/right margin
  • gg/G — scroll to start/end of page
  • f/F/gF — enter "hint mode" to select a link to follow. F to open in a background tab (note: hint characters should be typed in lowercase). gF to repeatedly open links until you hit <Escape>.
  • gi — scroll to and focus the last-used input on the page
  • r/R — reload page or hard reload page
  • yy — copy the current page URL to the clipboard
  • [[/]] — navigate forward/backward though paginated pages, for example comics, multi-part articles, search result pages, etc.
  • ]c/[c — increment/decrement the current URL by 1
  • gu — go to the parent of the current URL
  • gU — go to the root domain of the current URL
  • gr — open Firefox reader mode (note: Tridactyl will not work in this mode)
  • zi/zo/zz — zoom in/out/reset zoom
  • <C-f>/<C-b> — jump to the next/previous part of the page
  • g? — Apply Caesar cipher to page (run g? again to switch back)
  • g! — Jumble words on page

Find mode

Find mode is still incomplete and uses the Firefox feature "Quick Find". This will be improved eventually.

  • / — open the Quick Find search box
  • / then <C-f> — open the Find in page search box
  • <C-g>/<C-G> — find the next/previous instance of the last find operation (note: these are the standard Firefox shortcuts)

Please note that Tridactyl overrides Firefox's <C-f> search, replacing it with a binding to go to the next part of the page. If you want to be able to use <C-f> to search for things, use <C-f> after opening the Quick Find box (/), or any input field such as the address bar or search bar (use default browser shortcuts to activate these). To allow usage of <C-f> at any time, use unbind <C-f> to unset the scrollpage binding.

Bookmarks and quickmarks

  • A — bookmark the current page
  • a — bookmark the current page, but allow the URL to be modified first
  • M<key> — bind a quickmark to the given key
  • go<key>/gn<key>/gw<key> — open a given quickmark in current tab/new tab/new window

If you want to use Firefox's default <C-b> binding to open the bookmarks sidebar, make sure to run unbind <C-b> because Tridactyl replaces this setting with one to go to the previous part of the page.

Marks

  • m a-zA-Z — set a local mark (lowercase letter), or a global mark (uppercase letter)
  • ` a-zA-Z — jump to a local mark (lowercase letter), or a global mark (uppercase letter)
  • `` — jump to the location before the last mark jump

Navigating to new pages:

  • o/O — open a URL (or default search) in this tab (O to pre-load current URL)
  • t/T — open a URL (or default search) in a new tab (T to pre-load current URL)
  • w/W — open a URL (or default search) in a new window (W to pre-load current URL)
  • p/P — open the clipboard contents in the current/new tab
  • s/S — force a search using the default Tridactyl search engine, opening in the current/new tab. This is useful when searching for something that would otherwise be treated as a URL by o or t
  • H/L — go back/forward in the tab history
  • gh/gH — go to the pages you have set with set home [url1] [url2] ...

Handling tabs

  • d — close the current tab
  • u — undo the last tab/window closure
  • gt/gT — go to the next/previous tab
  • g^ OR g0/g$ — go to the first/last tab
  • ga — go to the tab currently playing audio
  • <C-^> — go to the last active tab
  • b — bring up a list of open tabs in the current window; you can type the tab ID or part of the title or URL to choose a tab

Extended hint mode

Extended hint modes allow you to perform actions on page items:

  • ;i/;I — open an image (in current/new tab)
  • ;s/;a — save/save-as the linked resource
  • ;S/;A — save/save-as the selected image
  • ;p — copy an element's text to the clipboard
  • ;P — copy an element's title/alt text to the clipboard
  • ;y — copy an element's link URL to the clipboard
  • ;# — copy an element's anchor URL to the clipboard
  • ;r — read the element's text with text-to-speech
  • ;k — delete an element from the page
  • ;; — focus an element

Additionally, you can hint elements matching a custom CSS selector with :hint -c [selector] which is useful for site-specific versions of the standard f hint mode.

Binding custom commands

You can bind your own shortcuts in normal mode with the :bind command. For example :bind J tabprev to bind J to switch to the previous tab. See :help bind for details about this command.

WebExtension-related issues

  • Navigation to any about:* pages using :open requires the native messenger.
  • Firefox will not load Tridactyl on about:*, some file:* URIs, view-source:*, or data:*. On these pages <C-,> - that's "Ctrl-Comma" - and the tri omnibox keyword are your escape hatches.
    • addons.mozilla.org is not supported.
  • Tridactyl now supports changing the Firefox GUI if you have the native messenger installed via guiset. There's quite a few options available, but guiset gui none is probably what you want, perhaps followed up with guiset tabs always. See :help guiset for a list of all possible options.

Frequently asked questions (FAQ)

  • Why doesn't Tridactyl work/why does it break the websites I'm trying to use? or 'Help! A website I use is totally blank when I try to use it with Tridactyl enabled!' or 'Why doesn't Tridactyl work on some pages?'

    Please visit our troubleshooting guide.

  • How can I change the default search engine?

    :set searchengine [searchurl name], e.g. :set searchengine google

    For instance, to use the European Space Agency as the default search engine (which may not necessarily be a good idea):

    :set searchurls.esa http://www.esa.int/esasearch?q=

    :set searchengine esa

  • How can I add a search engine?

    :set searchurls.esa http://www.esa.int/esasearch?q=

    You can also add %s to specify exactly where the search query should go, which is useful for more inventive uses, such as

    :set searchurls.phrasebook https://translate.google.co.uk/#en/%s/my%20hovercraft%20is%20full%20of%20eels

    after which :open phrasebook [fr|de|la|es|hi|it...] will work as expected.

  • Can I import/export settings, and does Tridactyl use an external configuration file just like Vimperator?

    Yes. :source --url [URL] accepts a URL (which must contain only an RC file, e.g. raw.githubusercontent.com/...). If you have native working, $XDG_CONFIG_DIR/tridactyl/tridactylrc or ~/.tridactylrc will be read at startup via an autocmd and source. There is an example file available on our repository.

    There's also mkt which exports your configuration to a file which may be read with source. (NB: this currently requires native).

  • How can I change the colors or theme used by Tridactyl?

    To use one of the built in themes use: :colors <color>. The current options are:

    • default
    • dark (authored by @furgerf)
    • shydactyl (authored by @atrnh)
    • greenmat (authored by @caputchinefrobles)
    • halloween
    • quake
    • quakelight
    • midnight (authored by @karizma)

    Tridactyl can also load themes from disk or URL. You could use this for example to load one of the themes originally authored by @bezmi (tridactyl/base16-tridactyl). See :help colors for more information.

  • How to remap keybindings? or How can I bind keys using the control/alt key modifiers (eg: ctrl+^)?

    You can remap keys in normal, ignore, input and insert mode with :bind --mode=$mode $key $excmd. Hint mode and the command line are currently special and can't be rebound. See :help bind for more information.

    Modifiers can be bound like this: :bind <C-f> scrollpage 1. Special keys can be bound too: :bind <F3> colors dark and with modifiers: :bind <S-F3> colors default and with multiple modifiers: :bind <SA-F3> composite set hintchars 1234567890 | set hintfiltermode vimperator-reflow

    The modifiers are case insensitive. Special key names are not. The names used are those reported by Javascript with a limited number of vim compatibility aliases (e.g. CR == Enter).

    If you want to bind <C-^> you'll find that you'll probably need to press Control+Shift+6 to trigger it. The default bind is <C-6> which does not require you to press shift.

    You can also create site specific binds with bindurl [url] ...

  • When I type 'f', can I type link names (like Vimperator) in order to narrow down the number of highlighted links?

    You can, thanks to @saulrh. First set hintfiltermode vimperator and then set hintchars 1234567890.

  • Where can I find a changelog for the different versions (to see what is new in the latest version)?

    Here.

  • Why can't I use my bookmark keywords?

    Mozilla doesn't give us access to them. See issue #73.

  • Can I set/get my bookmark tags from Tridactyl?

    No, Mozilla doesn't give us access to them either.

  • Why doesn't Tridactyl work on websites with frames?

    It should work on some frames now. See #122.

  • Can I change proxy via commands?

    Not yet, but this feature will eventually be implemented.

  • How do I disable Tridactyl on certain sites?

    To enter ignore mode automatically on a website, use blacklistadd like this: blacklistadd mail.google.com/mail. See :help blacklistadd. Also note that if you want something like the passkeys or ignorekeys features vimperator/pentadactyl had, you can use bindurl. See :help bindurl.

    If you want to more thoroughly disable Tridactyl on a website, for example to prevent it from injecting its CSS, use :seturl [url regex] superignore true. See :help seturl and :help superignore for more details.

  • How can I list the current bindings?

    viewconfig nmaps works OK, but Tridactyl commands won't work on the shown page for "security reasons". We'll eventually provide a better way. See #98.

  • How can I know which mode I'm in/have a status line?

    Press j and see if you scroll down :) There's no status line yet: see #210, but we do have a "mode indicator" in the bottom right. It even goes purple when you're in a private window :).

  • Does anyone actually use Tridactyl?

    In addition to the developers, some other people do. Mozilla keeps tabs on stable users here, but, as of a while ago, you can't see that link if you aren't listed as a Tridactyl developer on the AMO. The maintainers guess the number of unstable users from unique IPs downloading the betas each week when they feel like it. Last time they checked there were 4600 of them.

  • How do I prevent websites from stealing focus?

    There are two ways: the first one is :seturl [URL regex] allowautofocus false (if you do this you'll probably also want to set browser.autofocus to false in about:config). This will prevent the page's focus() function from working and could break javascript text editors such as Ace or CodeMirror; you could equally run :set allowautofocus false and then use :seturl [URL regex for sites with text editors you use] allowautofocus true. The second method is :seturl [URL regex] preventautofocusjackhammer true which will repeatedly check that the page has not stolen focus at the cost of some CPU cycles, so use it sparingly. It works on more websites than allowautofocus false.

Contributing

Donations

We gratefully accept donations via GitHub Sponsors (we receive 100% of your donation), PayPal (about 70% of your donation makes it to our bank account after fees) and Patreon (about 70% of your donation makes it to our account). If you can, please make this a monthly donation as it makes it much easier to plan. People who donate more than 10USD a month via GitHub or Patreon get a special monthly "tips and tricks" newsletter - see an example here. All GitHub and Patreon donors get a quarterly newsletter on Tridactyl development.

PayPal

Funds currently ensure that bovine3dom can afford to work on Tridactyl about one day a week.

Merchandise

We have some designs available on REDBUBBLE. There are often discount codes available - just search your favourite search engine for them. The T-shirts are quite good (I'm wearing one as I type this). The stickers are not the best quality we've ever seen. The clock looks amazing on the website. If anyone buys it I would love to see it.

We don't take any cut from the merchandise, so if you would like to donate, please do so via PayPal or Patreon above.

Building and installing

Onboarding:

git clone https://github.com/tridactyl/tridactyl.git
cd tridactyl
yarn install
yarn run build

Each time package.json or yarn.lock change after you checkout or pull, our git hook will try to run yarn install again. If it doesn't you should do it manually.

Addon is built in tridactyl/build. Load it as a temporary addon in firefox with about:debugging or see Development loop.

If you want to install a local copy of the add-on into your developer or nightly build of Firefox then you can enable installing unsigned add-ons and then build it like so:

# Build tridactyl if you haven't done that yet
yarn run build
# Package for a browser
scripts/sign nosignbeta

If you want to build a signed copy (e.g. for the non-developer release), you can do that with web-ext sign. You'll need some keys for AMO and to edit the application id in src/manifest.json. There's a helper script in scripts/sign that's used by our build bot and for manual releases.

You can build unsigned copies with scripts/sign nosign{stable,beta}. NB: The stable versus beta part of the argument tells our build process which extension ID to use (and therefore which settings to use). If you want a stable build, make sure you are on the latest tag, i.e. git checkout $(git tag | grep '^[0-9]\+\.[0-9]\+\.[0-9]\+$' | sort -t. -k 1,1n -k 2,2n -k 3,3n | tail -1).

If you are on a distribution which builds Firefox with --with-unsigned-addon-scopes= set to app and/or system (which is most of them by users: Arch, Debian, Ubuntu), you can install your unsigned copy of Tridactyl with scripts/install.sh [directory]. If you're on Arch, the correct directory is probably selected by default; on other distributions you might have to go hunting, but it probably looks like /usr/lib/firefox/browser/extensions.

Building on Windows

  • Install Git for Windows

  • Install NodeJS for Windows

    • Current 8.11.1 LTS seems to work fine
  • Launch the installation steps described above from MinTTY shell

    • Also known as "Git Bash"

Development loop

yarn run build & yarn run run

You'll need to run yarn run build every time you edit the files, and press "r" in the yarn run run window to make sure that the files are properly reloaded.

You can speed up the build process after your first build by using yarn run rebuild instead. This skips rebuilding the metadata (used in completions), documentation, new tab page, and tutor, so don't use it if that's what you're trying to test.

Committing

A pre-commit hook is added by yarn install that simply runs yarn test. If you know that your commit doesn't break the tests you can commit with git commit -n to ignore the hooks. If you're making a PR, travis will check your build anyway.

Documentation

Ask in #tridactyl on matrix.org, Libera, gitter, or Discord. We're friendly!

Default keybindings are currently best discovered by reading the default config.

Development notes are in the doc directory, but they're mostly out of date now. Code is quite short and not too badly commented, though.

Principles and objectives

Principles:

  • Keyboard > mouse
  • default keybinds should be Vim-like
  • actions should be composable and repeatable
  • ex mode should expose all the browser functionality anyone might want
  • Arguable: most (all?) actions should have an ex mode version (departure from Vim?)
  • users can map and define their own actions and commands

Other objectives:

  • be fast - the whole point of a keyboard interface is to be more efficient, don't compromise that with slow code
  • don't crash - we're the new UI and we shouldn't crash
  • be maintainable - code should be well documented, reasoned about and tested.

Logo acknowledgement

The logo was designed by Jake Beazley using free vector art by www.Vecteezy.com

tridactyl's People

Contributors

alixinne avatar antonva avatar arcnmx avatar bovine3dom avatar cmcaine avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar dhruvasambrani avatar farnoy avatar fluem avatar gholk avatar glacambre avatar gsbabil avatar isaackhor avatar ivcz avatar johnbeard avatar koushien avatar mariuszdb avatar matiasstorm avatar mozbugbox avatar mygitusername avatar peff avatar petoncle avatar pvs avatar rddunphy avatar rektrex avatar rummskartoffel avatar saulrh avatar treapster avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tridactyl's Issues

Support FF 58

Just tried out the developer edition of Firefox 58.0b4 (64-bit) on OS X which didn't work at all.

v1 checklist

Remaining work before first public release:

  • - improve exmode parser with data from macros (cmd_params map)
  • - link hinting
  • - find mode (/nN)
  • - (shit workaround) preventDefault on mapped keys (generalise normal mode parser into key sequence parser and send maps to keyboard shim)
  • - basic custom maps
  • - persistent config (just maps for now)
  • - don't accept untrusted keyevents

Other important work:

  • Completion system (Koushien's working on this :)
  • Documentation generation and help function
  • Better maps
  • :set (configuration)
  • error bar (and error propagation from everywhere to that bar)
  • nativeMessenger (for editing userChrome.css, rc files, opening file:// URIs, etc)
  • :help (#23)
  • Move clipboard read into background

Lower priority:

  • Other missing ecmds from vimperator
  • JS Eval/custom excmds
  • autocmds
  • mode notification

support * clipboard as well

Right now tridactyl's 'yy' and clipboard commands work with the C-c clipboard (the + register in vim-speak). If tridactyl would yank and paste as well to and from the X-Window, "middle-mouse-button" clipboard (the * register in vim-speak) as vimperator and pentadactyl did, that would be great.

Private mode support

winopen -private google emacs-style browser extensions is currently stored in command history, if entered in a non-private window.

We should work out how we're going to deal with sensitive commands; potentially involving a blacklist of commands to never store.

Additionally, it is currently very hard to tell if the window you are in is private if you are using our userChrome. We could solve it with our own modeline or by figuring out how to disable it in the userChrome.

xpi is not build ?

Hello,

I cannot install tridactyl, xpi is not build after executing instruction from readme.md:

javi@doraemon:~/proyectos/tridactyl$ npm install # tried with 6.11.4 and  8.7.0 version

> [email protected] install /home/javi/proyectos/tridactyl/node_modules/dtrace-provider
> node scripts/install.js


> [email protected] install /home/javi/proyectos/tridactyl/node_modules/shared-git-hooks
> node index.js

Symlinking shared-git-hooks runner in .git/hooks

 [ ✓ ] applypatch-msg
 [ ✓ ] commit-msg
 [ ✓ ] post-applypatch
 [ ✓ ] post-checkout
 [ ✓ ] post-commit
 [ ✓ ] post-merge
 [ ✓ ] post-receive
 [ ✓ ] post-rewrite
 [ ✓ ] post-update
 [ ✓ ] pre-applypatch
 [ ✓ ] pre-auto-gc
 [ ✓ ] pre-commit
 [ ✓ ] pre-push
 [ ✓ ] pre-rebase
 [ ✓ ] pre-receive
 [ ✓ ] prepare-commit-msg
 [ ✓ ] update

> Please add your scripts in /home/javi/proyectos/tridactyl/hooks or $GIT_HOOKS_PATH


> [email protected] postinstall /home/javi/proyectos/tridactyl/node_modules/spawn-sync
> node postinstall


> [email protected] postinstall /home/javi/proyectos/tridactyl/node_modules/webpack/node_modules/uglifyjs-webpack-plugin
> node lib/post_install.js

added 981 packages in 20.672s
javi@doraemon:~/proyectos/tridactyl$ npm build
npm WARN build `npm build` called with no arguments. Did you mean to `npm run-script build`?
javi@doraemon:~/proyectos/tridactyl$ npm run build

> [email protected] build /home/javi/proyectos/tridactyl
> webpack

Executing pre-build scripts

[at-loader] Using [email protected] from typescript and "tsconfig.json" from /home/javi/proyectos/tridactyl/tsconfig.json.


[at-loader] Checking started in a separate process...

[at-loader] Ok, 0.372 sec.
Hash: 497faf44ef729dde6cc5
Version: webpack 3.8.1
Time: 2706ms
                        Asset       Size  Chunks             Chunk Names
       static/commandline.css    2.44 kB          [emitted]  
                background.js    41.2 kB       0  [emitted]  background
         commandline_frame.js    8.11 kB       2  [emitted]  commandline_frame
            background.js.map    63.4 kB       0  [emitted]  background
               content.js.map    36.4 kB       1  [emitted]  content
     commandline_frame.js.map    11.3 kB       2  [emitted]  commandline_frame
                manifest.json    1.05 kB          [emitted]  
                   content.js    25.1 kB       1  [emitted]  content
      static/commandline.html  283 bytes          [emitted]  
    static/defaultFavicon.svg    4.12 kB          [emitted]  
            static/newtab.css   31 bytes          [emitted]  
           static/newtab.html    1.12 kB          [emitted]  
static/userChrome-example.css    2.29 kB          [emitted]  
static/userChrome-minimal.css    1.25 kB          [emitted]  
   [0] ./src/messaging.ts 2.73 kB {0} {1} {2} [built]
   [1] ./src/dom.ts 1.39 kB {0} {1} [built]
   [2] ./src/keydown_background.ts 1.04 kB {0} [built]
   [3] ./src/state.ts 72 bytes {0} [built]
   [4] ./src/keydown_content.ts 2.85 kB {1} [built]
   [5] ./src/commandline_content.ts 2.47 kB {1} [built]
   [6] ./src/excmds_content.ts 5.95 kB {1} [built]
   [7] ./src/commandline_frame.ts 1.83 kB {2} [built]
   [8] ./src/background.ts 465 bytes {0} [built]
   [9] ./src/controller.ts 2.68 kB {0} [built]
  [10] ./src/parsing.ts 6.58 kB {0} [built]
  [15] ./src/commandline_background.ts 817 bytes {0} [built]
  [16] ./src/content.ts 374 bytes {1} [built]
  [17] ./src/msgsafe.ts 2.4 kB {1} [built]
  [18] ./src/number.clamp.ts 254 bytes {1} [built]
    + 4 hidden modules
javi@doraemon:~/proyectos/tridactyl$ find . -name "*xpi"
javi@doraemon:~/proyectos/tridactyl$ 

Is there a step which I did not give ?

Thank you very much !

Matrix IRC bridge is down

Connected to freenode, it looks like I can only see the other users on IRC and can't communicate with any others; my last few messages don't appear in https://riot.im/app/#/room/#tridactyl:matrix.org. Users using a Matrix account appear unaffected as from the Riot link I can see cgeier is online. Not sure if this is Matrix side or some bizarre accident.

add default to commandline

in Vimperator I either started in command mode or I had to hit esc to go to command mode. In Tridactyl you have to tab twice

:help

We want documentation generated from the source code and runtime data (maps, current values of settings (once we have them), etc).

Basic use :h :scrollline --> an anchor in a helpfile like vim, content is from the function signature and doccomment in excmds.ts.

Better:

  • :h :scrollline also shows all the maps that currently eventually map to it, and source code in an expando or something (like the Julia and Rust API documentation)
  • :h scrollline knows to show :scrollline if there isn't a map scrollline.
  • :h shows some useful index page (support for non-generated docs)
  • :h <some complicated map gives a generated help page which shows how the map expands.

First line of doccomment should be suitable for autocompletion help (e.g. :win shows :windo, :winclose, etc all with a one line description of what they do).

Build issue

On running ./make

cp: cannot stat 'commandline': No such file or directory

build error

> [email protected] build /Volumes/soft/code/tridactyl
> typedoc --out src/static/docs src --ignoreCompilerErrors; webpack


Using TypeScript 2.4.1 from /Volumes/soft/code/tridactyl/node_modules/typedoc/node_modules/typescript/lib
Error: /Volumes/soft/code/tridactyl/src/mod.test.ts(49)
 Property 'toBeAll' does not exist on type 'Matchers<void>'.
Error: /Volumes/soft/code/tridactyl/src/mod.test.ts(61)
 Property 'toBeAll' does not exist on type 'Matchers<void>'.
Rendering [========================================] 100%

Documentation generated at /Volumes/soft/code/tridactyl/src/static/docs

Executing pre-build scripts
./src/commandline_injector.sh: line 2: shopt: globstar: invalid shell option name
sed: 1: "src/static/docs/modules ...": unterminated substitute pattern

/Volumes/soft/code/tridactyl/node_modules/webpack-shell-plugin/lib/index.js:168
        throw error;
        ^
1
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] build: `typedoc --out src/static/docs src --ignoreCompilerErrors; webpack`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/zm/.npm/_logs/2017-11-07T03_01_31_045Z-debug.log

Is there a build ext to download?

Inconsistent functionality depending on where you click in gitter.im

Some panes seem to block tridactyl if they have focus. (Other than the input box, of course.)

If you click non-active parts of the left side of the screen, tridactyl seems to stay active -- for example, if you click on the word "GITTER" in the upper-left, or if you click the whitespace to the left of "YOUR SUGGESTIONS." (I.e., upper-left or lower-left works.)

If you click some parts of the right side of the screen, tridactyl shortcuts don't work. This includes clicking the empty space around one's user icon or the whitespace below the "PEOPLE" icons -- in other words, the upper-right or the lower-right. Text is not being entered, so it's not that the input box has focus.

So left works, right doesn't. Weird! Persists through reloading firefox.

Using Firefox 57.0 in Ubuntu 17.10.

Buffers looks a bit ugly when hitting esc

If you press Esc to quit the "buffers" command with the completions, the commandline briefly jumps to the top of the completions and it looks a bit janky.

We could try to delete both elements at the same time, or perhaps change something in the CSS to make things relative to the bottom of the page.

Default page for a new window is Google

While google is the most common homepage, not everyone uses it; however, it is the default return value for forceURI in excmds.ts. When forceURI is called and it has to fall back on a default, the default should be the user's default new tab page or- if that is not feasible- at least a configuration option.

Improving the commandline

The commandline needs history, autocomplete, readline-style bindings (C-u, C-w, etc), and more

Koushien's working on completion, but the general architecture and the rest of the work is up for grabs.

Here's a project that has an at-first-glance sensible architecture (the middleware stuff) and may have code we can nick: https://www.npmjs.com/package/shell

Blocks #24.

Parser discussion

ceb6e32

Converting keys[] to a string will produce odd results for special keys.

the .key value of backspace is "Backspace", for example.

It mostly works OK at the moment: the entire key is dropped if it doesn't match something, in one go.

The main problem is that it will stop people binding things to some capital letters (e.g. S for Shift).

The current method has the added bonus that you can type the key out - "B a c k s p a c e".

I'm unsure how much of this should go in Tridactyl, and how much should be in the keyboard API. It might make more sense if the keyboard API sent keycodes?

Otherwise, we could fix this by prepending a special character to any .key with length greater than 1, e.g something in Unicode like 🄰.

Having "Shi" be kept because it could map to "Shift" is clearly bonkers. Prefixing with an untypeable character is OK, but should be done by API consumers, not the API.

Keyboard API will send a shallow copy of the keyboardevent, but .code is not appropriate for finding 'Shift' and friends: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code

We'll just want to drop all the modifier keys anyway: we don't want users to map Shift or Control on their own, we just want them as modifier keys (which is detected with e.g. keyevent.ctrlKey property).

Arrow keys, backspace, etc. we will want to be mappable.

To think about:

  • prompt_toolkit has a vi mode, maybe check it out
  • How do we want to allow users to map to special keys (vim-style names and/or js .key names)?
  • If we want to introduce escapes for modifier keys in the mappings and keys or if we want to move away from a string based approach

Is this dead?

Since there's not been some activity in some time, I'm just wondering if development of this application has stalled or died out.

hints don't work on help page

Help page focuses the (useless) search bar on any keydown. Focus on an input field changes mode to insert, so hinting is broken.

This should be fixed when the keydown_content suppression logic gets driven by the keyseq parsers.

Hint mode also makes firefox fullscreen on youtube.com

When using hint mode to select a video on youtube if there are already hints showing, firefox goes into fullscreen mode. Pressing f again will make firefox not fullscreen, but the hints will not go away after firefox goes fullscreen.

Improve hinting

Basic components

It's own mode. Most code in content script, driven by excmds.

  • Iterable of visible links on page
  • Algorithm for choosing hint characters for each link
  • Mode for controller and excmd to refine and select hints:
    • I imagine :hint to start
    • :hint j to refine to only hints starting with j
    • :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.

Improvements

Hinting submodes should be programmable on both:

  1. What is hinted (links, anchorpoints, frames, input elements, etc)
  2. What is done with the selected link (follow, yank, focus)

Vimperator hint modes:

:help hinttags

string(default: //input[not(@type='hidden' or @disabled)] | //xhtml:input[not(@type='hidden')] | //a | //xhtml:a | //area | //xhtml:area | //iframe | //xhtml:iframe | //textarea | //xhtml:textarea | //button | //xhtml:button | //select | //xhtml:select | //\*[@onclick or @onmouseover or @onmousedown or @onmouseup or @oncommand or @role='link'or @role='button' or @role='checkbox' or @role='combobox' or @role='listbox' or @role='listitem' or @role='menuitem' or @role='menuitemcheckbox' or @role='menuitemradio' or @role='option' or @role='radio' or @role='scrollbar' or @role='slider' or @role='spinbutton' or @role='tab' or @role='textbox' or @role='treeitem' or @tabindex])
        
XPath string of hintable elements activated by f and F

Extended hint modes:

;  Focus hint 
?  Show information for hint 
s  Save link 
S  Save object 
a  Save link with prompt 
A  Save object with prompt 
f  Focus frame 
o  Follow hint 
t  Follow hint in a new tab 
b  Follow hint in a background tab 
w  Follow hint in a new window 
F  Open multiple hints in tabs 
O  Generate an ':open URL' using hint 
T  Generate a ':tabopen URL' using hint 
W  Generate a ':winopen URL' using hint 
v  View hint source 
V  View hint source in external editor 
y  Yank hint location 
Y  Yank hint description 
#  Yank hint anchor URL
c  Open context menu 
i  Show media object 
I  Show media object in a new tab 
x  Show hint's title or alt text

Blocks #24

Hook into existing new-tab addons

I understand that about:newtab is taboo zone. I, however, use Tabliss for my new tabs which should be enough to get that background script going. :-) Isn't there a way to detect existing "new tab" overrides, so Tridactyl could just hook in there?

(By the way: Thank you for Tridactyl. Really makes things easier.)

Support for building on Windows

  • change all shell scripts to pure JS

  • make all paths OS independent

  • fix git commit hooks

Building in Cygwin used to work until recently, but it would be good if pure Windows would work too.

Kill the chrome

Hide or auto-hide the firefox chrome.

userChrome-minimal.css already hides the tabs, but it's possible to hide the nav-bar too[1].

Let's find some way to combine these styles (just concatenating them doesn't do what we want).

Support 'n' for Find Again

Vimperator (and Vim) use lower-case n to jump to the next item matching a previous search. Firefox has this built-in with Command-G. Would it be possible to wire up n to trigger Find Again? Thanks.

Comments about standalone notes

As the developer of qutebrowser, some comments about the standalone document 😉

Two notable examples even have vim-like interfaces: qutebrowser and jumanji.

There are many more, the most notable (because they're still somewhat active) are uzbl and vimb.

Jumanji is a bad example really - it's abandoned and hasn't seen activity in over a year (it also uses WebKit1 which has been removed from WebKitGTK almost 3 years ago and deprecated for longer).

  • Kerning/font presentation code? (text in qutebrowser looks bad on Windows, don't know why)

The windows build is on a rather old Qt version and still using the QtWebKit backend, which is generally handling those kinds of things in a worse way. It should improve (read: look like in Chromium) once I manage to build a Windows build with the QtWebEngine backend, but there are some difficulties there (I managed to do so for OS X a few days ago).

  • Cross-platform OS shit

qutebrowser is using Python and Qt, so most stuff is taken care of. Deployment (see above) is probably the most annoying thing.

  • safebrowsing?

As in private browsing / icognito mode?

  • how much security stuff in engine/vs browser?

A lot of it is in the engine. With QtWebEngine, qutebrowser does really no network stuff at all (except blocking some requests) - with QtWebKit it's a little bit more, but by no means something low-level.

There were some embarassing bugs (the worst of them being passwords being logged in the debug log because it logged the element with keyboard focus, and the debug representation of it included its value), but those kinds of things can happen in a complex extension as well I'd imagine.

  • webm, webgl and similar? Presumably handled either by the engine or externally, but maybe picking and maintaining link to external thing is expensive.
  • flash handling?

Entirely handled by the engine. It's literally one line each in qutebrowser to map the setting to a qutebrowser one (to disable those).

  • developer tools (neat, but no reason for us to re-implement).

Implemented by the respective engine, i.e. you get WebKit or Chromium development tools, essentially for free (though using them with QtWebEngine is a bit cumbersome at the moment, still waiting for a better Qt API for that)

  • Firefox sync is neat and would be missed.
    We also lose access to the existing addon/extension repos. Maybe if we implemented webextension support in our own browser we'd get them back? Don't know how difficult that is.

qutebrowser has plans for a (Python, at first) plugin API. I'll look at WebExtensions some time after that, but it's definitely some more effort to implement all those APIs.

A life without the addon store:

  • site blocker --> /etc/hosts

Also built in in qutebrowser (with /etc/hosts-like blocking lists), as there are reasons you can't use /etc/hosts easily (like on a machine without root, and not sure how things look on Windows/OS X)

  • noscript is shit anyway

Those kinds of things can be done with a concept of just having per-domain settings, which is the next big thing I plan working on.

  • hide fedora is neat, but maybe just an element hiding list? Maybe it does have to parse differently.
    • example of neat addon that a smaller browser wouldn't have available, anyway.

But it'd probably be trivially portable when said smaller browser has a plugin API 😉


If you want to know more about some subject, ask away!

Ignore keybindings functionality

First of all a big thank you for creating this extension. I've been a vimperator user for a long time.

The vimperator feature I'm missing the most in tridactyl is the ability to temporarily suppress vim key bindings with Insert or Shift-Esc keybinding. This is very usefull on sites with own shortcuts (e.g. gmail, github, JIRA). The solution provided by Vimium for Chrome isn't an option for me.

Thanks,

suic

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.