| Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
There are a couple times when we want to set a style without an
active window. In those cases we just want to use base UI_STYLE_*s
and (Win *) is not needed.
This fixes a crash when trying to do a vis:info() from lua during
an initial file open event.
Note that this code is due for a serious refactor, ui styles
should be stored in Ui and window specific styles should be stored
in Win. Then we won't need any of this difficult to follow
indexing into the styles array based on window id and we will
never have to realloc when a new window opens. Just another thing
to add to my list.
|
|
These are not seperate things and keeping them this way makes
gives this convoluted mess where both Wins and UiWins must have
linked lists to the other Wins and UiWins in the program despite
the fact that neither of them can exist in isolation.
This, like my previous cleanup commits, is part of a larger goal
of properly isolating the various subsystems in vis. Doing so is
required if we ever want to be able to have a vis-server and a
vis-client.
|
|
There is no reason why this isn't just a char *.
|
|
No need for this to be stored in every View since its just a never
modified cell with a space.
Also delete the cell_unused global since all it does is provide a
0 initialized Cell.
|
|
Same as previous commit each window only has a single View. No
need for it to be stored elsewhere in memory.
|
|
|
|
|
|
|
|
|
|
This removes the function pointer interface which was adding
needless complexity and making it difficult to add new events. Now
if new events are only meant for lua they only need to be added to
the lua interface. This will also have a minor reduction in
runtime memory usage and produce a smaller binary.
The only runtime difference is that QUIT happens after all windows
have been closed and their files freed.
|
|
The old style handling had a lot edge cases where one of the
colours or the attribute wouldn't get applied correctly. This
commit adds a new style_set() method to the Ui which should be
called instead of manually touching a cell's style. This also
means that the Cell struct can be made opaque since all the
handling is now done inside the ui-terminal files.
With this it is now viable to combine the light and dark 16 colour
themes into a single base-16 theme. This theme works very well
with the Linux virtual console and will now be the default theme
regardless of if the terminal supports 256 colours or not. This
should address the common complaints about vis not respecting the
users default terminal colours.
fixes #1151: Theming is sometimes partially applied or ignored
see #1103: terminal no longer has transparency/opacity
see #1040: Transparent background and setting options by default
|
|
The view_style function is used to apply styles to ranges of text in
a view. It approaches the starting position where the style should be
applied by iterating the columns in the appropriate line using
this while loop:
while (pos < start && col < width)
pos += line->cells[col++].len;
The while loop will stop at the last character before the range where
the style should be applied.
This works fine until we encounter "empty" cells between the last
cell containing an actual character and the first cell to be styled.
This can happen if the last character before the range to style is
'\t' which gets expanded with empty cells by vis according to the
tabwidth option. Those empty cells get erroneously styled as well.
This is fixed by skipping all empty cells encountered before the
range to style.
fixes #1147: `win:style` styles more terminal cells than expected
|
|
aka:
"check for EOF before unsetting row, col & line cache in view_coord_get"
"fix bug where visual-line selections after view were considered visible"
These commits have created more bugs then they fix. Reverting them
reintroduces #1074: Slave selection strangled by view cliff.
Fixes #1143: Disappearing selection
|
|
|
|
The first point of this commit is to allow all options to be read from
lua. This has a number of uses for plugin writers. They are grouped into
a couple of tables depending on what they control:
`vis.options`: table with global configuration
`win.options`: table with window specific configuration
The second point is to allow you to set all these options as if they
were simply lua variables. Technically this is already possible by
using `vis:command("set ...")` but personally I think this interface
is cleaner. Note that this already possible for some things like the
current mode (eg. vis.mode = vis.modes.VISUAL). Examples:
`vis.options.ai = true`
`win.options.brk = " !?."`
`win.options = { showeof = true, showtabs = true }
There are a number of related issues and pull requests:
closes #803: Lua API: let plugins read the values of options
closes #812: Window layout property
supersedes/closes #717: Add ability to access tabwidth from Lua
supersedes/closes #1066: expose UI layout and allow it to be set from lua API
|
|
this is contolled by the wrapcolumn/wc and breakat/brk options
related #142: Word wrap and line breaks
related #932: Vis for Prose?
related #1092: Disabling line wrapping
|
|
|
|
This commit fixes c22b2c2, which introduced a bug when the EOF was
in view.
|
|
prior to this patch, if you had a visual-line selection after the view,
and try to move it(& all other selections) up into the buffer, the
selection would appear prematurely.
https://github.com/martanne/vis/issues/1074
|
|
|
|
|
|
The for loop in selection_free won't run because the next element
will always be NULL, because we are freeing from the end.
Close #852
|
|
|
|
Previously it would do nothing if the cursor was already on the last
display line.
Fix #697
|
|
|
|
The `cell.len` attribute refers to the number of bytes of the underlying
text which are represented by this cell. The actual NUL terminated data
being displayed can have a completely unrelated length.
For example a NUL byte has a `cell.len` of 1, but is displayed as
`cell.data = "^@"`.
Because we currently have a fixed cell capacity of 16 bytes (including
the terminating NUL byte) long sequences of combining characters won't
be displayed correctly.
See also #679
|
|
When fetching more text we have to skip the bytes processed by the
previous cell, otherwise we end up in an infinite loop.
|
|
The standard says "if an encoding error occurs ... the conversion state
is unspecified".
|
|
|
|
Previously the last selection was kept implicitly to statisfy the invariant
that at least one selection needs to exist.
|
|
With the current model the differences between normal and visual mode
is that in the latter selections are anchored (meaning one endpoint
remains fixed), while in normal mode both endpoints can in principle
be updated simultaneously (currently they are always colapsed to a
singleton selection, giving the impression of cursors).
|
|
This window local register holds the last active selections.
|
|
This should keep the EOF markers visible when another option is enabled.
The whole UI option handling is a bit of a mess. In the longterm more of
the drawing code should be moved into Lua.
|
|
Conflicts:
view.c
view.h
|
|
Conflicts:
view.c
|
|
|
|
|
|
|
|
|
|
The anchor needs to be set after the cursor was positioned,
otherwise the cursor placement will immediately destroy the
selection for in the non-anchored case.
|
|
|
|
Dispose all invalid and merge all overlapping selections.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|