| Age | Commit message (Collapse) | Author | Files | Lines |
|
Specifies how the current file should be saved, `atomic` which uses
rename(2) to atomically replace the file, `inplace` which truncates the
file and then rewrites it or `auto` which tries the former before falling
back to the latter. The rename method fails for symlinks, hardlinks,
in case of insufficient directory permissions or when either the file
owner, group, POSIX ACL or SELinux labels can not be restored.
The option defaults to `auto`.
|
|
There are cases where it is useful to specify how the file should be saved.
|
|
Only accept numbers in range [0, INT_MAX]. Reject trailing garbage,
where before something like `:set cc 50NaN` worked it will now cause
an error.
Close #418
|
|
|
|
Properly detect unbalanced curly braces and spurious output at the
end of a group.
|
|
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.
|
|
Make the delay used to distinguish between an <Escape> key and
other terminal escape sequences such as for the Meta key run
time configurable. The value is given in miliseconds and defaults
to 50ms.
Notice that terminal multiplexers like dvtm or tmux might also
induce some delay which has to be configured independently.
|
|
|
|
The path argument will be nil.
|
|
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.
|
|
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.
|
|
Indicating that the event is triggered *after* a successfull write.
|
|
Except for special commands like `w` and `wq` treat the cursor
as an implicit one character selection to which the command is
applied.
|
|
|
|
If the shell command is omitted, the last shell command (of any type)
is substituted. The most recently used shell command is stored in a
new register currently named `!`.
|
|
As in sam if an empty regex // is provided we substitute in the most
recently used one.
0/regexp///
Will match the second occurrence in the fie.
|
|
As in visual mode write commands have to be forced with ! if the changes
are destructive i.e. only parts of the file are written.
|
|
|
|
No functional changes.
|
|
Add another layer of indirection, move actual event generation
code to a dedicated function.
|
|
In preparation to move argument parsing code out of vis.c.
|
|
|
|
:0 < echo "Should be inserted at the start of the file"
:1 < echo "Should replace the first line"
|
|
It was the only command option which needed `=` to assign a value to.
This unifies the argument parsing logic and adds the possibility to
specify a per-option help text.
You might want to adapt your visrc.lua configuration accordingly.
|
|
|
|
We need to distinguish between an explicit given zero and an
omitted value which should default to 1.
This should fix the following constructs which rounds up/down
an existing selection to whole lines -0,+0 and -0+,+0-
|
|
Something like :{ x/pattern/ } should not leave the original
cursor around.
|
|
The following
x/example/ y/e/ i/-/
should produce `-e-xample-` where before it would wrongly
result in `-e-xample`.
|
|
Previously something like
:x/pattern
:c/replacement
would cause all cursors to disappear because the location
they were placed on was deleted beneath them.
|
|
Something like :{ x/pattern/ } should select all occurrences of pattern.
|
|
|
|
Any white space should terminate the command name.
In particular multi-line commands as part of a group
were not handled correctly.
|
|
\\ should not be treated specially when parsing regular expressions.
|
|
|
|
Avoid intermediate shell.
|
|
:e without any argument can be used to reload the file from
disk whereas before a "Filename expected" error would be
displayed.
|
|
Close #387
|
|
We use an adapted variant of sam's structural regular expression
based command language. The initial implementation was partially
based upon the following functions from sam / acme:
* parse.h / edit.h (struct definitions)
* cmd.c / edit.c (functions parsecmd, simpleaddr, compoundaddr)
* xec.c / ecmd.c (cmdexec)
* address.c / addr.c (address)
It turns out the relevant code can be traced back to the initial
X11 port of sam which is distributed under an ISC-like license
instead of the Lucent Public License Version 1.02 used for Plan 9,
plan9port and 9base.
http://www.netlib.org/research/
http://www.netlib.org/research/sam.shar
Hence we switch to the simpler license variant.
Close #238
|
|
The help formatting could probably be improved, short
single line help texts are still missing. Patches welcome.
Close #283
|
|
|
|
|
|
Fixes #364
|
|
Handling of unbalanced quotes could probably still be improved.
Closes #344
|
|
|
|
Try to display a shorthand version in the status bar, this currently
only works for files below the current working directory of the editor
process.
|
|
Previously the interactive mode was implicitly enabled by passing
an invalid range. However for some use cases (e.g. completion) we
need to be able to pipe a given text range to an external process
without also redirecting stderr (which is used to draw the slmenu
interface on top of vis).
|
|
This fixes the argument parsing for the :{un,}map-window commands.
|
|
This has the effect that multiple filter commands can be undone together.
|
|
This is needed to make the vis.event.start Lua callback useful,
setting global options should be possible even if no windows exist
yet.
The :set command options should probably be cleaned up further,
some of them apply only to the currently active window while others
have a global effect.
|
|
|