2020-03-25 08:06:38 +00:00
|
|
|
This document attempts to list user-visible changes and any major internal
|
2020-04-06 00:13:37 +00:00
|
|
|
rearrangements of Notcurses.
|
2020-03-25 08:06:38 +00:00
|
|
|
|
2020-06-08 09:26:58 +00:00
|
|
|
* 1.5.0 (2020-07-08)
|
2020-06-07 09:08:46 +00:00
|
|
|
* The various `bool`s of `struct notcurses_options` have been folded into
|
|
|
|
that `struct`'s `flags` field. Each `bool` has its own `NCOPTION_`.
|
2020-06-07 01:38:05 +00:00
|
|
|
* Added a Pixel API for working directly with the contents of `ncvisual`s,
|
|
|
|
including `ncvisual_at_yx()` and `ncvisual_set_yx()`.
|
2020-06-08 07:01:58 +00:00
|
|
|
* Added `ncplane_puttext()` for writing multiline, line-broken text.
|
|
|
|
* Added `ncplane_putnstr()`, `ncplane_putnstr_yx()`, and
|
|
|
|
`ncplane_putnstr_aligned()` for byte-limited output of UTF-8.
|
2020-06-07 01:38:05 +00:00
|
|
|
|
2020-06-05 10:09:17 +00:00
|
|
|
* 1.4.5 (2020-06-04)
|
2020-06-05 07:47:13 +00:00
|
|
|
* `ncblit_rgba()` and `ncblit_bgrx()` have replaced most of their arguments
|
|
|
|
with a `const struct ncvisual_options*`. `NCBLIT_DEFAULT` will use
|
|
|
|
`NCBLITTER_2x1` (with fallback) in this context. The `->n` field must
|
|
|
|
be non-`NULL`--new planes will not be created.
|
2020-06-05 05:30:29 +00:00
|
|
|
* Added `ncplane_notcurses_const()`.
|
2020-06-05 02:47:38 +00:00
|
|
|
|
2020-06-01 20:18:56 +00:00
|
|
|
* 1.4.4.1 (2020-06-01)
|
Fully general ncvisual layer (#647)
This represents an essentially complete rewrite of ncvisual and associated code. It had two major goals:
Improve the ncvisual API based off lessons learned, pursuant to the upcoming API freeze. In particular, I wanted to:
decouple ncvisuals from ncplanes. It should be possible to render a ncvisual to multiple planes, with different scaling each time. It should be possible to create an ncvisual without a plane, etc.
normalize the various ways of constructing an ncvisual -- file, memory, plane, etc.
Support multiple blitters, from 7-bit ASCII to Sixel. This required writing the blitters in several cases, and they're not yet in their final implementations (but the API is fine)
I have not yet unified Plots and Visuals, and might not, given that the Plot code works fine. We could at this point implement Plots in terms of Visuals, though -- the blitter backend range has been unified. Sixel is not yet implemented, though it is listed.
There is a new POC tool, blitter. It renders its arguments using all possible blitter+scaling combinations. Another new POC, resize, displays its argument, then resizes it to the screen size and displays that, explicitly making use of ncvisual_resize() rather than a scaling parameter to ncvisual_render().
This also eliminates some memory leaks and bugs we were seeing in trunk, and brings in Sixel scaffolding.
The C++ wrapper will also need patching back up; I cut most of it down while wrestling with this crap, urk.
Closes #638, #562, and #622.
2020-05-29 01:16:58 +00:00
|
|
|
* Got the `ncvisual` API ready for API freeze: `ncvisual_render()` and
|
|
|
|
`ncvisual_stream()` now take a `struct ncvisual_options`. `ncstyle_e`
|
|
|
|
and a few other parameters have been moved within. Both functions now
|
|
|
|
take a `struct notcurses*`. The `struct ncvisual_options` includes a
|
|
|
|
`ncblitter_e` field, allowing visuals to be mapped to various plotting
|
|
|
|
paradigms including Sixel, Braille and quadrants. Not all backends have
|
|
|
|
been implemented, and not all implementations are in their final form.
|
2020-06-01 06:33:33 +00:00
|
|
|
`CELL_ALPHA_BLEND` can now be used for translucent visuals.
|
Fully general ncvisual layer (#647)
This represents an essentially complete rewrite of ncvisual and associated code. It had two major goals:
Improve the ncvisual API based off lessons learned, pursuant to the upcoming API freeze. In particular, I wanted to:
decouple ncvisuals from ncplanes. It should be possible to render a ncvisual to multiple planes, with different scaling each time. It should be possible to create an ncvisual without a plane, etc.
normalize the various ways of constructing an ncvisual -- file, memory, plane, etc.
Support multiple blitters, from 7-bit ASCII to Sixel. This required writing the blitters in several cases, and they're not yet in their final implementations (but the API is fine)
I have not yet unified Plots and Visuals, and might not, given that the Plot code works fine. We could at this point implement Plots in terms of Visuals, though -- the blitter backend range has been unified. Sixel is not yet implemented, though it is listed.
There is a new POC tool, blitter. It renders its arguments using all possible blitter+scaling combinations. Another new POC, resize, displays its argument, then resizes it to the screen size and displays that, explicitly making use of ncvisual_resize() rather than a scaling parameter to ncvisual_render().
This also eliminates some memory leaks and bugs we were seeing in trunk, and brings in Sixel scaffolding.
The C++ wrapper will also need patching back up; I cut most of it down while wrestling with this crap, urk.
Closes #638, #562, and #622.
2020-05-29 01:16:58 +00:00
|
|
|
* Added `ncvisual_geom()`, providing access to an `ncvisual` size and
|
|
|
|
its pixel-to-cell blitting ratios.
|
|
|
|
* Deprecated functions `ncvisual_open_plane()` and `ncplane_visual_open()`
|
|
|
|
have been removed. Their functionality is present in
|
|
|
|
`ncvisual_from_file()`. The function `ncvisual_plane()` no longer has
|
|
|
|
any meaning, and has been removed.
|
2020-06-01 06:33:33 +00:00
|
|
|
* The `fadecb` typedef now accepts as its third argument a `const struct
|
|
|
|
timespec`. This is the absolute deadline through which the frame ought
|
2020-06-01 07:27:55 +00:00
|
|
|
be displayed. New functions have been added to the Fade API: like the
|
|
|
|
changes to `ncvisual_stream()`, this gives more flexibility, and allows
|
|
|
|
more precise timing. All old functions remain available.
|
Fully general ncvisual layer (#647)
This represents an essentially complete rewrite of ncvisual and associated code. It had two major goals:
Improve the ncvisual API based off lessons learned, pursuant to the upcoming API freeze. In particular, I wanted to:
decouple ncvisuals from ncplanes. It should be possible to render a ncvisual to multiple planes, with different scaling each time. It should be possible to create an ncvisual without a plane, etc.
normalize the various ways of constructing an ncvisual -- file, memory, plane, etc.
Support multiple blitters, from 7-bit ASCII to Sixel. This required writing the blitters in several cases, and they're not yet in their final implementations (but the API is fine)
I have not yet unified Plots and Visuals, and might not, given that the Plot code works fine. We could at this point implement Plots in terms of Visuals, though -- the blitter backend range has been unified. Sixel is not yet implemented, though it is listed.
There is a new POC tool, blitter. It renders its arguments using all possible blitter+scaling combinations. Another new POC, resize, displays its argument, then resizes it to the screen size and displays that, explicitly making use of ncvisual_resize() rather than a scaling parameter to ncvisual_render().
This also eliminates some memory leaks and bugs we were seeing in trunk, and brings in Sixel scaffolding.
The C++ wrapper will also need patching back up; I cut most of it down while wrestling with this crap, urk.
Closes #638, #562, and #622.
2020-05-29 01:16:58 +00:00
|
|
|
|
2020-05-22 13:18:39 +00:00
|
|
|
* 1.4.3 (2020-05-22)
|
2020-05-22 10:53:47 +00:00
|
|
|
* Plot: make 8x1 the default, instead of 1x1.
|
|
|
|
* Add `PREFIXFMT`, `BPREFIXFMT`, and `IPREFIXFMT` macros for `ncmetric()`.
|
|
|
|
In order to properly use `printf(3)`'s field width capability, these
|
|
|
|
macros must be used. This is necessary to support 'µ' (micro).
|
2020-05-22 10:56:02 +00:00
|
|
|
* C++'s NotCurses constructor now passes a `nullptr` directly through to
|
|
|
|
`notcurses_init()`, rather than replacing it with `stdout`.
|
2020-05-22 03:46:25 +00:00
|
|
|
* Added `USE_STATIC` CMake option, defaulting to `ON`. If turned `OFF`,
|
|
|
|
static libraries will not be built.
|
2020-05-22 10:53:47 +00:00
|
|
|
|
|
|
|
* 1.4.2.4 (2020-05-20)
|
2020-05-20 19:32:27 +00:00
|
|
|
* Removed `ncplane_move_above_unsafe()` and `ncplane_move_below_unsafe()`;
|
|
|
|
all z-axis moves are now safe. Z-axis moves are all now O(1), rather
|
|
|
|
than the previous O(N).
|
|
|
|
|
2020-05-17 13:01:53 +00:00
|
|
|
* 1.4.2.3 (2020-05-17)
|
2020-05-11 08:32:54 +00:00
|
|
|
* Added `notcurses_canutf8()`, to verify use of UTF-8 encoding.
|
2020-05-11 16:32:45 +00:00
|
|
|
* Fixed bug in `ncvisual_from_plane()` when invoked on the standard plane.
|
|
|
|
* `ncvisual_from_plane()` now accepts the same four geometric parameters
|
|
|
|
as other plane selectors. To reproduce the old behavior, for `ncv`, call
|
|
|
|
it as `ncvisual_from_plane(ncv, 0, 0, -1, -1)`.
|
|
|
|
* `ncvisual_from_plane()`, `ncplane_move_below_unsafe()`, `ncplane_dup()`,
|
|
|
|
and `ncplane_move_above_unsafe()` now accept `const` arguments where they
|
|
|
|
did not before.
|
2020-05-13 00:10:53 +00:00
|
|
|
* `notcurses_canopen()` has been split into `notcurses_canopen_images()` and
|
|
|
|
`notcurses_canopen_videos()`.
|
2020-05-17 00:06:33 +00:00
|
|
|
* `ncmetric()` now uses multibyte suffixes (particularly for the case of
|
|
|
|
'µ', i.e. micro). This has changed the values of `PREFIXSTRLEN` and
|
|
|
|
friends. So long as you were using `PREFIXSTRLEN`, this should require
|
|
|
|
only a recompile. If you were using `PREFIXSTRLEN` in a formatted output
|
|
|
|
context to count columns, you must change to `PREFIXCOLUMNS` etc.
|
|
|
|
* The `streamcb` type definition now accepts a `const struct timespec*` as
|
|
|
|
its third argument. This is the absolute time viz `CLOCK_MONOTONIC` through
|
|
|
|
which the frame ought be displayed. The callback must now effect delay.
|
2020-05-17 04:01:51 +00:00
|
|
|
* Mouse coordinates are now properly translated for any margins.
|
2020-05-17 06:14:27 +00:00
|
|
|
* `qprefix()` and `bprefix()` now take a `uintmax_t` in place of an
|
|
|
|
`unsigned`, to match `ncprefix`.
|
2020-05-11 08:32:54 +00:00
|
|
|
|
2020-05-11 02:21:01 +00:00
|
|
|
* 1.4.1 (2020-05-11)
|
|
|
|
* No user-visible changes (fixed two unit tests).
|
|
|
|
|
2020-05-11 01:39:02 +00:00
|
|
|
* 1.4.0 (2020-05-10)
|
2020-05-09 00:38:17 +00:00
|
|
|
* `ncplane_content()` was added. It allows all non-null glyphs of a plane to
|
|
|
|
be returned as a nul-terminated, heap-allocated string.
|
|
|
|
* `ncreader` was added. This widget allows freeform input to be edited in a
|
|
|
|
block, and collected into a string.
|
2020-05-09 00:58:00 +00:00
|
|
|
* `selector_options` has been renamed to `ncselector_options`, and
|
|
|
|
`multiselector_options` has been renamed to `ncmultiselector_options`.
|
|
|
|
This matches the other widget option struct's nomenclature.
|
2020-05-09 01:06:00 +00:00
|
|
|
* `ncplane_set_channels()` and `ncplane_set_attr()` have been added to allow
|
|
|
|
`ncplane` attributes to be set directly and in toto.
|
2020-05-09 02:33:39 +00:00
|
|
|
* `NULL` can now be passed as the `FILE*` argument to `notcurses_init()` and
|
|
|
|
`ncdirect_init()`. In this case, a new `FILE*` will be created using
|
|
|
|
`/dev/tty`. If the `FILE*` cannot be created, an error will be returned.
|
2020-05-09 08:45:51 +00:00
|
|
|
* A `flags` field has been added to `notcurses_options`. This will allow new
|
|
|
|
boolean options to be added in the future without resizing the structure.
|
|
|
|
Define `NCOPTION_INHIBIT_SETLOCALE` bit. If it's not set, and the "C" or
|
|
|
|
"POSIX" locale is in use, `notcurses_init()` will invoke
|
|
|
|
`setlocale(LC_ALL, "")`.
|
2020-05-09 12:41:03 +00:00
|
|
|
* All widgets now take an `ncplane*` as their first argument (some took
|
|
|
|
`notcurses*` before). All widgets' `options` structs now have an `unsigned
|
|
|
|
flags` bitfield. This future-proofs the widget API, to a degree.
|
2020-05-09 00:38:17 +00:00
|
|
|
|
2020-05-07 05:38:35 +00:00
|
|
|
* 1.3.4 (2020-05-07)
|
2020-04-29 09:44:22 +00:00
|
|
|
* `notcurses_lex_margins()` has been added to lex margins expressed in either
|
2020-05-04 15:05:52 +00:00
|
|
|
of two canonical formats. Hopefully this will lead to more programs
|
|
|
|
supporting margins.
|
2020-05-04 08:55:10 +00:00
|
|
|
* `ncvisual_open_plane()` has been renamed `ncvisual_from_file()`. The former
|
2020-05-04 15:05:52 +00:00
|
|
|
has been retained as a deprecated alias. It will be removed by 1.6/2.0.
|
|
|
|
* `ncvisual_from_rgba()` and `ncvisual_from_bgra()` have been added to
|
|
|
|
support creation of `ncvisual`s from memory, requiring no file.
|
2020-05-06 09:49:22 +00:00
|
|
|
* `ncvisual_rotate()` has been added, supporting rotations of arbitrary
|
|
|
|
radians on `ncvisual` objects.
|
2020-05-04 15:05:52 +00:00
|
|
|
* `ncvisual_from_plane()` has been added to support "promotion" of an
|
|
|
|
`ncplane` to an `ncvisual`. The source plane may contain only spaces,
|
2020-05-07 01:40:24 +00:00
|
|
|
half blocks, and full blocks. This builds atop the new function
|
|
|
|
`ncplane_rgba()`, which makes an RGBA flat array from an `ncplane`.
|
2020-05-07 02:21:22 +00:00
|
|
|
* The `ncplane` argument to `ncplane_at_yx()` is now `const`.
|
2020-04-29 09:44:22 +00:00
|
|
|
|
2020-04-27 01:25:23 +00:00
|
|
|
* 1.3.3 (2020-04-26)
|
2020-04-23 07:52:07 +00:00
|
|
|
* The `ncdplot` type has been added for plots based on `double`s rather than
|
|
|
|
`uint64_t`s. The `ncplot` type and all `ncplot_*` functions were renamed
|
|
|
|
`ncuplot` for symmetry.
|
2020-04-24 05:26:29 +00:00
|
|
|
* FFMpeg types are no longer leaked through the Notcurses API. `AVERROR`
|
|
|
|
is no longer applicable, and `ncvisual_decode()` no longer returns a
|
|
|
|
`struct AVframe*`. Instead, the `nc_err_e` enumeration has been introduced.
|
|
|
|
Functions which once accepted a value-result `AVERROR` now accept a value-
|
|
|
|
result `nc_err_e`. The relevant constants can be found in
|
|
|
|
`notcurses/ncerrs.h`.
|
2020-04-27 01:25:23 +00:00
|
|
|
* OpenImageIO 2.1+ is now supported as an experimental multimedia backend.
|
|
|
|
FFmpeg remains recommended. Video support with OIIO is spotty thus far.
|
2020-04-24 05:26:29 +00:00
|
|
|
* CMake no longer uses the `USE_FFMPEG` option. Instead, the `USE_MULTIMEDIA`
|
|
|
|
option can be defined as `ffmpeg`, `oiio`, or `none`. In `cmake-gui`, this
|
2020-04-25 19:52:23 +00:00
|
|
|
item will now appear as an option selector. `oiio` selects OpenImageIO.
|
2020-04-23 07:52:07 +00:00
|
|
|
|
2020-04-19 06:24:03 +00:00
|
|
|
* 1.3.2 (2020-04-19)
|
2020-04-18 11:11:33 +00:00
|
|
|
* `ncdirect_cursor_push()`, `notcurses_cursor_pop()`, and
|
|
|
|
`ncdirect_cursor_yx()` have been added. These are not supported on all
|
|
|
|
terminals. `ncdirect_cursor_yx()` ought be considered experimental; it
|
|
|
|
must read a response from the terminal, and this can interact poorly with
|
|
|
|
other uses of standard input.
|
2020-04-18 19:28:26 +00:00
|
|
|
* 1.3.1 unintentionally inverted the C++ `Notcurses::render()` wrapper's
|
|
|
|
return code. The previous semantics have been restored.
|
2020-04-18 11:11:33 +00:00
|
|
|
|
2020-04-18 04:35:15 +00:00
|
|
|
* 1.3.1 (2020-04-18)
|
2020-04-18 04:09:14 +00:00
|
|
|
* `ncplane_at_yx()` and `ncplane_at_cursor()` have been changed to return a
|
|
|
|
heap-allocated EGC, and write the attributes and channels to value-result
|
|
|
|
`uint32_t*` and `uint64_t*` parameters, instead of to a `cell*`. This
|
|
|
|
matches `notcurses_at_yx()`, and means they're no longer invalidated if the
|
|
|
|
plane in question is destroyed. The previous functionality is available as
|
|
|
|
new functions `ncplane_at_yx_cell()` and `ncplane_at_cursor_cell()`.
|
|
|
|
* `ncplane_set_base()` inverted its `uint32_t attrword` and `uint64_t channels`
|
|
|
|
parameters, thus matching every other function with these two parameters.
|
|
|
|
It moved `const char* egc` before either, to force a type error, as the
|
|
|
|
change would otherwise be likely to go overlooked.
|
2020-04-18 04:35:15 +00:00
|
|
|
* Scrolling is now completely implemented. When a plane has scrolling enabled
|
|
|
|
through use of `ncplane_set_scrolling(true)`, output past the end of the
|
|
|
|
last line will now result in the top line of the plane being lost, all
|
|
|
|
other lines moved up one, and the bottom line cleared.
|
2020-04-18 04:09:14 +00:00
|
|
|
|
|
|
|
* 1.3.0 (2020-04-12)
|
|
|
|
* No user-visible changes
|
|
|
|
|
|
|
|
* 1.2.9 (2020-04-11)
|
|
|
|
* No user-visible changes
|
|
|
|
|
|
|
|
* 1.2.8 (2020-04-10)
|
2020-04-11 16:39:31 +00:00
|
|
|
* `notcurses-tetris` now happily continues if it can't load its background.
|
|
|
|
|
2020-04-18 04:09:14 +00:00
|
|
|
* 1.2.7 (2020-04-10)
|
2020-04-10 15:22:26 +00:00
|
|
|
* Plots now always keep the most recent data to their far right (i.e., the
|
|
|
|
gap that is initially filled is on the left, rather than the right).
|
|
|
|
|
2020-04-18 04:09:14 +00:00
|
|
|
* 1.2.6 (2020-04-08)
|
2020-04-08 09:39:41 +00:00
|
|
|
* `ncplane_putsimple_yx()` and `ncplane_putstr_yx()` have been exported as
|
|
|
|
static inline functions.
|
2020-04-06 05:15:20 +00:00
|
|
|
* `ncplane_set_scrolling()` has been added, allowing control over whether a
|
2020-04-06 03:51:40 +00:00
|
|
|
plane scrolls. All planes, including the standard plane, do not scroll by
|
|
|
|
default. If scrolling is enabled, text output via the `*put*` family of
|
|
|
|
functions continues onto the next line when encountering the end of a row.
|
|
|
|
This does not apply to e.g. boxes or lines.
|
2020-04-06 05:15:20 +00:00
|
|
|
* `ncplane_putstr_yx()` now always returns the inverse of the number of
|
|
|
|
columns advanced on an error (it used to return the positive short count so
|
|
|
|
long as the error was due to plane geometry, not bad input).
|
2020-04-06 07:39:48 +00:00
|
|
|
* `ncplot_add_sample()` and `ncplot_set_sample()` have been changed to accept
|
|
|
|
a `uint64_t` rather than `int64_t`, since negative samples do not
|
|
|
|
currently make sense. Plots were made more accurate in general.
|
2020-04-08 09:39:41 +00:00
|
|
|
* `notcurses_term_dim_yx()` now accepts a `const struct notcurses*`.
|
|
|
|
* `notcurses_resize()` is no longer exported. It was never necessary to call
|
|
|
|
this in response to a resize, despite confusing documentation that could
|
|
|
|
have been read to suggest otherwise. If you're in a long block on input, and
|
|
|
|
get an `NCKEY_RESIZE`, just call `notcurses_refresh()` (which now calls
|
|
|
|
`notcurses_resize()` internally, as `notcurses_render()` always has).
|
2020-04-10 15:22:26 +00:00
|
|
|
* First Fedora packaging.
|
2020-04-06 00:13:37 +00:00
|
|
|
|
2020-04-18 04:09:14 +00:00
|
|
|
* 1.2.5 (2020-04-05)
|
2020-04-06 00:13:37 +00:00
|
|
|
* Add ncplot, with support for sliding-windowed horizontal histograms.
|
2020-04-06 05:15:20 +00:00
|
|
|
* gradient, polyfill, `ncplane_format()` and `ncplane_stain()` all now return
|
|
|
|
the number of cells written on success. Failure still sees -1 returned.
|
2020-04-06 00:13:37 +00:00
|
|
|
* `ncvisual_render()` now returns the number of cells emitted on success, as
|
2020-03-25 08:06:38 +00:00
|
|
|
opposed to 0. Failure still sees -1 returned.
|
2020-04-06 00:13:37 +00:00
|
|
|
* `ncvisual_render()` now interprets length parameters of -1 to mean "to the
|
2020-04-06 05:15:20 +00:00
|
|
|
end along this axis", and no longer interprets 0 to mean this. 0 now means
|
2020-03-25 08:06:38 +00:00
|
|
|
"a length of 0", resulting in a zero-area rendering.
|
2020-04-06 00:13:37 +00:00
|
|
|
* `notcurses_at_yx()` no longer accepts a `cell*` as its last parameter.
|
2020-04-06 05:15:20 +00:00
|
|
|
Instead, it accepts a `uint32_t*` and a `uint64_t*`, and writes the
|
|
|
|
attribute and channels to these parameters. This was done because the
|
|
|
|
`gcluster` field of the `cell*` was always set to 0, which was surprising
|
|
|
|
and a source of blunders. The EGC is returned via the `char*` return
|
|
|
|
value. https://github.com/dankamongmen/notcurses/issues/410
|
2020-03-25 08:06:38 +00:00
|
|
|
|
2020-04-18 04:09:14 +00:00
|
|
|
* 1.2.4 (2020-03-24)
|
2020-04-06 00:13:37 +00:00
|
|
|
* Add ncmultiselector
|
|
|
|
* Add `ncdirect_cursor_enable()` and `ncdirect_cursor_disable()`.
|