vis

a vi-like editor based on Plan 9's structural regular expressions

git clone https://9o.is/git/vis.git

CHANGELOG.md

(15861B)


      1 ## [0.9] - 2024-05-01
      2 
      3 This release has been long in the works but its time now. There
      4 have been many additions and bugfixes since 0.8. In particular
      5 changes to the Lua API have made it easier to extend `vis` in all
      6 sorts of ways that were previously difficult or impossible. As
      7 always the appreciation towards contributors new and old can not
      8 be understated; thanks goes out to everyone for their efforts!
      9 
     10 A summary of changes follows:
     11 
     12 ### Core
     13 
     14 - Compare non-existing files by name and existing files by inode
     15 - Do tilde expansion only for the tilde character at the beginning of the pattern.
     16 - Add word wrapping via breakat and wrapcolumn options
     17 - Add ansi escaping values and theming keyword for dimmed text
     18 - Allow statusbar to disabled
     19 - Default theme was changed to one that uses the terminal colors directly.
     20 
     21 ### Lua
     22 
     23 - filetype: support filetype detection via hashbang
     24 - filetype: many new file extensions are covered
     25 - Resync the lexers with Scintillua
     26 - Implement Selection:remove()
     27 - Allow underscore (_) in command names
     28 - Allow nil in vis:pipe() File and Range parameters
     29 - Add fullscreen param to vis_pipe_collect() and vis:pipe()
     30 - Access and set all available editor options
     31 - Implementation of the non-blocking process running Lua API
     32 - Make expandtab and tabwidth options window-local
     33 - Drop redrawtime option
     34 - Add a Lua constant for UI_STYLE_LEXER_MAX
     35 - Report viewport as lines in addition to bytes
     36 - Add `win:style_pos()` for styling a specific window cell.
     37 - Add `UI_DRAW` event for last minute changes to the drawn window.
     38 - Report viewport dimensions
     39 
     40 ### Misc
     41 
     42 - Add a basic .editorconfig file
     43 - Don't set _FORTIFY_SOURCE in configure
     44 - Many documentation improvements.
     45 - Make vis-open and vis-complete more POSIX compliant
     46 - vis-clipboard: clean up bashisms and make shellcheck happy.
     47 - vis-clipboard: add support for wayclip
     48 - vis-open: allow to show files vertically
     49 
     50 ### Bugfixes
     51 
     52 - fix warning by dealing with error value from fchdir in text-io.c
     53 - text-io: close "cwd" in all cases
     54 - vis-complete: Fix commandline options handling
     55 - vis-clipboard: make xsel honor --selection
     56 - wl-paste and wl-copy should not add \n to the end of the clipboard.
     57 - fix a bug with using regex to close windows (i.e. `:X/re/q`)
     58 - Limit to lines within range for inner text objects
     59 - vis-clipboard: don't fail when sel is primary on unsupported platforms
     60 - fix { moving back too much if cursor is at start of a line
     61 - Print keybindings containing space correctly in help window
     62 - Prevent flickering in curses
     63 - vis-menu: try to preserve valid Unicode points
     64 - lua: make sure lpeg is in fact optional
     65 - vis-single: respect TMPDIR
     66 - lua: fail when mapping a key to an invalid handler type
     67 - vis_pipe: correctly return non-zero exit status
     68 - view: skip empty cells before applying a style
     69 - sam: reject invalid ranges for cmd_extract ("x"/"y")
     70 - Fix upper/lower case conversions with `gU` and `gu`.
     71 - lua: complete-word: use internal regex for splitting words
     72 - Theme application was refactored and should be more consistent now.
     73 
     74 ### Deprecation Notices
     75 
     76 The option names `show-spaces`, `show-tabs`, `show-newlines`,
     77 `show-eof`, and `change-256colors` are all deprecated and will be
     78 removed for the next release, use the name without the `-` instead
     79 (e.g. showeof). This was done to avoid inconsistencies between the
     80 lua option names and the `:set option` names.
     81 
     82 The complete changelog can be viewed using `git log v0.8..v0.9`.
     83 
     84 ## [0.8] - 2022-11-01
     85 
     86 This is a release of vis as it has been for more than a year
     87 before some development started up again. We're releasing this
     88 version to get a stable 'old' release out there which should
     89 still contain a number of bugfixes compared to 0.7.
     90 
     91 - build: add git based version information back
     92 - lexers: fix bug in bash lexer for last here-doc
     93 - vis: make O implementation independent of mapping
     94 - fix typos in comments
     95 - lua: fix luacheck warnings
     96 - vis: rename to/till motion internals
     97 - vis: implement multiline to/till motions
     98 - vis-lua: provide file.permission property
     99 - Mention pkg-config in README
    100 - lexers/strace: improve comments, field names and syscall
    101   results
    102 - lexers/git-rebase: also highlight break command
    103 - filetype: Set "bash" for APKBUILD and .ebuild.
    104 - filetype: Detect make shebang for "makefile".
    105 - Adding .sv extension to verilog syntax highlighter
    106 - build: update alpine in docker build to version 3.13
    107 - sam: only skip the last empty match if it follows a newline
    108 - sam: produce empty match at the end of looped range
    109 - test: update
    110 - gitignore: remove vim specific swap files
    111 - sam: tweak handling of zero length matches in y commands
    112 - sam: simplify trailing match handling for x/y commands
    113 - vis: correctly close pipe connected to stdin of external
    114   process
    115 - add lua5.4 in configure script
    116 - vis: Add readline Ctrl+A/E bindings
    117 - ci: verify codecov script before using it
    118 - ci: verify coverity scan script before using it
    119 - filetype: Set "groovy" for Jenkinsfile
    120 
    121 
    122 ## [0.7.1] README: x/freenode/c/libera/ - 2022-05-03
    123 
    124 - Update the README to point to irc.libera.chat after the great
    125   migration of 2021.
    126 
    127 
    128 ## [0.7] vis version 0.7 - 2020-12-08
    129 
    130 This is mostly a bug fix release with
    131 [fixes for a few cases of undefined behavior](https://www.brain-dump.org/blog/finding-undefined-behavior-in-c-code/)
    132 and preliminary work for experimentation with different
    133 [core text management data structures](https://www.brain-dump.org/blog/rethinking-vis-text-management-data-structure/)
    134 and
    135 [general editor architecture](https://www.brain-dump.org/blog/vis-to-server-or-not/).
    136 
    137 - fix UB in core text management data structure
    138 - text refactoring, splitting out reusable text iterator and I/O
    139   components
    140 - new `*at()` variants taking directory descriptor for file
    141   load/save API
    142 - more efficient initial file read, avoiding spurious syscalls
    143   and copy
    144 - text API cleanups, const correctness improvements
    145 - increased test coverage for core text data structure
    146 - support for Lua 5.4
    147 - Lua API improvements: `vis.mark`, `vis.register`,
    148   `vis.win.file.modified` and support for terminal CSI events
    149 - NetBSD support
    150 - new `:set ignorecase` option to search case independently
    151 - new visual mode mapping `<C-a>` to select all matching
    152   selections
    153 - fix mappings involving non-leading `<C-c>`
    154 - minor file detection fixes for racket, node.js modules,
    155   Typescript and liliypond
    156 - new lexers for Zig, meson build system, Mikrotik RouterOS
    157   scripts, Gemini
    158 - improved inner word text object and its use for `<C-n>` in
    159   normal mode
    160 - improved `<C-n>` behavior in visual mode
    161 - removed `ie`, `ae` inner/outer entire text object, use `:`, as
    162   shorthand for `:0,$`.
    163 - removed pariwise selection combinators `z>`, `z<`, `z-`, `z+`,
    164   `z&`, `z|`
    165 - remove `~` as alias for `g~`
    166 - use `~` instead of `!` for selection complement
    167 - remove special key and window related aliases
    168 - `vis-open(1)` adds a trailing slash to indicate folders
    169 - add primary clipboard support to `vis-clipboard(1)`
    170 - support wayland clipboard using `wl-clipboard(1)`
    171 - new Makefile targets: `distclean`, `testclean`
    172 
    173 
    174 ## [0.6] vis version 0.6 - 2020-06-07
    175 
    176 - bounded time syntax highlighting using the `:set redrawtime`
    177   option
    178 - support optional count for sam's text commands e.g. `:i3/-/`
    179 - make `<C-n>` in visual mode match next occurence of existing
    180   selection
    181 - warn when attempting to write to an existing file
    182 - improved file change detection based on inode instead of path
    183   information
    184 - fix file saves with modifications in file pre-save events
    185 - fix save on file systems without `fsync(2)` support on
    186   directory descriptors
    187 - do not unlink `file~` when saving `file`
    188 - introduce distinct `vis-menu(1)` exit codes
    189 - modify Lua package.path to include `<plugin>/init.lua`
    190 - performance improvements for the HTML, XML and YAML lexers
    191 - new Julia and Elm lexers, better defaults for standard text
    192   lexer
    193 - support optional exit status in `:q` and `:qall` commands
    194 - better temporary file creation using `mkstemp(2)`
    195 - performance improvements in highlight matching parentheses
    196 - improved behavior of `^` and `$` in searches and looping
    197   commands
    198 - improved search wrap around behavior
    199 - new `:set layout` option to specify window orientation
    200 - improved filetype detection by matching known filenames exactly
    201 - support DragonFly BSD in configure script
    202 - better manual page, fixed warnings
    203 - removed `gp`, `gP`, `gq`
    204 - implement `g~`, `gu` and `gU` using `tr(1)`, they are no longer
    205   operators
    206 - removed `v` and `V` in operator pending mode
    207 - avoid crash if `$TERM` is unset
    208 - keep selections after `:>` command
    209 - normalize selections after `:` command execution
    210 - show pending input queue content in status bar
    211 - make `r<Enter>` insert a new line
    212 - new `:set loadmethod` option, valid values are `read`, `mmap`
    213   or `auto`
    214 - always apply `:|` command to existing selections
    215 - fix terminal UI on serial console
    216 - various code cleanups, removal of VLA
    217 - `<Escape>` resets count, if applicable
    218 - fix `:X` and `:Y` commands which were interchanged
    219 - don't strip executables by default, provide install-strip
    220   target
    221 
    222 
    223 ## [0.5] vis version 0.5 - 2018-03-25
    224 
    225 - Fix for a buffer overflow when dealing with invalid/incomplete
    226   Unicode sequences which caused an infinite loop/crash. With
    227   default compilation flags this should not be exploitable, but
    228   opening a malicious file would lose all unsaved changes.
    229 - Fix color support in ncurses 6.1
    230 - New default 256 color theme: zenburn. It should hopefully work
    231   better with the default color palette.
    232 - Updated Docker based builds (`make docker`) to use latest
    233   Alpine Linux packages to produce a statically linked,
    234   self-contained binary.
    235 - Take symbolic keys into account when evaluating key prefixes
    236   (`ci<` is not a prefix of `ci<Tab>`).
    237 - Improved paragraph text objects.
    238 - Reset count after handling ,
    239 - Lexer updates for Clojure, Scheme, ASM, Pony, PHP, Python,
    240   Erlang, xs and ReasonML.
    241 - Correct handling of `g/^$/` construct to match empty lines in
    242   commands like:
    243 
    244     x g/^$/ d
    245 
    246 - `<C-v><Enter>` now inserts `\r` rather than `\n`, this
    247   currently also affects `r<Enter>` which might not be desirable.
    248 - Fix command prompt malfunction triggered by special cursor position.
    249 - Configure script can be interrupted.
    250 - Removed `!` operator, use `:|`
    251 - Ignore `SIGQUIT`
    252 - `vis-open(1)` fixes
    253 
    254 
    255 ## [0.4] vis version 0.4 - 2017-07-23
    256 
    257 - Selections as core editing primitives. Cursors have been superseded by singleton selections. Overlapping selections are now merged. This change is also reflected in the exposed Lua API (for which still no stability guarantee is given).
    258 
    259 - Selections can be saved into marks on which set operations can be performed:
    260 
    261   `m` save selections\
    262   `M` restore selections\
    263   `|` set union\
    264   `&` set intersection\
    265   `\` set minus\
    266   `!` set complement\
    267   `z|` pairwise union\
    268   `z&` pairwise intersection\
    269   `z+` pairwise combine, choose longer\
    270   `z-` pairwise combine, choose shorter\
    271   `z<` pairwise combine, choose leftmost\
    272   `z>` pairwise combine, choose rightmost
    273 
    274   Marks are specified using `'{mark}` analogous to `"{register}`.
    275 
    276 - Jump list based on marks:
    277 
    278   `g<` jump backward\
    279   `g>` jump forward\
    280   `gs` save currently active selections
    281 
    282 - New register `#` to insert the current selection number.
    283 - Drop special handling of `\r\n` line endings. `\r` will be
    284   displayed as `^M`. Enter will always insert `\n`.
    285 - Fix Unicode regex search with libtre backend.
    286 - New count specifiers for sam's `g` and `v` commands to
    287   keep/drop selections based on their index.
    288 - On macOS saving files larger than INT_MAX bytes should work.
    289 - New `:set show-eof` to toggle the display of end of file markers ~
    290   as before it is enabled by default.
    291 - Double leading slashes of paths are stripped.
    292 - Improved `:<` command implementation to only use a pipe when
    293   necessary.
    294 - New lexers for Myrddin and `strace(1)`, updates for Elixir, Perl
    295   and Forth.
    296 - Fix compilation for GNU Hurd. The vis package is now built for
    297   all supported Debian architectures.
    298 - Improve job control of forked processes. SIGINT is now properly
    299   delivered to child processes.
    300 - Commands given a huge count can now be interrupted using `.`
    301 - This is implemented in cooperative fashion, meaning a single
    302   long running operation can still not be interrupted.
    303 - More efficient line wise motions based on optimized
    304   `mem{r,}chr(3)` libc functions.
    305 - Optionally support vim compatible n/N search direction.
    306 - Reproducible, statically linked, self contained binary built
    307   using the Alpine Docker image. The idea being that it is a
    308   single file which can be copied to any Linux >= 2.6 system to
    309   provide a usable editor. It has an embedded tar archive which
    310   contains the required Lua support files which are extracted to
    311   a temporary directory using libuntar.
    312 - Preliminary C API documentation found at: http://vis.rtfd.io
    313 - Updated manual page.
    314 - Various code cleanups.
    315 
    316 Check the git log for further details.
    317 
    318 The release tarball is signed with [OpenBSD's signify
    319 tool](http://man.openbsd.org/signify), the signature
    320 
    321     untrusted comment: verify with vis.pub
    322     RWRbDa94LCndL/v7m45zQw4saMKs5AsnTKBsvvFujZbAi9CIhlyiz0fihaWYbHkWDO957Csn5yJvecac+iUxX7arQ5IxZ4XRcQE=
    323 
    324 can be verified using the following public key:
    325 
    326     untrusted comment: vis editor signify public key
    327     RWRbDa94LCndLy4pUdO6h1PmS1ooHOGb7p84OfQIR7+hFlZwuAXUdQ5J
    328 
    329 
    330 ## [0.3] vis version 0.3 - 2017-03-26
    331 
    332 Most notable changes include:
    333 
    334 - support for sam's structural regular expression based command language
    335 - various bug fixes related to multiple cursor/selection support. New
    336   functionality to navigate among cursors (`<C-u>`, `<C-d>`), align
    337   (`<Tab>`, `<S-Tab>`), rotate (`+`, `-`), trim (`\`) or drop
    338   (`<C-c>`, `<C-l>`) selections.
    339 - improved Lua API, featuring a new event subscription mechanism and the
    340   possibility to define custom operators, motions, text-objects, `:set`
    341   options and more. Notice however that at this point no API stability
    342   guarantee is provided.\
    343   You might have to update your `visrc.lua` configuration file, check the
    344   Documentation for details:
    345   http://martanne.github.io/vis/doc/
    346 - new standalone tools vis-menu (`:o .`), vis-digraph (`<C-k>`) and
    347   vis-complete (`<C-k>`) for a simple file open dialog, digraph support
    348   and word completion, respectively.
    349 - multiple bug fixes for vi(m) functionality, including improved count
    350   and repeat handling as well as better cursor positioning, `cw`, shift,
    351   join and autoindent implementation.
    352 - new key mapping processing based on longest unique match
    353 - optional libtre based regex backend for more memory efficient
    354   forward searches
    355 - respect umask when creating new files, previously they were only
    356   read/writable by the current user. Also `fsync(2)` destination
    357   directory after `rename(2)` when performing an atomic save operation.
    358 - new `:set` options to configure the used shell, escape
    359   delay, file save method and context to consider for syntax
    360   highlighting
    361 - True color support in lexer themes, in case the terminal
    362   supports color palette changes
    363 - minimal built-in `:help [pattern]` command
    364 - incorporated upstream changes to LPeg based lexers used for syntax
    365   highlighting from the Scintillua project
    366 - new set of manual pages in mdoc format
    367 - experimental raw vt100 UI backend for resource constraint environments
    368 - various code cleanups and bug fixes reported by static analysis, runtime
    369   interpretation and fuzzing tools
    370 
    371 Check the git log for further details.
    372 
    373 The release tarball is signed with [OpenBSD's signify
    374 tool](http://man.openbsd.org/signify), the signature can be
    375 verified using the following public key:
    376 
    377     untrusted comment: vis editor signify public key
    378     RWRbDa94LCndLy4pUdO6h1PmS1ooHOGb7p84OfQIR7+hFlZwuAXUdQ5J
    379 
    380 ## [0.2] vis version 0.2 - 2016-03-25
    381 
    382 no changelog, 240 commits between v0.1 and v0.2 tags.
    383 
    384 ## [0.1] vis version 0.1 - 2015-12-31
    385