Maxime Coste
ea66465144
Restore previous status line after notifying wait for shell
...
Fixes prompt getting erased by the wait for shell message, and
having to manually trigger a redraw to see it again.
2018-04-01 10:08:54 +11:00
Frank LENORMAND
e06d048d2f
src: Make code more readable, assert function calls that shouldn't fail
...
Should help clarify what the issue is in #1972 .
2018-03-31 15:00:19 +03:00
Maxime Coste
0baf562c93
Support full redraws during shell execution and handle resize there
...
Fixes #1973
2018-03-30 09:58:18 +11:00
Maxime Coste
f6f2dafaf7
Make set -add replace existing value when applied to a map option
2018-03-30 09:26:39 +11:00
Delapouite
7f3a308b60
Add status message when commiting an undo group in insert mode
2018-03-29 22:54:03 +02:00
Maxime Coste
fab3dc642a
Merge remote-tracking branch 'Delapouite/on-key'
2018-03-28 21:41:17 +11:00
Maxime Coste
ebc700ee17
Fix uninitialized m_empty_text StringView in LineEditor
2018-03-28 20:48:50 +11:00
Delapouite
1b7b3fea09
Fix typo in on-key command description
2018-03-28 07:33:43 +02:00
Delapouite
fc3f0f40b7
Give more hints in "option not found" error.
2018-03-27 19:14:41 +02:00
Maxime Coste
1f6c2b87ff
Support count in <a-s> to split on groups of n lines
...
Fixes #1966
2018-03-27 22:33:58 +11:00
Maxime Coste
e8093a12a0
Simplify command debug code
2018-03-27 08:25:47 +11:00
Maxime Coste
0a833371ab
Prompt: Do not call callback in on_enabled
...
Schedule it for later, when we get "idle". It currently can lead to
crashed because after the callback, the current mode might be different,
leading to a crash when doing the ModeChange hook call.
2018-03-27 07:40:44 +11:00
Maxime Coste
3d3a37a80c
Fix 'O' not putting the cursor on the correct line
2018-03-27 07:28:25 +11:00
Maxime Coste
253790be51
Formatting fix
2018-03-26 19:50:51 +11:00
Maxime Coste
5ba27c18a4
Fix operator priority order error
2018-03-26 19:19:47 +11:00
Maxime Coste
59c883d02f
Avoid visiting the same directory multiple times in insert filename completion
2018-03-25 20:28:26 +11:00
Maxime Coste
6d3fe30bf6
Allow explicit filename completion with empty prefix
2018-03-25 19:03:54 +11:00
Maxime Coste
a6b1d142fa
Cleanup client name validation code
2018-03-25 16:53:27 +11:00
Maxime Coste
49c52b025f
Remove contains_that and use any_of to be closer to the c++ stdlib
2018-03-25 16:47:19 +11:00
Maxime Coste
435b5b7ff9
Unify code that validates identifiers in Kakoune
...
Session/Client/User modes names are now requiered to be "identifiers"
they must be in [a-zA-Z0-9_-]. Option names are the same except they
do not allow '-' as they need to be made available through the env vars
and '-' is not supported there.
Fixes #1946
2018-03-25 16:35:33 +11:00
Maxime Coste
beb2cef7f9
Document rotate selection breaking change in startup message
2018-03-25 11:39:26 +11:00
Maxime Coste
ec7f3738ee
Move rotate selection and rotate selection contents to ) and <a-)>
...
Backward rotation are supported with (.
Fixes #1210
2018-03-25 11:39:26 +11:00
Maxime Coste
683ce8e83b
Use 1 and -1 for Forward/Backward Direction to simplify code
2018-03-25 11:25:55 +11:00
Maxime Coste
59e9108812
indent selector: When line is empty, find indent from surrounding lines
...
Look for the first non empty line preceeding the current line, or
if not found, the first non empty line following it.
Fixes #1904
2018-03-25 10:25:56 +11:00
Maxime Coste
81f605709c
Remove parse_filename overload and use a default parameter
2018-03-25 07:55:39 +11:00
Maxime Coste
a732037b53
Support %
in path
option to mean current buffer directory
...
In the end, % is not that painful to work with as its only set seldomly,
and we usually dont need to use expansion at the same time. Moreover, it
just requires a single \ to be escaped.
Fixes #1562
2018-03-23 08:22:34 +11:00
Maxime Coste
db7b43acd5
Restore client name after converting to client
...
When Kakoune forked the sever to background, the newly converted
to client process (the original client/server process) was not
preserving its previous client name.
2018-03-23 07:36:18 +11:00
Maxime Coste
1cdeace128
Merge remote-tracking branch 'Delapouite/doc-commands'
2018-03-21 06:42:31 +11:00
Maxime Coste
5c1a5c6d15
Revert "Throw when trying to remove a child highlighter that does not exists"
...
This reverts commit 56237aa8f8
.
Throwing seems more correct, but it breaks lots of existing scripts.
reverting for now until we have a nice solution.
2018-03-20 20:11:15 +11:00
Delapouite
00cb49438a
Docs: add missing [<switches>] in commands signatures
2018-03-20 09:13:09 +01:00
Maxime Coste
bec849ae14
Tolerate empty filenames in real_path
2018-03-20 05:56:20 +11:00
Maxime Coste
f7f84b7402
NCursesUI: Rework menu_show to shrink menu height when needed
...
Closes #1886
2018-03-20 05:54:19 +11:00
Maxime Coste
826977eb1b
Fix remove of highlighters with trailing / in their name
...
Fixes #1914
2018-03-20 05:35:37 +11:00
Maxime Coste
56237aa8f8
Throw when trying to remove a child highlighter that does not exists
2018-03-20 05:35:15 +11:00
Maxime Coste
b27d4afa8d
Regex: Only allow SyntaxCharacter and - to be escaped in a character class
...
Letting any character to be escaped is error prone as it looks like
\l could mean [:lower:] (as it used to with boost) when it only means
literal l.
Fix the haskell.kak file as well.
Fixes #1945
2018-03-20 04:57:47 +11:00
Maxime Coste
6e695e37be
Fix real_path again
2018-03-19 20:49:05 +11:00
Maxime Coste
6d8747b886
Fix introduced bug in real_path
2018-03-19 06:28:06 +11:00
Maxime Coste
9518f279fb
Tweak option documentation helper to support -add
...
Fixes #1939
2018-03-19 03:04:50 +11:00
Maxime Coste
8a7e844207
NCursesUI: refactor info_show code
...
Show MenuDoc info on the left of the menu if necessary. Cleanup the
code.
2018-03-19 01:23:32 +11:00
Maxime Coste
cf37623f1a
Refactor read_fd '\r' removal logic
2018-03-18 23:43:18 +11:00
Maxime Coste
ac91a79b12
Fix implementation of real_path to handle non-existing directories in /
...
Fixes #1937
2018-03-18 23:23:00 +11:00
Maxime Coste
7ba4ef897b
Fix crash on expanding command line strings
2018-03-18 04:58:15 +11:00
Maxime Coste
0a2807e652
RangesHighlighter: a range that goes up to buffer end is not valid
2018-03-16 23:25:37 +11:00
Maxime Coste
08df409a53
RankedMatch: Do not compare word boundary match count on single word matches
...
As the computation of word boundary matches is separate from the
actual subsequence matching, we sometimes have candidate that match
as a single word while still having multiple word boundary matches.
For example, with query "expresins", candidate "expressionism's"
will match as single word ("expressins" is a subsequence of
"expressionism"), and will have two word boundaries match (it does
match the last "s", which is considered as a separate word).
This should not be taken into account when compared against
candidate "expresions", which should be considered a better
match.
Fixes #1925
2018-03-15 23:20:03 +11:00
Maxime Coste
6f2b093eec
NCursesUI: Show full menu rather than triming to respect anchor
2018-03-13 15:18:06 +11:00
Maxime Coste
a480e566dc
ranges: Add transform overload taking directly a pointer to member
...
This overload will forward to the general transform implementation
using std::mem_fn to generate a callable.
2018-03-13 14:24:03 +11:00
Maxime Coste
c82bf31378
NCursesUI: Use accumulate algorithm to gather the longest element in menu
2018-03-13 14:14:16 +11:00
Maxime Coste
bfaf52f8c0
Do not jump to buffer start on g.
with no previous modifications
2018-03-13 14:00:57 +11:00
Delapouite
d5d23834f6
Handle hyphens in user-mode names
...
Fix #1921
2018-03-11 14:58:53 +01:00
Maxime Coste
e66073bc94
Detect infinit recursion in reference highlighting
...
Reference highlighters allow for potential mutual recursion between
highlighters. This is usually fine, but if the recursion happens on
the same buffer range, it means we will recurse infinitely.
Fixes #1920
2018-03-11 11:44:10 +11:00
Maxime Coste
4584ecac77
Move WORD text object to <a-w>
...
It improves consistency and it looked like there was support for that
change on github.
Fixes #1861
2018-03-10 00:25:19 +11:00
Maxime Coste
f801d0064a
Merge remote-tracking branch 'Delapouite/hls'
2018-03-10 00:07:03 +11:00
Maxime Coste
9125b01fa8
Detect no-op replaces and do not act on them
...
This avoids recording no-op undo groups.
2018-03-09 23:07:05 +11:00
Delapouite
abc2d28570
Docs: extend explanations about line_flags, ranges and replace-ranges
2018-03-06 12:15:55 +01:00
Maxime Coste
9c85d9b389
Support changing autoreload option directly from the reload message
...
Pressing Y or N will set the buffer (or window, if it is set at that
scope) autoreload option to the corresponding value, avoiding infinite
loops where a file getting constantly modified prevents the user from
using Kakoune.
2018-03-05 11:17:57 +11:00
Maxime Coste
07113e7ee5
Add a GlobalSetOption hook
2018-03-05 10:39:14 +11:00
Maxime Coste
642b711d94
Merge remote-tracking branch 'Delapouite/scratch'
2018-03-05 07:10:57 +11:00
Maxime Coste
fb65fa60f8
Regex: take the full subject range as a parameter
...
To allow more general look arounds out of the actual search range,
pass a second range (the actual subject). This allows us to remove
various flags such as PrevAvailable or NotBeginOfSubject, which are
now easy to check from the subject range.
Fixes #1902
2018-03-05 05:48:10 +11:00
Maxime Coste
d9e44dfacf
Regex: Remove helper functions from regex_impl.hh
...
They were close duplicates from the ones in regex.hh and not used
anywhere else.
2018-03-05 03:10:47 +11:00
Maxime Coste
6c4faf2050
Merge remote-tracking branch 'fsub/unused-lambda-capture'
2018-03-05 00:39:56 +11:00
Maxime Coste
a2fc89a6ec
Remove SelectionList::update_timestamp()
...
This single line member function was only used once, inline it
directly.
2018-03-04 10:35:24 +11:00
Maxime Coste
2fd42fe5fc
Insert: Do not move end of line on open line (o/O)
...
Change the logic of open line commands so that if a selection lies
on the end of line character of the line from which we open a new
line, that selection does not move.
If we have two clients, A and B, with B's cursor on the eol character
of line L, and A hits `o` while on line L, B's cursor should stay
on the same (logical) line. Previous behaviour would make B's cursor
jump on the newly inserted line.
2018-03-04 10:32:21 +11:00
fsub
44d381ce79
Remove unused lambda capture
2018-03-03 17:57:51 +01:00
Delapouite
c4eb4438d2
Remove <scope> from user-modes commands
2018-03-02 09:28:27 +01:00
Maxime Coste
7a54c0edfe
Update status message with new breaking changes
2018-03-01 15:36:25 +11:00
Maxime Coste
28716ec058
Change x behaviour to select full line first even if on EOL
...
x will always first select current line fully, and only then select
next line.
2018-03-01 15:34:31 +11:00
Maxime Coste
f907e6cc46
Reintroduce complex selection merging behaviour
...
Selection merging is necessary if we want X to work nicely when we are
on EOL (jumping to next line is as nice as it could be, and we are much
more often on EOL nowadays).
2018-03-01 15:21:55 +11:00
Maxime Coste
7dfd439263
Merge remote-tracking branch 'Delapouite/user-mode-lock'
2018-03-01 14:04:52 +11:00
Maxime Coste
2193947b71
InsertCompleter: refactor line completer implementation
2018-02-28 15:40:42 +11:00
Maxime Coste
4e6b24eea2
Merge remote-tracking branch 'Delapouite/line_complete'
2018-02-28 15:32:31 +11:00
Maxime Coste
44a5082aaf
Commands: Refactor generate_switches_doc
2018-02-28 15:32:11 +11:00
Maxime Coste
a6fd70c456
Ranges: Fix copiability of some range view iterators
...
Some iterators were refering to to their view with a const ref, this
was making them non-copiable. Change those const ref into const pointers
in order to fix that.
2018-02-28 15:16:49 +11:00
Maxime Coste
edee85a847
Merge remote-tracking branch 'aver-d/option_display'
2018-02-28 15:09:26 +11:00
Maxime Coste
d498a059c4
Prompt: update completions after inserting register or raw ke
2018-02-28 15:05:38 +11:00
Maxime Coste
bebc81ebe1
RefPtr: use inconditional noexcept specification on destructor
...
The conditional specification could end up being recursive,
assume destructors must be (as is the C++ default) noexcept.
2018-02-28 15:04:00 +11:00
Delapouite
a6a1c34288
Add -lock switch to enter-user-mode command
2018-02-27 19:55:00 +01:00
Delapouite
0568836943
Add support for line completion in all buffers
...
- via completers option with line=all vs line=buffer
- via <c-x> L mapping
2018-02-27 09:48:49 +01:00
Delapouite
98fcf8a497
Add [scratch] indicator in context info
2018-02-27 08:22:46 +01:00
Maxime Coste
b4dc16010d
Fix out of bound read in ParameterParser::get_switch
...
The empty string case was not correctly handled.
Fixes #1883
2018-02-26 15:20:19 +11:00
Maxime Coste
18f0902824
Merge remote-tracking branch 'Delapouite/sels'
2018-02-26 11:34:05 +11:00
aver-d
f43635c4df
Ease reading of command-line options
...
This change displays command-line options in grid format. Each
parameter is indented with two spaces and then padded to maintain
vertical alignment of each description.
I think the visual spacing makes the options much easier to
read. This is particularly important for people new to Kakoune who
use `-help` as a way to become familiar with the program.
2018-02-25 01:46:50 +00:00
Maxime Coste
6453ce7394
RefPtr: Add some more noexcept specifications
2018-02-25 00:20:10 +11:00
Maxime Coste
67424aae1e
Remove avoidance of end of lines
...
Various places in Kakoune code used to modify selections so that
cursors would not lie on an end of line. Remove those to increase
Kakoune's consistency and simplicity.
Now that end of lines are highlighted separately, they should not
be handled specially in most commands.
2018-02-25 00:05:05 +11:00
Maxime Coste
171e787063
Update startup message to notify about h/l change
2018-02-24 23:16:39 +11:00
Maxime Coste
2a60af25dc
Allow l/h to cross line boundaries
...
l and h are now respectively "next character" and "previous character"
2018-02-24 23:16:39 +11:00
Maxime Coste
6a6e71dc0f
Highlight cursors differently when they lie on an end of line
...
When on an end of line, certain behaviours can be surprising, for
example delete will join the following line (which makes sense, and
is consistent, but hard to predict if we do not know the cursor is
on and end of line).
As Kakoune is moving more and more towards treating end of lines
as any other character, making it clear when the cursor lies on
them seems like a good way to reduce surprise.
2018-02-24 21:32:01 +11:00
Maxime Coste
a0de41d165
goto last change: do not try to avoid end of lines
...
Avoiding end of line is a behaviour we avoid (pun intended) more and more
in Kakoune source code, now that end of lines are regularly selected, it
makes no sense to just to next line when last modification lies on an EOL
(and it probably did not make much sense back when that code was written).
2018-02-24 21:09:09 +11:00
Maxime Coste
a25d6171d3
Fix crash in select_sentence when not selection to end
...
select_sentence could create a buffer iterator preceeding the
buffer begin, leading to a crash trying to read line -1.
2018-02-24 20:22:23 +11:00
Maxime Coste
efce8e0ce6
Revert "Do not save last command/pipe/regex in register when history is disabled"
...
This reverts commit 55621fb4cc
.
This should not be necessary as :exec/eval already save those registers
and reset them by default, and it breaks the ability to use those
registers during an eval/exec (as the commands behave differently)
2018-02-24 19:58:40 +11:00
Maxime Coste
4d11bb20c3
Always collapse jumps in exec/eval, remove -collapse-jumps switch
...
There does not seem to be any reasonable use cases of not collapsing
jumps when the input is not comming from the user. Always collapse
them.
It could make sense to move jump collapsing out of context_wrap as
in general any action not comming directly from the user should
collapse them, at the moment a comment or mapping will not collapse
jumps, which is unfortunate.
2018-02-24 19:02:15 +11:00
Maxime Coste
933ac4d3d5
Regex: Improve comments and constify some variables
...
Reword various comments to make some tricky parts of the regex
engine easier to understand.
2018-02-24 17:40:08 +11:00
Maxime Coste
af21d4ca1e
regex: track CompiledRegex::StartDesc in the Regex memory domain
2018-02-24 16:29:24 +11:00
Delapouite
e568231fe3
Display number of combined/saved/restored selections in status
2018-02-23 22:58:44 +01:00
Maxime Coste
e9c18ebff6
Merge remote-tracking branch 'lenormf/fix-makefile'
2018-02-23 08:10:11 +11:00
aver-d
da009b0ef5
Fix typos in C++ string literals
...
informations, dont, incrementaly, alignement
2018-02-22 20:28:01 +00:00
Frank LENORMAND
01c1b4fd69
src makefile: Fix the --static
flag passed to pkg-config
2018-02-22 15:56:14 +03:00
Maxime Coste
99d1fee44c
Merge remote-tracking branch 'Delapouite/trim'
2018-02-22 22:06:27 +11:00
Maxime Coste
13ac0e367d
NCursesUI: Rework menu placement to fix missing menu on small window
2018-02-22 22:04:04 +11:00
Maxime Coste
35d68d2f82
Fix crash when iterating through options on window creation
...
Window::on_option_changed calls hooks, which can do anything
including adding/removing options in the various option managers
Fixes #1863
2018-02-21 22:47:41 +11:00
Maxime Coste
69a0ad09b4
Rewrite OptionManager::flatten_options to use ranges
...
Avoid accumulating the flattened options into a vector, generate
a lazy range that will give the proper list.
2018-02-20 23:32:51 +11:00
Maxime Coste
6d111d4bd7
Re-introduce aliases in command name completion
...
Aliases are considered again in command name completion, but only
if they are more than 3 charactes long. This should prevent cluttering
with aliases while still letting long ones being completed.
2018-02-20 23:32:31 +11:00
Maxime Coste
6239357e99
ranges: Support temporary parameters passed to concatenated
2018-02-20 21:55:06 +11:00
Maxime Coste
fec34c3748
Json: Fix buffer overflow when reading json finishing with { or [
...
Fixes #1860
2018-02-20 07:42:10 +11:00
Maxime Coste
2c0eba9d95
user-modes: Fix incorrect use of keymap mode
...
The keymap mode was passed to on_next_key_with_autoinfo, which
means the mapping was applied directly by the InputHandler.
That led to the first key being interpretted as a mapping, then
all following keys being executed normally, as if typed in the
parent mode of the user mapping.
2018-02-19 21:03:29 +11:00
Maxime Coste
76f5fb937c
Fix bug in command parsing post refactoring
...
Fixes #1857
2018-02-19 08:29:04 +11:00
Maxime Coste
fc60e29870
Small code tweaks regarding user modes
2018-02-18 20:24:34 +11:00
Maxime Coste
f88195d2d9
Merge remote-tracking branch 'Delapouite/user-mode'
2018-02-18 20:20:35 +11:00
Maxime Coste
eb2e44e0eb
Makefile: use PKG_CONFIG to get static compilation flags as well
2018-02-18 15:43:28 +11:00
Maxime Coste
536fa29ed5
CommandManager: unescape % while parsing the string
2018-02-18 14:56:52 +11:00
Maxime Coste
dc30b0e6d6
Do not support general commands in filter mode
2018-02-18 14:54:21 +11:00
Maxime Coste
84d70f8aeb
normal mode: Fail if ':' is pressed with no CommandManager
2018-02-18 14:53:37 +11:00
Maxime Coste
5924694bda
ShellManager: init from a static list of env vars
...
No need to go through a static list and then copy them one by
one in a vector.
2018-02-18 14:52:29 +11:00
Maxime Coste
d9cddf41f2
BufferManager: Support missing ClientManager
2018-02-18 14:50:24 +11:00
Maxime Coste
10c6c59a26
Buffer: avoid expensive option flattening in on_registred with NoHooks
2018-02-18 14:48:24 +11:00
Maxime Coste
74fd602569
'*' uses escaping of meta characters instead of \Q and \E
...
Fixes #1825
2018-02-17 20:36:07 +11: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
Delapouite
fccfc76e89
Add trim_selections primitive
2018-02-13 14:35:10 +01:00
Delapouite
6b447a0ecb
Add declare-user-mode / enter-user-mode commands
2018-02-12 14:19:58 +01:00
Maxime Coste
f3c19ba7fa
Prevent whitespaces in command names
...
Fixes #1843
2018-02-11 20:35:21 +11:00
Maxime Coste
a822bcd6e0
Do not specify utf8 InvalidPolicy when we are using the default value
...
It was specified only in two call sites, and everywhere now only uses
the pass policy, which is the default.
2018-02-11 17:39:19 +11:00
Maxime Coste
66fe2d84da
Refuse modification of ReadOnly buffers and make Debug buffer readonly
...
The debug buffer is a bit special as lots of events might mutate it,
permitting it to be modified leads to some buggy behaviour:
For example, `pipe` uses a ForwardChangeTracker to track buffer
changes, but when applied on a debug buffer with the profile flag
on, each shell execution will trigger an additional modification
of the buffer while applying the changes, leading to an assertion
failing as changes might not be happening in a forward way anymore.
Trying to modify a debug buffer will now raise an error immediatly.
2018-02-11 13:06:19 +11:00
Maxime Coste
3584e00d19
Regex: Use a template argument instead of a regular one for "forward"
...
forward (which controls if we are compling for forward or backward
matching) is always statically known, and compilation will first
compile forward, then backward (if needed), so by having separate
compiled function we get rid of runtime branches.
2018-02-09 22:45:53 +11:00
Maxime Coste
aa9f7753e8
Regex: minor code cleanup
2018-02-09 22:19:56 +11:00
Maxime Coste
cb16e52179
FaceRegistry: pass face names as StringViews instead of const String&
2018-02-09 22:08:29 +11:00
Maxime Coste
e46a5697e5
Add a limit to the size of selection with which we will try to diff on pipe
...
Limit to 100K of data for now, as we diff at the byte level.
2018-02-09 21:47:18 +11:00
Maxime Coste
bbf62d1779
diff: try to improve code readability
2018-02-09 21:31:10 +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
e2c1d44a7f
Fix parsing of percent tokens with unicode separators
2018-02-06 20:29:08 +11:00
Maxime Coste
4a96926c4b
Handle errors while reloading buffer gracefully
...
Fixes #1831
2018-02-05 20:27:32 +11:00
Maxime Coste
f592768d3a
Remove the New
flag from a buffer after reloading it
...
If we reload a buffer, it means its underlying file exists, hence the
New flag does not make sense anymore. It could be that the file appeared
on the filesystem in the meantime.
2018-02-05 20:18:51 +11:00
Maxime Coste
05f57ace07
CommandManager: parse command lines as utf8 instead of ascii
...
Fixes #1829
2018-02-04 09:21:15 +11:00
Maxime Coste
52016d32bc
Makefile: Only check for pkg-config when on a system that uses it
...
This fixes compilation on OSX where pkg-config is not installed
by default.
2018-02-03 13:37:09 +11:00
Maxime Coste
90c16d2b0d
Profile the time it takes to source a file
...
`:source` command will now generate timings if profile is enabled
in the debug option, to help find which script can be slow to load.
This should help for #1823
2018-02-01 09:03:16 +11:00
Maxime Coste
e41b4ee65d
Change m
to search until the end of the buffer instead of end of line
...
Fixes #1774
# Please enter the commit message for your changes. Lines starting
2018-01-31 11:10:18 +11:00
Maxime Coste
81eb2ee428
Do not strip whitespaces with '*'
...
Stripping whitespaces there is a failed experiment as it breaks the
ability to use multi-selections consistently: Using '*' followed by some
`N` to add following matches, we end up with mismatched selections
due to whitespace stripping the original selection still contains
whitespaces where all the new ones do not. Once we get to this state,
most selection commands will give different results for the initial
selection and the other ones, breaking predictible multiselection use,
one of the cornerstones of Kakoune editing model.
2018-01-31 09:31:18 +11:00
Maxime Coste
c30a954dfc
ncurses: change handling of <c-z> suspend to improve terminal state
...
reset the mouse state so that the terminal can take back control
of the mouse while Kakoune is suspended, and does not emit focus
events anymore.
Fixes #1816
2018-01-30 10:46:34 +11:00
Maxime Coste
9c25e955df
Use '/' register as the default register for <a-k> and <a-K>
...
Fixes #1808
2018-01-26 14:15:18 +11:00
Maxime Coste
bf73cb0109
Reset normal mode before hiding the reload buffer info box
...
Reseting normal mode will enable normal mode, which will trigger
a check for buffer modification. We do not want that check to
happen as we are trying to close the info box. Doing that mode
reset first will prevent the check from happening (as the info
box is already displayed), and will correctly hide it afterwards.
Fixes #1809
2018-01-26 13:45:36 +11:00
aver-d
29a7cd3ab4
Insert complete: Remove path info with one buffer
...
This change is useful when using `set scope completers word=buffer`,
instead of the default word=all.
If candidates all come from the same buffer, then the path/filename
information is the same and therefore unnecessary. This change
prevents the same path from being repeated, and the buffer's
source code is less obscured.
More generally, there could be an option to disable the path
information entirely in all cases, but for now this change seems
a reasonable solution until any such option exists.
2018-01-25 17:49:02 +00:00
Maxime Coste
220be30f02
Support multiline selections in C/<a-C>
...
Fixes #1725
2018-01-24 10:33:22 +11:00
Maxime Coste
299e22ca7c
Do not block when waiting for next event if we have pending input
...
Handle next event should never block if we have already accumulated
input that we want to process. As we can accumulate new input in
lots of places (everytime we run a shell process for example, we
might end up reading input keys. That can be triggered during the
mode line generation which takes place during display of the window)
Fixes #1804
2018-01-21 12:00:40 +11:00
Maxime Coste
d22c989984
Rename InputModeChange hook to ModeChange
...
InputModeChange is a bit long to type and its pretty clear in Kakoune
that "Mode" means "Input mode", so use a shorter and as clear name.
2018-01-21 10:34:09 +11:00
Maxime Coste
07dfcd336d
Fallback to getpwuid in the unlikely case $HOME is underfined
...
Add a homedir() helper function, and document the $kak_config
env var.
2018-01-20 11:19:23 +11:00
Maxime Coste
e7cbf38af7
Introduce a $kak_config env var containing the Kakoune user config dir
...
Makes it easier for users who want to locate their kakrc file, and
does not require to go through shell expansion to get it as
"${XDG_CONFIG_DIR:-${HOME}/.config}/kak"
Fixes #1740
2018-01-19 10:05:08 +11:00
Maxime Coste
55621fb4cc
Do not save last command/pipe/regex in register when history is disabled
2018-01-19 09:48:57 +11:00
Maxime Coste
eeacb8b5a8
Use the _str and _sv string literals more often
2018-01-18 09:00:54 +11:00
Maxime Coste
b4f8497f8d
Slight code refactor in InputHandler::handle_key
2018-01-15 10:25:58 +11:00
Maxime Coste
e74b581b0a
Save/restore main selection from/to strings
...
Always consider that the first selection in the list is the main
one, save selections that way.
This approach was suggested by PR #1786 but the implementation here
is different, and is used more generally whenever we save selections
to strings.
This is also the prefered way to work only on the main selection:
save selections with Z, reduce to main with <space>, restore with z.
Closes #1786
Fixes #1750
2018-01-12 07:51:19 +11:00
Maxime Coste
2366af29e2
Slight refactor of jump collapsing code
2018-01-12 07:50:52 +11:00
Maxime Coste
827aab1386
Merge remote-tracking branch 'Delapouite/print_status'
2018-01-12 07:03:21 +11:00
Maxime Coste
af4cc11404
Merge remote-tracking branch 'lenormf/fix-makefile'
2018-01-12 07:02:40 +11:00
Delapouite
7ecc3d343f
Remove extraneous face when clearing status line
2018-01-11 15:26:42 +01:00
Frank LENORMAND
202c977b3d
src makefile: Abort compilation when pkg-config
is not in PATH
...
Fixes #1792
2018-01-11 10:41:19 +03:00
Maxime Coste
bf66302d29
Small code style tweak
2018-01-11 13:57:33 +11:00
Maxime Coste
996d8abef4
Write new buffers even when unmodified
...
Fixes #1794
2018-01-08 09:42:26 +11:00
Maxime Coste
49e028b847
Add information on InputModeChange hook in the startup message
2017-12-29 10:00:45 +11:00
Maxime Coste
6333ae207f
Correctly set the NotBeginOfSubject/NotEndOfSubject flags for regex matching
...
Fixes #1778
2017-12-29 09:55:53 +11:00
Maxime Coste
6851604546
Regex: Add a RegexExecFlags::NotEndOfSubject flag
2017-12-29 09:55:38 +11:00
Delapouite
74898120ed
Add session name filtering for KakBegin hook
2017-12-21 22:22:33 +01:00
Maxime Coste
9b83589b18
Completion: Use a heap to gather the best matches instead of sorting
...
Generalize the behaviour of `shell-candidates` to insert completion,
gather the best 100 matches by using a heap and poping max a hundred
times.
2017-12-21 12:55:29 +11:00
Maxime Coste
a38d6cc3f0
Highlighter: In general, highlight replaced ranges
...
Fixes #1251
2017-12-21 12:26:25 +11:00
Maxime Coste
0814bb2962
InputHandler: Preserve no-hooks on insert mode from single command normal mode
...
Fixes #1775
2017-12-21 10:30:45 +11:00
Maxime Coste
e0b28fa421
Introduce InputModeChange hook
...
InputModeChange <old mode>:<new mode> is intended to replace the various
<Mode>Begin/<Mode>End hooks.
Fixes #1772
2017-12-18 11:09:54 +11:00
Delapouite
b81c6b5840
Use existing window reference in view mode
2017-12-17 14:42:09 +01:00
Maxime Coste
d8dc7d7f39
Go back to getpwuid call to get user name from user id
...
Unfortunately, reading /etc/passwd is not enough.
2017-12-15 08:19:56 +11:00
Maxime Coste
cafecda230
Window: avoid positionning window on a negative column
...
Fixes #1741
2017-12-15 08:17:35 +11:00
Maxime Coste
4b06c09c68
Make edit
command work fine when running from an empty context
...
This way, the kind of context we get from a piped command allows
for opening a buffer and working with it directly.
2017-12-12 18:22:05 +11:00
Maxime Coste
ce2c0e54f4
Detect invalid coordinates in selection_from_string
...
Fixes #1751
2017-12-12 18:08:40 +11:00
Maxime Coste
0033491d69
InsertCompleter: Respected ignored_filename option in filename completer
2017-12-09 22:03:19 +11:00
Maxime Coste
a33d18e125
Go back to getpwuid call on OSX
...
Reading /etc/passwd on OSX does not give us the full list of users.
Fixes #1758
2017-12-09 12:13:02 +08:00
Maxime Coste
bedb98220c
Ranges: add unit test and fix corner case in split view
2017-12-07 01:58:19 +08:00
Maxime Coste
2f48bbf6ff
Tweak unescape template function to unescape the escape char as well
...
Test that more thouroughly in the unit tests.
2017-12-07 01:56:02 +08:00
Maxime Coste
99636c6230
Remove Vector returning split functions, use range adaptor
...
Do not allocate temporary vectors to store splitted data, use the
'split' range adaptor along with transform(unescape) to provide the
same feature with less allocations.
2017-12-06 17:18:44 +08:00
Maxime Coste
70e2122ae6
InsertCompleter: only accept words matching the target buffer word definition
...
The words we store in the WordDB are dependent on the extra_word_chars
options, which can be different for different buffers. When completing
words in a buffer based on the WordDB from another buffer, some candidates
might contains characters that are not considered word character for
the target buffer, ignore those words.
2017-12-06 14:15:36 +08:00
Maxime Coste
86fcc55e53
RankedMatch: Make punctuation ordered *before* alphanumeric characters
2017-12-06 13:58:34 +08:00
Maxime Coste
936b95ac34
Ensure that normal mode restores disabled hook status on disabled
...
Fixes #1744
2017-12-06 12:59:31 +08:00
Maxime Coste
274367116a
Replace uses of getpwuid which is incompatible with static linking
...
Introduce a get_user_name function which parses '/etc/passwd' to find
the username associated with a user id.
2017-12-04 15:19:57 +08:00
Maxime Coste
73a239d3be
Text-Objects: Use regex to select surroundings
...
Fixes #925
2017-12-03 17:15:24 +08:00
Maxime Coste
9a4b5de772
Regex: Introduce backward_regex_search helper function
2017-12-03 17:12:33 +08:00
Maxime Coste
b34bb6b794
Regex: make RegexIterator iterable and able to iter backwards
2017-12-02 14:02:41 +08:00
Maxime Coste
413f880e9e
Regex: Support forward and backward matching code in the same CompiledRegex
...
No need to have two separate regexes to handle forward and backward
matching, just passing RegexCompileFlags::Backward will add support
for backward matching to the regex. For backward only regex, pass
RegexCompileFlags::NoForward as well to disable generation of
forward matching code.
2017-12-01 19:57:02 +08:00
Maxime Coste
7bfb695c45
Regex: Do not allow private use codepoints literals
...
We use them to encode non-literals in lookarounds, so they can
trigger bugs.
Fixes #1737
2017-12-01 16:37:18 +08:00
Maxime Coste
8d892eeb62
Regex: use StartDesc to early out when not searching
...
Early out as well if we do not find any potential start position.
2017-12-01 15:03:03 +08:00
Maxime Coste
65b057f261
Regex: rename StartChars to StartDesc
...
It only contains chars for now, but its still more generally
describing where matches can start.
2017-12-01 14:46:18 +08:00
Maxime Coste
b91f43b031
Regex: optimize parsing a bit
2017-11-30 14:32:29 +08:00
Maxime Coste
c1f0efa3f4
Regex: smarter handling of start chars computation for character class
2017-11-30 14:19:41 +08:00
Maxime Coste
839da764e7
Regex: avoid unneeded allocations and moves by reusing MatchResults storage
2017-11-29 14:07:04 +08:00
Maxime Coste
380ff553b5
Wrap: try to rework and simplify the algorithms further
...
Fixes #1731
2017-11-28 19:04:21 +08:00
Maxime Coste
ae0911b533
Regex: Various small code tweaks
2017-11-28 01:03:54 +08:00
Maxime Coste
4598832ed5
Regex: optimize compilation by reserving data
2017-11-28 00:59:57 +08:00
Maxime Coste
a52da6fe34
Regex: Tweak is_ctype implementation style
2017-11-28 00:13:42 +08:00
Maxime Coste
d142db80f2
Fix compute_modified_ranges corner case that would crash on undo
...
Fixes #1506
Fixes #1215
2017-11-27 20:29:01 +08:00
Maxime Coste
8b40f57145
Regex: Replace generic 'Matchers' with specialized functionality
...
Introduce CharacterClass and CharacterType Regex Op, and optimize
their evaluation.
2017-11-25 18:14:15 +08:00
Maxime Coste
0d44cf9591
Regex: do not decode utf8 in accept calls as they always run on ascii
2017-11-25 18:13:27 +08:00
Maxime Coste
ec6ecd5772
Add an InsertCompletionSelect hook
...
InsertCompletionSelect will be called whenever the selected insert
completion changes. If the original text is selected back, the hook
parameter will be empty. If another candidate is selected, the hook
parameter will be its text content.
Fixes #1676
2017-11-25 13:57:47 +08:00
Maxime Coste
1ae96c977c
Small formating tweak
2017-11-25 13:46:55 +08:00
Maxime Coste
318e77b25e
Highlighters: Introduce unique highlighter support
...
Some highlighters, such as wrap or line numbers, are not intended
to be used multiple times on the same display. Add support for unique
ids that are used by highlighters to disable themselves if another
unique highlighter with the same id is supposed to override them.
The usual highlighter "precedence" takes, place, that it, that most
nested highlighter will the the one to run (window in priority to
buffer in priority to global).
2017-11-25 12:53:33 +08:00
Delapouite
66250a06eb
Rename KeyMapInfo → KeymapInfo
2017-11-24 10:34:56 +01:00
Maxime Coste
6084490a6e
Merge remote-tracking branch 'Delapouite/remaining-buffers'
2017-11-24 16:37:53 +08:00
Maxime Coste
5a0332ac87
Window: fix buffer_coord when a line buffer range is empty
...
Fixes #1711
2017-11-24 16:36:37 +08:00
Maxime Coste
c0cec3e7c1
Merge remote-tracking branch 'fsub/warnings'
2017-11-23 12:30:24 +08:00
fsub
66ca53466f
Remove unused lambda captures
...
This eliminates some warnings emitted by clang++.
2017-11-22 18:43:54 +01:00
Maxime Coste
179a1f6aa1
dynregex: slight code refactor, moving a helper function to lambda
2017-11-22 15:57:59 +08:00
Maxime Coste
77b367b3e0
Wrap: simplify logic a bit and fix case where too many lines got displayed
...
Fixes #1710
2017-11-21 13:01:02 +08:00
Delapouite
be94505e46
Add modified buffers count in error message of non-force quit
2017-11-20 19:25:47 +01:00
Maxime Coste
b57a53dfbf
Merge remote-tracking branch 'Delapouite/common_prefix'
2017-11-20 17:30:28 +08:00
Delapouite
62912c6586
Remove extraneous common_prefix in input_handler
...
Related to: 52525a156f
2017-11-20 10:21:23 +01:00
Delapouite
bf222a0628
Docs: add missing -i <suffix> command line flag
2017-11-19 11:43:08 +01:00
Kylie McClain
3e1a4df3fb
Makefile: Add ability to disable compressing manpage
...
Some distributions don't compress them.
2017-11-19 01:53:40 -05:00
Kylie McClain
ab390a02dc
Makefile: use PKG_CONFIG, not pkg-config
2017-11-17 23:11:06 -05:00
Maxime Coste
706c1672d5
Normal: add <a-S> to select first and last char of selection
...
Fixes #550
2017-11-13 17:36:04 +08:00
Maxime Coste
5f5188a89c
Merge remote-tracking branch 'Delapouite/jump-count'
2017-11-13 16:37:24 +08:00
Delapouite
a071e5b226
Add count support to jumps (<c-o> and <c-i>). Add jumps tests
2017-11-13 08:38:43 +01:00
Maxime Coste
615fe0368c
Options: rework conversion to string of prefixed lists
...
* use the list_separator variable instead of hard coding ':'
* fix trailing separator when converting empty prefixed list to string
* correctly escape the prefix in case it contains a separator
2017-11-13 11:45:28 +08:00
Maxime Coste
078f0b5c90
option_types.hh: fix unfulfilled dependencies of the header
2017-11-13 11:27:55 +08:00
Maxime Coste
ffb639bf96
Regex: add unit test for #1693
2017-11-13 01:12:05 +08:00
fsub
0dd8a9ba93
Fix #1693 : typo in RegexParser::character_class()
2017-11-12 17:35:03 +01:00
Maxime Coste
b298e01390
NCurses: use the general face merging function to handle default face
...
Merge attributes as well, and reuse an existing function instead of
reimplementing the same logic again.
Closes #1684
2017-11-12 23:02:40 +08:00
Maxime Coste
208f9641ef
Remote: when converting to client, suspend *after* connecting
...
Also, do not quit server while there is a connection being accepted
Fixes #1690
2017-11-12 22:28:13 +08:00
Maxime Coste
00e0630272
Move Array and ConstexprVector to a constexpr_utils.hh header
2017-11-12 13:01:18 +08:00
Maxime Coste
5cfccad39c
Regex: Use MemoryDomain::Regex for captures and MatchResults contents
2017-11-12 12:30:21 +08:00
Maxime Coste
c9b43d3634
Regex: directly store instruction pointer in Thread struct
2017-11-11 15:15:13 +08:00
Maxime Coste
b1115f7469
Wrap: fix scrolling to keep cursor visible logic
2017-11-10 21:17:05 +08:00
Maxime Coste
0942cd5084
InputHandler: handle of last insert keys happening in nested modes
...
Move recording of keys to the input handler itself instead of the
Insert mode so that eventual nested modes (potentially introduced
by <a-;> will get their keys recorded as well).
Fixes #1680
2017-11-08 14:39:52 +08:00
Maxime Coste
04993de687
Fix pipe logic in the case where the selections were accessed in the cmdline
...
When using an env var that needed the selections in the pipe command line,
say $kak_selection, the selection update code would run, modifying the
selections to adapt to eventual changes. But the rest of the pipe logic
was assuming the selections would not change, leading to bugs.
2017-11-08 00:02:49 +08:00
Maxime Coste
d45f16b6c8
Buffer: change clamp logic to preserve ordering
...
clamp could change ordering between a coordinate past the end.
Say in a buffer with 1 line of 2 char:
{0, 1} was clamped to {0, 1}
{1, 0} was clamped to {0, 0}
That was reversing their ordering, and might be the root cause
of the bug lurking in undo range computation.
2017-11-07 23:56:24 +08:00
Maxime Coste
80ce768994
Slight code cleanup in change update functions
2017-11-07 20:00:45 +08:00
Maxime Coste
2b6c84fc40
Add missing include in remote.cc
...
strerror is defined in <string.h>
2017-11-06 12:45:14 +08:00
Maxime Coste
0a081b9f31
Do not allow rename-session to introduce '/' in session names
2017-11-06 11:55:56 +08:00
Maxime Coste
52f4af6a83
Merge remote-tracking branch 'lenormf/fix-private-commands-in-register'
2017-11-05 12:22:28 +08:00
Maxime Coste
6bac767124
CommandManager: tweak naming
2017-11-04 16:02:21 +08:00
Maxime Coste
7f51e51fcb
Introduce matching_pairs option that controls the pairs used by m
2017-11-04 15:53:53 +08:00
Frank LENORMAND
8900690288
src: Don't save whitespace-led commands in the :
register
2017-11-04 09:18:26 +03:00
Maxime Coste
aa82a90c39
Remote: stricter validation of the session names
...
Creating a session will not accept any slashes in the session path,
connecting to an existing session will accept at most one slash to
allow for specifying the session of a different user.
Fixes #1635
2017-11-04 12:01:25 +08:00
Maxime Coste
aa9bcf08fc
Code style tweak
2017-11-04 12:01:23 +08:00
Maxime Coste
9b216e0e79
Merge remote-tracking branch 'lenormf/fix-rc-aliases'
2017-11-03 19:32:30 +08:00
Maxime Coste
400ef6d48c
Wrap: rework logic to avoid infinite loop with multiple wrap highlighters
...
The display is still going to be wrong, as wrapping is going to take place
multiple times, but Kakoune should not freeze anymore.
2017-11-03 19:30:31 +08:00
Maxime Coste
9d6420caae
Remove uneeded forward declaration
2017-11-03 19:24:58 +08:00
Frank LENORMAND
9127ed0d55
src rc: Rename exec
/eval
into execute-keys
/evaluate-commands
2017-11-03 11:09:45 +03:00
Maxime Coste
39e63cf518
Append '/' to highlighter group completion candidates
2017-11-02 18:05:18 +08:00
Maxime Coste
730e5725e9
Wrap: change indent atom to be a replaced empty buffer range
...
Avoid confusing the column highlighters.
2017-11-02 11:08:03 +08:00
Maxime Coste
fd95af0e3e
Add informations on -indent in wrap highlighter docstring
2017-11-02 11:04:15 +08:00
Maxime Coste
4fabba3d12
doc.kak: Render documentation internally instead of relying on man
...
doc.kak now behaves as a basic asciidoc renderer. Asciidoc is unfortunately
still a dependency to generate the manpage of the `kak` command.
2017-11-02 10:03:24 +08:00
Maxime Coste
53069bcb2d
Ensure line-specs and range-specs options are sorted internally
2017-11-02 09:51:15 +08:00
Maxime Coste
329f5fca0e
Fix trailing spaces in highlighters.cc
2017-11-02 01:28:28 +08:00
Maxime Coste
6f2088cbc4
Wrap: Add -indent switch support that wraps preserving line indent
2017-11-02 01:28:28 +08:00
Maxime Coste
ed65d86c72
Rename doc/manpages to doc/pages
...
That fact we use man for these is an implementation detail.
2017-11-01 19:05:37 +08:00
Maxime Coste
25dac6b24e
Document the regex impl switch in the startup message
2017-11-01 14:18:13 +08:00
Maxime Coste
51de90f366
Regex: Remove boost related code
2017-11-01 14:09:39 +08:00
Maxime Coste
c74becc6af
Regex: fix RegexCompileFlags not being an enum class
2017-11-01 14:05:15 +08:00
Maxime Coste
2d901dc76f
Regex: slight readability improvement and workaround a potential gcc bug
2017-11-01 14:05:15 +08:00
Maxime Coste
f07375fb27
Regex: remove dead code
2017-11-01 14:05:15 +08:00
Maxime Coste
2c2073b417
Regex: Tweak struct layouts of ParsedRegex data
2017-11-01 14:05:15 +08:00
Maxime Coste
bbd7e604dc
Regex: Remove "Ast" from names in the ParsedRegex
...
It does not add much value, and makes names longer.
2017-11-01 14:05:15 +08:00
Maxime Coste
18a02ccacd
Regex: Optimize parsing and compilation
...
AstNodes are now POD, stored in a single vector, accessed through
their index. The children list is implicit, with nodes storing only
the node index at which their child graph ends.
That makes reverse iteration slower, but that is only used for reverse
matching regex, which are uncommon. In the general case compilation
is now faster.
2017-11-01 14:05:15 +08:00
Maxime Coste
aea2de885d
Regex: minor cleanup of the regex parsing code
2017-11-01 14:05:15 +08:00
Maxime Coste
6e0275e550
Regex: small code cleanup in the Save compilation code
2017-11-01 14:05:15 +08:00
Maxime Coste
9e15207d2a
Regex: put the other char boolean inside the general start char map
2017-11-01 14:05:15 +08:00
Maxime Coste
7c3bc48627
Fix ConstexprVector::resize
2017-11-01 14:05:15 +08:00
Maxime Coste
60e32d73ff
Regex: Fix handling of all unicode codepoint as start chars
2017-11-01 14:05:15 +08:00
Maxime Coste
df2bf9601c
Regex: fix wrong fallthough in dump_regex
2017-11-01 14:05:15 +08:00
Maxime Coste
e9e9a08e7b
Regex: refactor handling of Saves slightly, do not create them until really needed
2017-11-01 14:05:15 +08:00
Maxime Coste
d9b4076e3c
Regex: Go back to instruction based search of next start
...
The previous method, which was a bit faster in the general use case,
can hit some cases where we get quadratic behaviour and very slow
matching.
By using an instruction, we can guarantee our complexity of O(N*M)
as we will never have more than N threads (N being the instruction
count) and we run the threads once per codepoint in the subject
string.
That slows down the general case slightly, but ensure we dont have
pathological cases.
This new version is much faster than the previous instruction based
search because it does not use a plain `.*` searcher, but a specific,
smarter instruction specialized for finding the next start if we are
in the correct conditions.
2017-11-01 14:05:15 +08:00
Maxime Coste
3f627058b0
Regex: add support for \0, \cX, \xXX and \uXXXX escapes
2017-11-01 14:05:15 +08:00
Maxime Coste
c423b47109
Regex: compute if codepoints outside of the start chars map can start
2017-11-01 14:05:15 +08:00
Maxime Coste
2c6c0be0c1
Regex: abort compilation as soon as we hit the instruction count limit
2017-11-01 14:05:15 +08:00
Maxime Coste
d44e160aa7
Regex: add a unit test for why lookaheads dont count for start chars anymore
2017-11-01 14:05:15 +08:00
Maxime Coste
87eec79d07
Regex: comment the mutables in CompiledRegex::Instruction and fix their init
2017-11-01 14:05:14 +08:00
Maxime Coste
8b2297f5ca
Regex: Introduce a Regex memory domain to track usage separately
2017-11-01 14:05:14 +08:00
Maxime Coste
9ec175f2f8
Regex: use binary search to for character class ranges check
2017-11-01 14:05:14 +08:00
Maxime Coste
6e65589a34
Regex: compute start chars from matchers, do not compute it from lookarounds
...
Computing potential start characters from lookarounds is more complex
than expected, and not worth the complexity.
2017-11-01 14:05:14 +08:00
Maxime Coste
621b0d3ab8
Regex: remove the need to a processed inst vector
...
Identify each step with a counter, and check if the instruction
was already processed this step. This makes the matching faster,
by removing the need to maintain a vector of instructions executed
this step.
2017-11-01 14:05:14 +08:00
Maxime Coste
cfc52d7e6a
Regex: use intrusive linked list for the free saves instead of a Vector
2017-11-01 14:05:14 +08:00
Maxime Coste
df16fea82d
Regex: rename "flags" with the more common "modifiers"
2017-11-01 14:05:14 +08:00
Maxime Coste
52d443f764
Regex: Correctly handle ignore case mode for start chars computation
2017-11-01 14:05:14 +08:00
Maxime Coste
b8495f0953
Regex: Rework parsing, treat lookarounds as assertions, and flags separately
2017-11-01 14:05:14 +08:00
Maxime Coste
b0233262b8
Regex: Limit programs to std::numeric_limits<uint16_t>::max() instructions
2017-11-01 14:05:14 +08:00
Maxime Coste
8c8dcb3a84
Regex: Fix reverse searching behaviour, again
2017-11-01 14:05:14 +08:00
Maxime Coste
9753bcd0ad
Regex: limit explicit quantifiers value (too 1000 for now)
...
Fixes #1628
2017-11-01 14:05:14 +08:00
Maxime Coste
2b97e4e124
Regex: Fix handling of ^ and $ in backward matching mode
2017-11-01 14:05:14 +08:00
Maxime Coste
3c999aba37
Regex: Only reset processed and scheduled flags on relevant instructions
...
On big regex, reseting all those flags on all instructions for each
character can become the dominant operation. Track that actual
instructions index processed (the scheduled are already tracked in
the next_threads vector), and only reset these.
2017-11-01 14:05:14 +08:00
Maxime Coste
5bf4be645a
Regex: Fix support for ignore case in lookarounds
2017-11-01 14:05:14 +08:00
Maxime Coste
80f6caee81
Regex: move try/catch blocks inside boost specific code
2017-11-01 14:05:14 +08:00
Maxime Coste
dd9e43e6f9
Regex: small code cleanup
2017-11-01 14:05:14 +08:00
Maxime Coste
23b3a221eb
Regex: support more than two children in alternations
...
Avoid deep nested alternations, parse them flattened.
2017-11-01 14:05:14 +08:00
Maxime Coste
fb5243f710
Regex: print instruction index in dump_regex
2017-11-01 14:05:14 +08:00
Maxime Coste
c8966ca701
Regex: Assert that the regex direction matches the vm direction
2017-11-01 14:05:14 +08:00
Maxime Coste
74ed102cab
Regex: Tweak definition of character class and control escape tables
2017-11-01 14:05:14 +08:00
Maxime Coste
df73b71dfc
Regex: fix lookarounds handling when computing starting chars
2017-11-01 14:05:14 +08:00
Maxime Coste
1c95074657
Make use of custom regex backward searching support for reverse search
2017-11-01 14:05:14 +08:00
Maxime Coste
785cd34b4b
Regex: Make boost checking disableable at compile time
2017-11-01 14:05:14 +08:00
Maxime Coste
065bbc8f59
Regex: switch to custom impl, use boost for checking
2017-11-01 14:05:14 +08:00
Maxime Coste
9305fa1369
Regex: Fix lookaround use in moon.kak
...
(?=[A-Z]\w*) is strictly the same as (?=[A-Z]) as \w* will always
at least match an empty string.
2017-11-01 14:05:14 +08:00
Maxime Coste
cca730193c
Regex: Support any char and character classes in lookarounds
...
Lookarounds still need to be fixed size, but accept character classes
as well as plain literals.
2017-11-01 14:05:14 +08:00
Maxime Coste
b8cb65160a
Regex: use std::conditional instead of custom template class to choose Utf8It
2017-11-01 14:05:14 +08:00
Maxime Coste
db06acdfab
Regex: Fix computation of potential starts for lookaheads
2017-11-01 14:05:14 +08:00
Maxime Coste
34b1f1ccb6
Regex: detect when all characters can start and avoid allocating
2017-11-01 14:05:14 +08:00
Maxime Coste
ea85f79384
Regex: add elided braces to fix compilation on older gcc
2017-11-01 14:05:14 +08:00
Maxime Coste
bf3b50a543
Regex: Fix wrong size of character_class_escapes array
2017-11-01 14:05:14 +08:00
Maxime Coste
08ea68dc1f
Regex: Fix handling of match_prev_avail for boost regex
...
We were passing around iterators that were not allowed to
go before the begin iterator.
2017-11-01 14:05:14 +08:00
Maxime Coste
9ec376135b
Regex: Introduce RegexExecFlags::PrevAvailable
...
Rework assertion code as well.
2017-11-01 14:05:14 +08:00
Maxime Coste
73e177ec59
Regex: Do not use sized deallocation to support more compilers
2017-11-01 14:05:14 +08:00
Maxime Coste
30dacdade2
Regex: deallocate Saves memory on ThreadedRegexVM destruction
2017-11-01 14:05:14 +08:00
Maxime Coste
578640c8a4
Regex: Fix handling of control escapes inside character classes
2017-11-01 14:05:14 +08:00
Maxime Coste
f3736a4b48
Regex: tag instructions as scheduled as well instead of searching
...
And a few more code cleanup in the ThreadedRegexVM
2017-11-01 14:05:14 +08:00
Maxime Coste
6bc5823745
Regex: refactor ThreadedRegexVM::exec_from code
2017-11-01 14:05:14 +08:00
Maxime Coste
4ff655cc09
Regex: store the processed flag directly in CompiledRegex instructions
2017-11-01 14:05:14 +08:00
Maxime Coste
732b8bc2a4
Regex: abandon bytecode and just use a simple list of instructions
...
Makes the code simpler.
2017-11-01 14:05:14 +08:00
Maxime Coste
6434bca325
Regex: Add some comments, remove supurious semicolons
2017-11-01 14:05:14 +08:00
Maxime Coste
911a893225
Regex: fix get_base(std::reverse_iterator<...>) returning a ref to temporary
2017-11-01 14:05:14 +08:00
Maxime Coste
11abd544c6
Regex: avoid infinite loops
2017-11-01 14:05:14 +08:00
Maxime Coste
c47cdc06a7
Regex: Add support for backward matching
...
Regex can be compiled for backward matching instead of forward matching
and the ThreadedRegexVM is able to iterate in reverse on the subject
string to find the last match instead of the first.
2017-11-01 14:05:14 +08:00
Maxime Coste
071b897e00
Regex: Remove static RegexCompiler::compile
2017-11-01 14:05:14 +08:00
Maxime Coste
52ee62172a
Regex: remove use of buffer_utils.hh from regex_impl.cc
2017-11-01 14:05:14 +08:00
Maxime Coste
c375268c2d
Regex: Use memcpy to write/read offsets from bytecode
...
reinterpret_cast was undefined behaviour as we do not guarantee
that offsets are going to be stored properly aligned.
2017-11-01 14:05:14 +08:00
Maxime Coste
b53227d62c
Regex: slight cleanup of the unit tests
2017-11-01 14:05:14 +08:00
Maxime Coste
337e58d4f9
Regex: Cleanup character class parsing a bit
2017-11-01 14:05:14 +08:00
Maxime Coste
236751cb84
Regex: Make ThreadedRegexVM a proper class, define a proper interface
2017-11-01 14:05:14 +08:00
Maxime Coste
3b69dda04e
Regex: Find potential start position using a map of valid start chars
...
With this optimization we get close to performance parity with boost
regex on the common use cases in Kakoune.
2017-11-01 14:05:14 +08:00
Maxime Coste
741772aef9
Regex: Optimize single char character classes as literals
2017-11-01 14:05:14 +08:00
Maxime Coste
fabeab1ee1
Regex: reorder lookaround ops, group by direction
2017-11-01 14:05:14 +08:00
Maxime Coste
854144c535
Regex: Fix handling of Save instruction in ThreadedRegexVM
...
When not saving, we were not fully reading the instruction stream,
leading to an out of sync instruction pointer.
2017-11-01 14:05:14 +08:00
Maxime Coste
f1b4931824
Regex: Fix handling of non capturing groups (?:...)
...
We were wrongly keeping the `:` as a literal content of the group
2017-11-01 14:05:14 +08:00
Maxime Coste
5f6e71c4dc
Regex: More code tweaks and cleanups in ThreadedRegexVM
2017-11-01 14:05:14 +08:00
Maxime Coste
5f54e0de0e
Regex: Code cleanup and refactor for Saves handling
2017-11-01 14:05:14 +08:00
Maxime Coste
dbb175841b
Regex: do not write the search prefix inside the program bytecode
...
Its faster to have specialized code in the VM directly
2017-11-01 14:05:14 +08:00
Maxime Coste
cf5055f68b
Regex: small code tweak
2017-11-01 14:05:14 +08:00
Maxime Coste
e0fac20f6c
Regex: Use a custom allocated buffer for Saves instead of a Vector
2017-11-01 14:05:14 +08:00
Maxime Coste
1399563e40
Regex: make m_current_threads and m_next_threads local variable of exec
2017-11-01 14:05:14 +08:00
Maxime Coste
54da8098ae
Regex: Add a NoSaves RegexExecFlags to disable saving positions
2017-11-01 14:05:14 +08:00
Maxime Coste
119bc38254
Regex: small refactor of ThreadedRegexVM::clone_saves
2017-11-01 14:05:14 +08:00
Maxime Coste
9fbafba4cb
Regex: Refactor thread handling in ThreadedRegexVM
2017-11-01 14:05:14 +08:00
Maxime Coste
589cde67f0
Regex: store saves in a copy on write structure
2017-11-01 14:05:14 +08:00
Maxime Coste
11b9c996ea
Regex: small code style tweak
2017-11-01 14:05:14 +08:00
Maxime Coste
51ad8b4c85
Regex: fix handling of negative escaped character classes
2017-11-01 14:05:14 +08:00
Maxime Coste
adcd02b7d2
Regex: Replace boost regex_iterator impl with our own
...
Ensure we check the results from our own regex impl in all uses of
regexs in Kakoune.
2017-11-01 14:05:14 +08:00
Maxime Coste
f007794d9c
Regex: introduce RegexExecFlags to control various behaviours
2017-11-01 14:05:14 +08:00
Maxime Coste
73b14b11be
Regex: small code tweak in ThreadedRegexVM
2017-11-01 14:05:14 +08:00
Maxime Coste
630d078b6d
Regex: Fix use of not-yet-constructed CompiledRegex in TestVM impl
2017-11-01 14:05:14 +08:00
Maxime Coste
5b0c2cbdc2
Regex: Ensure we dont have a thread explosion in ThreadedRegexVM
...
Always remove threads with lower priority that end up on the same
instruction as a higher priority thread (as we know they will behave
the same from now on)
2017-11-01 14:05:14 +08:00
Maxime Coste
b4f923b7fc
Regex: min/max quantifiers can be non greedy as well
2017-11-01 14:05:14 +08:00
Maxime Coste
f02b2645da
Regex: validate that our custom impl gets the same results as boost regex
...
In addition to running boost regex, run our custom regex and compare
the results to ensure the two regex engine agree.
2017-11-01 14:05:14 +08:00
Maxime Coste
76dcfd5c52
Regex: support escaping characters in character classes
2017-11-01 14:05:14 +08:00
Maxime Coste
3d2262bebf
Regex: add support for case insensitive matching, controlled by (?i)
2017-11-01 14:05:14 +08:00
Maxime Coste
7673781751
Regex: use \A \z for subject start/end
...
This is the most common syntax in various regex variants.
2017-11-01 14:05:14 +08:00
Maxime Coste
0bdfdac5c5
Regex: Implement lookarounds for fixed literal strings
...
We do not support anything else than a plain literal string for
lookarounds.
2017-11-01 14:05:14 +08:00
Maxime Coste
e96cd29f0e
Regex: Support non greedy quantifiers
2017-11-01 14:05:14 +08:00
Maxime Coste
e4004a7b7f
Regex: Add support for \h and \H "horizontal blank" character classes
2017-11-01 14:05:14 +08:00
Maxime Coste
4ac0d35d1e
Regex: Add support for \K
that reset the start capture
2017-11-01 14:05:14 +08:00
Maxime Coste
2f450e0080
Regex: Add support for \Q...\E quoted parts
2017-11-01 14:05:14 +08:00