| Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This unifies cursors and selections. The cursor are now represendted
as singleton selections.
|
|
|
|
|
|
Decouple register content from cursors. Previously each cursor had
exactly one corresponding register. Now each register can save a
list of values whose lifetime is not tied to the cursor.
If multiple cursors exist and a put with a register holding only
a single value is performed, then this value is inserted at every
cursor location. If there are fewer values available than cursors,
then only the matching ones will be used. If a register holding
multiple values is inserted in a single cursor context, only the
first value will be used. Another option would be to join all
existing values. The details of this behavior might be changed
in the future.
<C-r> in insert mode has not yet been adapted and register handling
in general needs to be cleaned up further.
Fix #527
|
|
Use something like dos2unix(1) and unix2dos(1), if you
need to edit such files.
|
|
|
|
|
|
This makes sure that a successive view_update call returns
true and as a result the status bar will be correctly redrawn.
|
|
Use pull instead of push based model for display code. Previously view.c
was calling into the ui frontend code, with the new scheme this switches
around: the necessary data is fetched by the ui as necessary.
The UI independent display code is moved out of view.c/ui-curses.c into
vis.c. The cell styles are now directly embedded into the Cell struct.
New UI styles are introduced for:
- status bar (focused / non-focused)
- info message
- window separator
- EOF symbol
You will have to update your color themes.
The terminal output code is further abstracted into a generic ui-terminal.c
part which keeps track of the whole in-memory cell matrix and #includes
ui-terminal-curses.c for the actual terminal output. This architecture
currently assumes that there are no overlapping windows. It will also
allow non-curses based terminal user interfaces.
|
|
Before cebb24b36ac45cc7c6912481cacd29ef9d5c68b9 a mark
at the start of the file was treated specially to always
return position zero.
Since this was no longer the case the following would
insert text before the visible area:
<PageDown><PageUp><PageUp>ifoo
|
|
This should fix selection changes after shift operators
in visual mode. The problem was that the NOP motion which
is executed when switching back into visual-line mode
destroys the selection if the cursor is not already placed
on a selection boundary.
Fix #501
|
|
In a file with windows style \r\n line endings scrolling
up would wrap around to the end of the file.
|
|
They will still not be displayed correctly, but at least they
should no longer cause memory errors.
|
|
This should fix display issues when entering the first newline of a file.
|
|
|
|
Previously this was done implicitly through the primary cursor
which was always adjusted when a new cursor is being created.
However, this is no longer the case and we do not want to iterate
through all cursors when creating a new one.
In the longterm we might want to store cursors in a contiguous
memory location (i.e. an array) instead of chaising pointers
all over the place.
|
|
We currently have the invariant that the primary cursor is always
placed within the visisble viewport.
Previously view_cursors_new would automatically make the new cursor
primary. This in turn causes the viewport to be adjusted triggering
lots of unnecessary redraws. As a result commands creating many new
selections might become unbearably slow.
Instead the caller has to explicitly make the new cursor primary.
|
|
Can be NULL if no cursor is associated with the given selection (this is
currently never the case).
Avoids a loop through all cursors when clearing selections.
|
|
<Enter> at the end of the file now inserts two newlines, unless there is
already one in place. This ensures that in 'normal' operation the file
is always new line terminated (as mandated by POSIX). It also means that
there is no problem displaying the right amount of ~ symbols at the end
of the file.
Unlike in vim the cell beyond the end of the file remains adressable
even in normal mode. This means something like the following (starting
from an empty file) might be a little confusing:
o<Escape><Left>dd
Because the starting position is beyond the last newline of the file,
nothing will be deleted.
For now we prefer to avoid the additional complexity, and difference
in behavior between normal and insert mode, needed to fix this slight
inconsistency.
Fix #294
|
|
|
|
Previously repeatedly pressing <Ctrl-j> at the start of the file
would keep creating cursors.
|
|
A cursor does not necessarily have to be at a selection boundary
(e.g. in visual line mode) but it has to be within the selection.
|
|
At least one cursor (referred to as primary or main cursor) has always
to exist. In the sam command language implementation we might want to
dispose a cursor even if it is the primary one before later commands
will create different ones (e.g. `:x/pattern/ { i/>>>/ a/<<</ }`).
This commit introduces view_cursors_dispose_force. If called on
the last remaining cursor, its selection is cleared and it is marked for
destruction as soon as a new cursor is created. view_cursor_disposed
returns the cursor marked for deletion (if any) and clears the descruction
flag.
|
|
The idea might be good, but it was almost unused.
|
|
Reject invalid cursor positions.
|
|
Make sure that the view_cursors_scroll_to function does not enter
an infinite loop.
|
|
While the replacement symbols are still not run-time configurable,
the new defaults should hopefully please more people.
Close #401
|
|
Make cursor placement after scrolling (half) pages up/down less arbitrary.
Close #390, fix #391
|
|
Previously the cursor would be placed in the middle of
the screen thus causing a distracting jump. Instead try
to scroll the view port by only 1 line when the cursor
is moved out of the visible area.
The current implementation might be quite a bit slower
than before, use page-wise scrolling to skip large
regions.
At some point we should optimize motions like 1000j.
Close #301
|
|
If a cursor is not currently visible it has no associated screen line.
Fallback to the corresponding logical line based variant. For example
`gj` is interpreted as `j`.
Fixes #354
|
|
This is a not yet successful attempt to reduce terminal flickering
when resizing windows as is for example the case when entering
command mode.
UI related debug output can be enabled with:
$ make CFLAGS=-DDEBUG_UI=1
$ ./vis > log
|