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