Commit Graph

49 Commits

Author SHA1 Message Date
Frank LENORMAND
e84dcf72c0 src: Allow hooks to be run only once
This commit implements the -once flag on the `:hook` command, which
automatically removes a hook after it was run, to avoid having to
declare a group and remove it in the hook implementation.

Closes #2277
2018-08-06 15:14:20 +03:00
Maxime Coste
54b62cbef7 Do not expose C++ typeid().name to user facing errors on wrong option type
Fixes #2079
2018-05-26 10:01:26 +10:00
Maxime Coste
4eb6740794 Add a -always switch to hook command to ignore hooks disabled
Hooks specified as always will run regardless of the hook disabled
status.
2018-04-26 08:28:11 +10:00
Maxime Coste
57baad4afd Make FaceRegistry scoped
set-face now takes a scope argument, and faces can be overridden on
a buffer or window basis.

colorscheme apply on global scope, which should be good enough for
now.

Fixes #1411
2018-04-07 16:27:50 +10:00
Maxime Coste
1ae96c977c Small formating tweak 2017-11-25 13:46:55 +08:00
Maxime Coste
a5ae21d70d Move HookManager::Hook definition in the cpp
This avoids including regex.hh in the header.
2017-10-06 13:58:04 +08:00
Maxime Coste
ab6a999431 Rename containers.hh to ranges.hh (and Container to Range) 2017-08-29 15:23:03 +07:00
Maxime Coste
b81500c0e4 Use microseconds instead of milliseconds for built-in profiling 2017-06-07 20:06:47 +01:00
Maxime Coste
1d4093bcdc Fix memory errors due to sharing the MatchResults in the Hooks struct
A hook execution triggered by another hook execution would change the
shared MatchResults object, which is a wrong behaviour and makes it
point to dead string data.
2017-06-07 19:18:15 +01:00
Maxime Coste
f0285a8e60 Move hook executing logic into HookManager
The existing HookManager was able to run arbitrary hook functions,
but in practice was only used for user provided textual hooks.

That separation was causing some suboptimal performances, by moving
that logic directly in the hook manager we can improve hook filtering
performance which is a big part of startup time when opening lots
of files.
2017-06-07 12:33:39 +01:00
Maxime Coste
4606453fed Avoid expensive copies of Hooks in HookManager::run_hooks
Use a deferred deletion mechanism to ensure hooks are kept alive
for the duration of run_hooks.
2017-06-07 12:15:16 +01:00
Maxime Coste
a5e7b6a22f Use a vector instead of a hash map to store hooks 2017-06-07 09:46:05 +01:00
Maxime Coste
5f7464d90d Try to clean up option include a bit 2017-03-16 09:57:39 +00:00
Maxime Coste
f0ae0b8410 Replace IdMap with HashMap 2017-03-07 01:12:37 +00:00
Maxime Coste
9271f0a87d Fix handling of disabled_hooks regex 2017-02-19 13:59:34 +00:00
Maxime Coste
889a2144d4 Copy the list of hooks to run before iterating on them and running them
Running hooks could result in the hook list getting mutated, leading
to potential crashes.

