| Age | Commit message (Collapse) | Author | Files | Lines |
|
That is something like :sam +5 or :sam 10 will move to the start
of the selected line instead of selecting the whole line.
TODO: due to the current implementation it will also affect
:sam x/pattern/-10+10
|
|
Because duplicated cursors are no longer allowed we have to
remove the old cursors before, not after executing the sam
command. Otherwise commands like g/foo/ which re-create the
same selection fail.
|
|
|
|
|
|
This should fix -0+,+0-
|
|
Only create a selection (and switch to visual mode) if at least one
print command was given a non-empty range. Also reject invalid ranges.
This allows cursor movements with thinks like #10
|
|
This fixes x/^.*$/i/FOO
|
|
This fixes y/\n/i/FOO
|
|
In a command like ,x/pattern the comma should default to the whole file.
|
|
|
|
|
|
|
|
For those not familiar with sam(1) more information can be found at
http://sam.cat-v.org/
For now sam commands can be entered from the vis prompt via :sam <cmd>
A command behaves differently depending on the mode in which it is issued:
- in visual mode it behaves as if an implicit extract x command
matching the current selection(s) would be preceding it. That is
the command is executed once for each selection.
- in normal mode:
* if an address for the command was provided it is evaluated starting
from the current cursor position(s) i.e. dot is set to the current
cursor position.
* if no address was supplied to the command then:
+ if multiple cursors exist, the command is executed once for every
cursor with dot set to the current line of the cursor
+ otherwise if there is only 1 cursor then the command is executed
with dot set to the whole file
The command syntax was slightly tweaked to accpet more terse commands.
- When specifiying text or regular expressions the trailing delimiter can
be elided if the meaning is unambigious.
- If only an address is provided the print command will be executed.
- The print command creates a selection matching its range.
- In text entry \t inserts a literal tab character (sam only recognizes \n).
Hence the sam command ,x/pattern/ can be abbreviated to x/pattern
If a command is successful vis switches to normal mode (and hence removes
any selections), otherwise the editor is kept in visual mode. The print
command "fails" by definition.
|
|
|
|
Do not crash if for some reason view->{start,end} have outdated values.
|
|
|
|
|
|
indicating whether cursor could be removed
|
|
|
|
|
|
In visual mode + and - will rotate the selection count times to the
right or left respectively. If there exists a line containing multiple
selections then the rotation happens within each line. Otherwise if each
line contains at most one selection the rotation is performed among all
existing selections.
|
|
|
|
|
|
We place the end mark inside the selection as opposted to on the character
immediately following it. This is better when selections are touching each
other. Previously for two seletions [a][b] the end mark for selection
a would be at the same location as the start mark of selection b. Thus
when for example the content of selection b is deleted it would also
destroy selection a, because the end mark would no longer be valid.
|
|
There exist two typical ways to use an array:
1) to hold pointers to externally allocated memory regions
Use array_init(...) for initialization, an element has the
size of a pointer. Use the functions suffixed with `_ptr'
to manage your pointers. The cleanup function array_release_full
must only be used with this type of array.
2) to hold arbitrary sized objects
Use array_init_sized(...) to specify the size of a single
element. Use the regular (i.e. without the `_ptr' suffix)
functions to manage your objects. array_get will return a
pointer to the object stored within the array.
|
|
|
|
We have binary packages for Arch Linux, at least!
|
|
|
|
|
|
|
|
Fail if there is already a cursor located at the requested position.
|
|
|
|
Create count new cursors on the lines above/below.
|
|
|
|
on the line above/below the first/last existing cursor.
|
|
|
|
That is when multiple cursors are on the same line, the first
cursor on every line is aligned, then the second one and so on.
|
|
The number of columns i.e. maximal number of cursors located on the
same line can be obtained by view_cursors_column_count.
Column addressing is zero based, valid indexes are [0, max-1].
Assuming there is a cursor on every letter:
a
b c
d e f
g h
i
max column would be 3, and the following would iterate over the
cursors forming the second column [c, e, h]:
for (Cursor *c = view_cursors_column(view, 1); c; c = view_cursors_column_next(c, 1))
...
|
|
This is currently only enforced upon creation i.e. we assume
that after creation a cursor can not change its relative ordering
with respect to its neighbors.
The existing code assumes that when iterating through cursors with:
for (Cursor *c = view_cursors(view); c; c = view_cursors_next(c))
...
new cursors created with view_cursors_new do not show up.
This assumption is preserved under the following conditions:
* it only holds for the most recent view_cursors call
As a consequence when doing nested iterations new cursors
will be yielded once the inner view_cursors call was performed.
* view_cursors_primary_get is not called
|
|
|
|
fixes #214
|
|
|
|
|
|
|
|
|
|
This prevents unecessary rebuilds when doing consecutive make
standalone builds.
|
|
Remove more stuff when switching between make local and make standalone.
|
|
|
|
|
|
Signed-off-by: Christian Hesse <mail@eworm.de>
|