The tale of ex-mode
Prev |  | Next

## The tale of ex-mode

Are you a vim-controls nerd who wants to see them everywhere? Welcome.

Actually ELinks doesn't shine in this area yet very much. Heck, the famous hjkl foursome is still occupied by some feeble managers in the default keymap (we have that in our monumental TODO lists). Still, if you know what to touch during the compilation (`--enable-exmode`), you can get at least some familiar reply to the mighty “:” (colon) grip.

### What it is

Ex-mode gives you some (still very rough and only marginally complete) access to advanced ELinks commands, to be invoked anywhere anytime, straight and fast.

When you activate the ex-mode (named after the equivalent gadget in the vi text editor flavours), a command line appears at the bottom of the screen for you to type the commands.

Only two kinds of commands are supported so far. First, (almost?) anything that can appear in the configuration file can be used in ex-mode. Second, you can invoke (almost) any action from the ex-mode.

### Configuration directives in exmode

There aren't many of these, so we can skim through them fast.

If you want to flip an option you know by name and refuse to engage with the option manager visuals, you can just drop in to the ex-mode and type set the.option = 1234. See man elinks.conf (5) or the options manager for the list of options; you can also get a complete options tree saved to elinks.conf if you set config.saving_style = 2 (but do NOT keep that setting unless you know what are you doing; if we change a default value of some option in future releases, we (generally) know what are we doing - this change won't propagate to you during an upgrade if you already have the original default value saved in your configuration file, though).

It's the same story with keybindings. You can use bind "main" "h" = "move-cursor-left". It's not the same story with keybindings documentation. There is the elinkskeys (5) manual page but it's horribly obsolete, so don't rely on it. You can refer to the keybindings manager for names of actions and even their short descriptions. Also, all the bind commands are saved to the configuration file if you set config.saving_style = 2 (but see above).

You can also use include my.conf, which will read my.conf as an ELinks configuration file.

Actually, ELinks would eat #blahblah blah too, if you see a point in feeding it that kind of stuff.

### Actions in exmode - or exmode in action?

There is too many of these, so we should better skim through them fast.

Actually, we already talked about them. It's the last argument to the bind command. So, they are those listed in the keybinding manager. So if you enter move-cursor-left command, it will move your cursor left - by a single character, making this a little awkward, but it's useful if you sometimes want to easily invoke an action and you don't want to waste a key for it.

Actually, actions could theoretically take arguments too. This is currently implemented only for the goto-url action, which can take the location it should go at as a parameter (otherwise it opens the standard well-known dialog as if you pressed g in the default keymap).

Regarding the mysterious "(almost)" hinted above, you can never invoke the "quit" action from the exmode - if you type it there, "really-quit" is invoked instead.

### How to use it

It's simple. You press : (without the apostrophes, of course) and type in the command, then you press enter. E.g., :set config.saving_style = 3 (this is a good thing), :quit (and the game is over). The standard line-editing facility is present (cursor keys and so), and the ex-mode input line has own history.

### The "but"s

The biggest usability hurdle so far is that there is no tab-completion. This is why the ex-mode support is not enabled by default and part of the reason why its practical usage is somewhat limited yet - if you don't remember exactly what do you want to invoke, tough beans. Someone shall address this issue in the future.

Also, perhaps wider scale of commands should be implemented in ex-mode. The code is extremely flexible and it is very trivial to make another ex-mode command handler, it's just that no one has done it yet ;-). Also, more actions should be able to take arguments.

### Macros

Addition to the ex-mode are macros, because code of macros relies on the ex-mode code. You can set up to 10 macros, for example:

set macro.0 = "goto-url https://www.google.com"

In the ex-mode you can call it as:

:macro-0

Next you can bind macros to keys. For example:

bind "main" "F4" = "macro-0"

Since now the F4 key will go to the google page. In macro you can set any command of the ex-mode, you can group a few commands separating them by semicolon and escaping quotes. Example:

set macro.1 = "set protocol.http.user_agent = \"Blah blah\";goto-url https://lite.duckduckgo.com/lite"

:macro-1

Examples are "weak", but you get the idea, don't you?

Prev |  | Next
Managing remote ELinks instances | Home | ELinks BitTorrent Client