| Age | Commit message (Collapse) | Author | Files | Lines |
|
The following vi commands have been dropped:
- saveas
- xit
- !
The following commands are only recognized in their short form:
- e (edit)
- q (quit)
- s (substitute)
- w (write)
- r (read)
|
|
|
|
|
|
|
|
Eventually this should be rewritten as an internal command.
|
|
|
|
The following should now work:
:sam x/^static/ .,+/^\}/ { i/<</ a/>>/ }
|
|
These commands can be followed by an address which changes the
range to which the sub command applies. The looping construct
should then continue at the position of the last change within
the original range.
A previously problemeatic example:
:sam x/^static/ .,+/^\}/ c/replaced
|
|
|
|
It replaces current range with the file content. However in the common
case the range is actually defaults to the whole file which is probably
not what is expected.
|
|
|
|
|
|
|
|
|
|
|
|
Add infrastructure to handle commands which take file names,
shell commands or general white space delimited parameters
as arguments.
|
|
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.
|
|
|