Fixes #1222
2017-02-19 12:08:13 +00:00
Maxime Coste
38102595ef Small naming tweak in HookManager 2017-02-19 11:52:31 +00:00
Maxime Coste
e3c4bddd3b Make hook disabling work for all hooks, not only user hooks
Fixes #823
2016-09-26 23:43:05 +01:00
Maxime Coste
46a15534c5 Introduce chrono.hh 2016-07-24 21:25:05 +01:00
Maxime Coste
bb688cf42d Do not throw when recursive hook calls are detected
Running hooks is non critical, and should never `fail` as far as
caller is concerned.
2016-07-11 19:44:29 +01:00
Maxime Coste
089eaa52e0 Detect recursive hook run and abort in that case
Fixes #709
2016-06-27 20:55:07 +01:00
Maxime Coste
55ee6f970e Write the hook parameter in the debug buffer on error in hook 2016-03-17 11:45:22 +00:00
Maxime Coste
9e15181dc9 Rework container helpers, use pipe syntax and cleanup implementation
use 'container | filter(func) | reverse() | transform(func)' instead
of 'transform(reverse(filter(container), func), func)' to express
container transformations.
2016-03-08 21:35:56 +00:00
Maxime Coste
a8d2c93ac8 Add a profiling debug flag to get timings for hooks/shell eval 2015-11-21 12:11:19 +00:00
Maxime Coste
c0f1b7b99f Introduce a debug flags option to control some tracing
Support shell|hooks and write traces in debug buffer
2015-11-19 21:58:26 +00:00
Maxime Coste
693d9a4861 Store key hash in IdMap 2015-09-16 20:02:12 +01:00
Maxime Coste
f1c286e592 Notify user when some hooks failed 2015-07-08 14:00:50 +01:00
Maxime Coste
e6f0e8ef75 Move write_debug to buffer utils as write_to_debug_buffer 2015-06-06 11:54:48 +01:00
Maxime Coste
8f6fc6a0f3 Port even more code to use format function 2015-06-01 21:15:59 +01:00
Maxime Coste
3c1a325b6f Refactor String, use a common StringOps interface, hide std::string 2015-03-10 19:50:22 +00:00
Maxime Coste
99996902de Use a IdMap for storing hooks
The number of hook names is small (<20), using an UnorderedMap
is overkill, and prevents using StringView for key searching.
2015-03-05 14:59:27 +00:00
Maxime Coste
b0fef1a962 Rename id_map to IdMap 2014-12-23 22:51:00 +00:00
Maxime Coste
b6ff15aa75 Unify completion from container content logic 2014-12-23 13:54:09 +00:00
Maxime Coste
fc4142178f Port more code to StringView instead of const String& 2014-10-20 19:18:38 +01:00
Maxime Coste
fa85f0fc32 Refactor regex uses, do not reference boost except in regex.hh 2014-10-13 13:14:23 +01:00
Maxime Coste
8fc230e40d Add a 'disabled_hooks' regex option
Hooks whose group matches this regex wont get executed.
2014-08-21 14:37:59 +01:00
Maxime Coste
731277a425 Disable hooks on a per context basis, and propagate that to Insert mode
using \ before entering insert mode will disable hooks during the whole
insert session rather than only the entering phase. That gives a nice
way of pasting text into kakoune.
2014-07-24 19:18:39 +01:00
Maxime Coste
3c021672d2 Add completion support for rmhooks 2014-07-21 21:14:32 +01:00
Maxime Coste
edd883ad18 Only user hooks can be disabled 2014-06-21 12:08:19 +01:00
Maxime Coste
b8a205b858 Use -group rather than -id in hooks to mirror highlighters closer 2014-06-16 20:42:12 +01:00
Maxime Coste
c48bdbe4f1 exec and eval support the -no-hooks option
Hooks gets disabled during the execution of the commands
2014-03-20 08:29:41 +00:00
Maxime Coste
d27548dd15 Resurect idvaluemap, order of traversal matters
This reverts commit 2b9b161d42.
2013-11-18 22:17:50 +00:00
Maxime Coste
2b9b161d42 remove idvaluemap, use unordered_map in place 2013-11-17 23:06:40 +00:00
Maxime Coste
107e95622d Hooks can have an (shareable) identifier, and thus be removed 2013-04-11 14:29:10 +02:00
Maxime Coste
4cf7c4175a HookManager: write to debug when a hook fails 2013-04-11 13:58:09 +02:00
Maxime Coste
621be2ceab Hooks now takes a non-const context 2013-01-17 13:45:43 +01:00
Maxime Coste
9bcfda3226 HookManager are now hierarchical from window to buffer to global
window hooks also executes buffer hook which also execute global hooks
2012-06-07 13:29:44 +00:00
Maxime Coste
9337938403 replace std::string references with String 2012-04-14 01:17:09 +00:00
Maxime Coste
9444c84b1c rename HooksManager to HookManager 2012-04-03 12:01:01 +00:00