Maxime Coste
719512b308
Use a separate copy of the command completer for each completion
...
This make the completer lifetime tied to the Prompt mode and removes
the need for the Start flag. It also makes it possible to cleanup
on completer destruction.
2023-11-14 21:39:03 +11:00
Maxime Coste
04780b235b
Add support for recursive expansions with %exp{...}
...
%exp{...} just expands its content the same way double quoted strings
do, but using a named expansion type makes it possible to use the
more quoting mechanism to avoid quoting hell.
2023-05-04 12:49:50 +10:00
Maxime Coste
458e3ef20a
Immediately execute ModuleLoaded hooks for already loaded modules
...
This is trickier than expected because ModuleLoaded hooks can (as
any other hooks) use arbitrary regular expressions for their filter.
Fixes #4841
2023-02-14 21:31:29 +11:00
Maxime Coste
7061001728
Add a complete-command command to configure command completion
...
This makes it possible to change command completion in hooks and
paves the way to more flexibility in how custom commands can be
completed
2022-03-06 10:13:14 +11:00
Maxime Coste
2289f350df
Remove command parsing Reader and just track a ParserState
...
The Reader abstraction was leading to suboptimal code by encouraging
decoding utf8 separately from advancing to next codepoint.
2021-07-09 17:03:22 +10:00
Maxime Coste
be9b2de0ee
Only compute command coordinates when necessary
...
Tracking the line/column of each token takes a surprising big part
of the command parsing logic runtime and is only necessary when we
hit an error.
2021-06-24 17:20:37 +10:00
Maxime Coste
0cecea6593
Fix completion past explicitely closed tokens
...
This fixes an issue where completion would still be provided after
the closing character of a token, which could then get frustrating
combined with auto-insertion of completions.
For example, inserting `%{<newline>}` for a command-completed token
(such as the commands for a hook) would still trigger completion right
after the `}` and that completion would get auto-inserted **replacing**
that closing `}`.
2021-05-18 20:50:56 +10:00
Maxime Coste
5df8073c3c
Code style tweaks
2020-07-19 12:54:41 +10:00
Maxime Coste
d4487d3bfc
A module is not loaded after failing during load
...
distinguish the loading from loaded state, detect recursive loading.
2020-06-16 19:08:10 +10:00
Maxime Coste
149da2064d
Handle invalid utf8 in command line a bit better
...
Reduce the amount of decoding by working directly on
bytes.
Fixes #3388
2020-03-13 08:02:58 +11:00
Maxime Coste
62b4780e07
Fix command error line/column reporting
2019-12-24 08:34:24 +11:00
Maxime Coste
a49ae162f4
Add a -verbatim switch to evaluate-commands for perfect forwarding
...
-verbatim will disable argument parsing in evaluate-commands, making
it possible to forward a single command to a different context without
triggering a reparsing of the arguments.
Fixes -try-client support in grep.kak
Closes #3153
2019-10-23 22:30:23 +11:00
Maxime Coste
4c4eb61c18
Introduce FunctionRef to replace std::function when not storing
...
std::function is not necessary when we just want to pass a type
erased callback that does not need to own its target. FunctionRef
provides that functionality for a much lower compile time cost.
2019-09-01 13:04:47 +10:00
Maxime Coste
4916471029
Add completion support to load-module
2019-05-13 17:34:45 +10:00
Justin Frank
6092852640
Added 'provide-module' and 'require-module' commands
2019-04-08 17:02:44 -07:00
Maxime Coste
41f19f8dc9
Add support for %file{...} expansions
...
This should make the use case exposed in #2836 implementable.
2019-04-07 09:43:40 +10:00
Maxime Coste
5eeec8bd4d
Make expansion of strings support quoting of % by doubling up
2018-07-05 07:54:28 +10:00
Maxime Coste
bde1f5349d
CommandManager: refactor parsing of commands to iterate through tokens
...
Avoid storing a big vector of tokens, read them one by one, and
store only the current command.
2018-02-15 23:24:19 +11:00
Maxime Coste
b7a3d80bde
CommandManager: Use byte rather than columns for token positions
...
Not only are display columns rarely used to give error positions,
but they make the parsing much slower as for each token we need to
compute the column in the line.
2018-02-09 20:30:33 +11:00
Maxime Coste
6bac767124
CommandManager: tweak naming
2017-11-04 16:02:21 +08:00
Maxime Coste
64183b1e4c
Make Token a simple aggregate
2017-09-01 17:09:34 +07:00
Maxime Coste
eb2984807c
Remove some dead code
2017-06-29 07:43:20 +01:00
Maxime Coste
c1c40a4b56
Remove some now unneeded uses of const String& params
...
HashMap supports finding String from StringView.
2017-04-10 21:33:20 +01:00
Maxime Coste
e44f95820e
Fixes some clang-tidy warning and add a few missing meta.hh include
2017-03-16 23:34:02 +00:00
Maxime Coste
7d9f1df73a
Small code tweaks regarding flags handling
2017-03-15 18:25:59 +00:00
Maxime Coste
db9b863222
Migrate WithBitOps template specialization to with_bit_ops function
...
This way we dont depend on knowing the base template to enable bit ops
on an enum type.
2017-03-15 18:00:58 +00:00
Maxime Coste
6373338c50
Replace uses of UnorderedMap with HashMap
2017-03-07 01:03:26 +00:00
Maxime Coste
2052b225d9
Detect too deep command call stack
...
Fixes #1163
2017-01-29 13:56:05 +00:00
Maxime Coste
d17bed9b80
Display the command prompt in error face when the command is not found
...
Fixes #1021
2016-12-23 16:23:31 +00:00
Maxime Coste
03eb128536
Ensure content of expanded strings in modelinefmt is not interpreted as markup
2016-12-07 20:07:32 +00:00
Maxime Coste
35559b65dd
Support codepoints of variable width
...
Add a ColumnCount type and use it in place of CharCount whenever
more appropriate, take column size of codepoints into account for
vertical movements and docstring wrapping.
Fixes #811
2016-10-01 13:45:00 +01:00
Maxime Coste
d14c39ebdd
Rewrite PerArgumentCommandCompleter to use compile time dispatching
...
No need to store these vectors of std::functions around anymore.
2016-09-18 16:07:00 +01:00
Maxime Coste
5b7b6eebaf
Regenerate shell-candidates for each completion sessions
...
That should allow fixing the #665 issue while still avoiding to
run a potentially long shell command on each keystroke.
2016-08-05 13:53:19 +01:00
Maxime Coste
1d646c03f5
Add completion support for alias/unalias commands
2016-03-24 00:05:40 +00:00
Maxime Coste
21ae662151
Use ranked match based completion for command names
2016-03-08 13:56:37 +00:00
Maxime Coste
5b9d30c088
Optimize the dynregex case where the expression refers directly to a regex option
2015-12-12 06:50:58 +00:00
Maxime Coste
1ba37bacd8
Fix optimized linkage
2015-10-23 09:49:06 +01:00
Maxime Coste
da7fc3311f
Pass ShellContext to commands
...
Fix #427
2015-10-22 13:59:23 +01:00
Maxime Coste
e51ef6c3c2
Wrap the shell params en env vars in a ShellContext struct
2015-10-22 13:48:57 +01:00
Maxime Coste
f59108072f
Initial support for user configurable modeline with the modelinefmt option
...
modelinefmt is first sent through a command line expander (so %sh{...},
%val{...} et al. are expanded), then through markup expand (so that
{face} are interpreted as well)
2015-09-19 12:43:39 +01:00
Maxime Coste
5b554ff474
Add support for command completion on commands, use it for :new
...
That means commands can be completed using other commands and their
completers. Yes that does makes sense.
Closes #296
2015-06-26 13:57:23 +01:00
Maxime Coste
cfdf03ab31
Make expand function (that expand %...{} tokens) public
2015-05-04 17:08:57 +01:00
Maxime Coste
1cec8df45e
ArrayView content is not const anymore
...
As in upcoming std c++ array_view, ArrayView<T> points to mutable
data, use ArrayView<const T> or alias ConstArrayView<T> for const
data.
2015-03-09 13:54:09 +00:00
Maxime Coste
a94c554a7b
Add optional helper for commands, to get parameter dependent help
...
Use for the set command to document options.
2015-02-08 19:04:20 +00:00
Maxime Coste
83d0813b0f
Yet more tracking
2015-01-12 13:45:44 +00:00
Maxime Coste
295a97f2a6
Rename memoryview to ArrayView
2015-01-06 13:43:37 +00:00
Maxime Coste
ebecd60eb8
Rework hashing, use a more extensible framework similar to n3876 proposal
...
std::hash specialization is a pain to work with, stop using that, and
just specialize a 'size_t hash_value(const T&)' free function.
2014-12-16 18:57:19 +00:00
Maxime Coste
185b980718
Add scoped aliases
...
aliases are now stored in window, buffer, or globally.
2014-10-30 14:02:13 +00:00
Maxime Coste
3e797a3d15
centralize bit operation support for enum used as flags
2014-10-23 19:02:39 +01:00
Maxime Coste
2d5c730441
Replace CommandManager::register_command*s* with register_alias
2014-06-06 00:21:12 +01:00