aboutsummaryrefslogtreecommitdiff
path: root/vis.c
AgeCommit message (Collapse)AuthorFilesLines
2017-02-07vis: improve text object handlingMarc André Tanner1-3/+12
Fix `gN` and delimited inner variants when given a count.
2017-02-07vis: reformat text object definitionsMarc André Tanner1-1/+1
2017-02-05vis: set $vis_file{name,path} environment variables for external commandsMarc André Tanner1-0/+6
2017-02-05vis: add file argument to vis_pipeMarc André Tanner1-3/+4
2017-02-02Slight code cleanups, use buffer API where appropriateMarc André Tanner1-3/+7
2017-02-01vis: refactor autoindent handlingMarc André Tanner1-37/+44
Rather than inserting a newline and then looking for leading white space of the previous line we now gather the white space before newline insertion. Also we no longer indent empty lines. Close #472
2017-01-31vis: improve cursor positioning after operators in visual modeMarc André Tanner1-0/+4
Make sure the selection setting code (used to restore selections) does not move the cursor. Fix #479
2017-01-31vis: add workaround for broken color handling in Terminal.appMarc André Tanner1-0/+1
Terminal.app sets $TERM=xterm-256color and ships a corresponding terminfo description advocating that it is capable of color changes to the 256 color palette when in fact it can not. We introduce a new boolean option "change-256colors" which is true by default but can be used to disable color changes. It is automatically set if Terminal.app is detected using $TERM_PROGRAM. This should fix display artifacts as described in #456.
2017-01-28vis: keep track of most recently processed keys of input queueMarc André Tanner1-0/+8
Currently the key handling functions do not know through which mapping they were invoked. As an example the `count` handler exploits the implementation detail that the input queue is stored in contiguous memory, meaning `keys[-1]` gives access to the digit being pressed. This adds infrastructure to keep track of the two most recently processed keys of the input queue. The information is guaranteed to be accurate for the initial invocation of the key handler but will be overwritten in case new keys are pushed to the input queue (e.g. through vis_keys_feed).
2017-01-20vis: slightly cleanup repeat code, always set dot registerMarc André Tanner1-8/+8
2017-01-20vis: improve new line handling at end of fileMarc André Tanner1-2/+18
<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
2017-01-19vis: simplify count handling for insertionMarc André Tanner1-1/+1
2017-01-18vis: fix count handling for appendMarc André Tanner1-8/+10
Fix #371
2017-01-18vis: support count for insertion and replacementMarc André Tanner1-1/+1
Fix #372
2017-01-18vis: support count for macro replayMarc André Tanner1-1/+4
Fix #448
2017-01-18vis: do not take undo snaphots while replaying a macroMarc André Tanner1-5/+22
The vis_keys_feed function is currently unaffected by this change. It still creates individual undo points. While this is probably undesirable from an API point of view, it keeps the lua based tests that use undo points working.
2017-01-16vis: change key input handling modelMarc André Tanner1-17/+28
Previously if you had a mapping for both `a` and `ab` the latter would in effect be unreachable because the greedy search would always match and then execute the former. With the new behavior we keep reading keys until we have a non ambigious sequence. That is after pressing `a` nothing will happen, if the next key is a `b` we will execute the `ab` mapping otherwise we will perform `a` and whatever the action is for the next key. Close #386
2017-01-16vis: cleanup regex header inclusionMarc André Tanner1-1/+0
2017-01-13vis: introduce registers 0-9 and & to capture search matchesMarc André Tanner1-0/+10
These are currently only updated for `x` and `y` sam commands, whether they should be updated for other search related activities (`/`, `?`, `n`, `N`, `*`, `#` etc.) needs to be investigated.
2017-01-10vis: add register description to :help outputMarc André Tanner1-15/+24
2017-01-10vis: add valid marks to :help outputMarc André Tanner1-4/+9
2016-12-31vis: allow user registered :-commands to specify a help textMarc André Tanner1-1/+5
2016-12-29vis: cleanup key action lifetime managementMarc André Tanner1-0/+4
2016-12-27vis: properly free dynamic key bindingsMarc André Tanner1-0/+4
The handling of :unmap needs to be revisited at some point.
2016-12-22text: change datatype of Mark to uintptr_tMarc André Tanner1-1/+1
This should avoid undefined pointer comparisons.
2016-12-20vis: improve literal insertion via <C-v> in insert modeMarc André Tanner1-0/+42
2016-12-19vis: introduce vis_register_from utility functionMarc André Tanner1-0/+19
2016-12-17vis: always remove consumed keys from input queueMarc André Tanner1-3/+3
When given a mapping like: :map! insert >> ><>x> whose end is a prefix of another mapping we should still remove all already consumed keys from the input queue. Fixes #436
2016-12-16vis: process keys following an unmatched prefix individuallyMarc André Tanner1-1/+3
Fixes #434
2016-12-15vis: respect terminating NUL bytes in the input queueMarc André Tanner1-1/+1
It can happen that the Buffer content used for the input queue becomes <\000> where the NUL byte is intended to terminate the queue, but termkey happily parses it and because it is delimited by < and > on both sides we then interpret it as a key. In input mode this leads to the insertion of a NUL byte which is displayed as ^@. Close #432
2016-12-14vis: remove useless NULL checkMarc André Tanner1-1/+1
The very first thing we do if that check is false, is return from the function.
2016-12-09vis-lua: expose input key event in insert and replace modesMarc André Tanner1-0/+6
2016-12-08vis: rename some internal C function pointersMarc André Tanner1-8/+6
2016-11-28vis: move mark description into core codeMarc André Tanner1-0/+10
2016-11-27vis: cleanup signal handling codeMarc André Tanner1-0/+16
Move all signal handling code out of "library" code into user application.
2016-11-26vis: redirect stdout and stderr streams to /dev/null when lacking a consumerMarc André Tanner1-7/+19
If the caller of vis_pipe is not interested in the output, redirect it to /dev/null and close the pipe. Otherwise we would wait for possible output (which might never arrive) only to throw it away. As a consequence background processes can now be started with: :> { plumber <&3 3<&- & } 3<&0 2>&- whereas before one also had to explicitly close stdout: :> { plumber <&3 3<&- & } 3<&0 1>&- 2>&-
2016-11-25vis: fix I/O redirection bugs, cleanup vis_pipeMarc André Tanner1-8/+9
The `:!` command did redirect stdout to a pipe which was used by `vis-menu` to return the selected entry. However, this breaks other interactive commands such as `:!/bin/sh` where command output was never displayed. Instead we modified `vis-menu` to re-open /dev/tty for its user interface which makes it work as a regular filter `:|` This patch also obsoletes the interactive flag previously passed to the vis_pipe function. Interactive mode is instead enabled by piping an invalid range.
2016-11-22vis-lua: introduce pre-save hookMarc André Tanner1-0/+4
The first argument is the file object while the second argument denotes the full path to which it will be written. Path might be `nil` if the file is going to be written to stdout. The Lua function is expected to return a boolean value indicating whether the write operation should proceed or be aborted.
2016-11-22vis-lua: pass path as second argument to file_save_post event hookMarc André Tanner1-4/+6
The passed path can be different from file.name for instance when opening a file `a` and then doing `:w b` where file.name will be the former and path the latter.
2016-11-21vis-lua: rename file_save event to file_save_postMarc André Tanner1-3/+3
Indicating that the event is triggered *after* a successfull write.
2016-11-16vis: treat vis_keys_feed input like a macro replayMarc André Tanner1-1/+8
We need to push keys individually to the input queue such that the state machine can advance and record keys into the operator macro if necessary. Previously feeding the following input: isome text<Escape>. would not work as expected because the complete key stream was pushed to the input queue at the same time during which the operator macro was not yet active. Thus the dot command at the end would have nothing to repeat.
2016-11-15vis: defer UI initialization and overhaul argument parsingMarc André Tanner1-58/+9
Do not initalize curses UI before it is actually needed. Move vis command line argument parsing logic into main.c. This fixes `vis -v` output and exit status. Fix #351
2016-11-15vis: overhaul and unify event generation codeMarc André Tanner1-27/+78
Add another layer of indirection, move actual event generation code to a dedicated function.
2016-11-15vis: generalize special stdin handlingMarc André Tanner1-4/+12
In preparation to move argument parsing code out of vis.c.
2016-11-11vis: attempt to use the default shell of the user to execute external commandsMarc André Tanner1-2/+11
We first try $SHELL and then fall back to the shell field of the password file entry (/etc/passwd).
2016-11-10vis: make vis_draw actually draw each windowMarc André Tanner1-0/+2
2016-11-09vis: perform undo snapshotting more rarerlyMarc André Tanner1-1/+3
Do not take snapshots after every operation in insert/replace mode. As an example up until now we would take a snapshot after every <Backspace>/<Delete> press, hence when undoing changes each character would be restored individually. The same applies for <C-w> and related actions. From now on we only snaphost when: - transitioning from insert/replace mode to normal mode (but not when switching to operator pending mode) - an operation takes place from normal mode - an idle time expires in normal/replace mode
2016-11-09vis: unify VIS_OP_{INSERT,REPLACE} implementationMarc André Tanner1-4/+4
They both perform a motion before changing mode.
2016-11-08vis: fix key parsing/skipping logicMarc André Tanner1-1/+3
We should only attempt to parse special keys if they are delimited by angle brackets i.e. <Key> but not Key. Previously we would wrongly skip over the latter.
2016-10-27vis: fix :langmap behaviorMarc André Tanner1-2/+2
The mapped to latin key has typically a shorter UTF-8 representation, thus explicitly copy the NUL terminator to properly truncate the new key value.