aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
6 daysfix: image placement when rotating (#493)HEADmastere5150
When rotating a partially shown image (i.e. image size * zoom > window size) the image is panned to top or left (if `win->w` or `win->h` is greatest, respectively). Seems to be due to unsignedness of `win->[wh]`, when taking the difference between them in `img_rotate` either `img->[xy]` ends up being close to `UINT_MAX` and the image is panned to top or left edge. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/493 Reviewed-by: NRK <nrk@disroot.org> Co-authored-by: e5150 <e5150@noreply.codeberg.org> Co-committed-by: e5150 <e5150@noreply.codeberg.org>
2024-02-17document Xresources application namespace explicitly (#488)fxdn
A decent amount of users have been confused by this. So make it more explicit to avoid confusion. Co-authored-by: NRK <nrk@disroot.org> Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/488 Reviewed-by: NRK <nrk@disroot.org> Co-authored-by: fxdn <fxdn@noreply.codeberg.org> Co-committed-by: fxdn <fxdn@noreply.codeberg.org>
2024-02-12free cache_tmpfile in tns_free (#485)NRK
doesn't really matter since the process is about to exit anyways, but makes it consistent with everything else. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/485
2024-02-09ci: adjust clang-tidy checksNRK
disable misc-include-cleaner, it nags about "directly" including things like "stdbool.h" instead of relying on "nsxiv.h" for it. also disable bugprone-switch-missing-default-case which nags about missing `default` switch cases.
2024-02-08README: fix typoNRK
2023-11-13move key-handler prompts to the right bar (#481)NRK
this makes it more consistent with e4fceab by moving the key-handler related messages to the right side as well. additionally this fixes a regression introduced by 3659361 where the left statusbar would remain at "Running key-handler..." if the image didn't change. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/481 Reviewed-by: eylles <eylles@noreply.codeberg.org>
2023-10-02ci: various fixes (#478)NRK
- "branches" option got removed, change to "when -> branches" - "pipeline" option got removed, change to "steps" - install codespell in a virtual-env since alpine complains otherwise
2023-10-01Release version 32v32NRK
2023-10-01inline img_multiframe_context_set()NRK
no longer needs to be a separate function now that the legacy loaders are removed. also remove a NOLINT comment and use `(void)var` to silence warning.
2023-10-01remove legacy multi-frame loadersNRK
this removes the legacy gif and webp loaders. moving forward multi-frame/animated images will be loaded by imlib2 itself. Closes: https://codeberg.org/nsxiv/nsxiv/issues/397
2023-10-01add option to update cache in a background processNRK
the cli flag is undocumented for now, since it's experimental. Closes: https://codeberg.org/nsxiv/nsxiv/issues/416 Closes: https://codeberg.org/nsxiv/nsxiv/pulls/425 Co-authored-by: explosion-mental <explosion0mental@gmail.com>
2023-10-01make thumbnail caching safer against concurrent writesNRK
by writing to a tmpfile first, and then renaming it to the desired target - multiple nsxiv instances writing thumbnail at the same time are guaranteed not to stomp over one another. rename() is guaranteed to be atomic by POSIX. however, it can fail with EXDEV if both the files don't reside in the same filesystem. and so we cannot make the tmpfile something like "/tmp/nsxiv-XXXXXX". instead, create the tmpfile inside the cache_dir to reduce chances of EXDEV occuring.
2023-09-30centralize script handling logic (#477)NRK
currently the logic of when to open/close script is scattered around the entire code-base which is both ugly and error-prone. this patch centralizes script handling by remembering the relevant information on each redraw and then comparing it with the previous information to figure out whether something changed or not. this also fixes a bug where scripts weren't being called in thumbnail mode when mouse was used for selecting a different image. Closes: https://codeberg.org/nsxiv/nsxiv/issues/475 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/477 Reviewed-by: eylles <eylles@noreply.codeberg.org>
2023-09-21fix: re-loading stale multi-frame imagesNRK
4b67816 only partially fixed this issue. because imlib2's cache may not have sub-second granularity, there still exists a time-frame while the `mtime` has not yet been updated but we might be trying to reload the image due to receiving an inotify event in which case imlib2 will end up giving us the old frame. imlib2 v1.12.0 adds a function that allows us to decache any frames associated with a filename. this allows us to invalidate the cache manually instead of relying on `mtime`. but if that's not available due to older imlib2, then forcefully reload the raw frames and decache them. this has the unfortunate cost that if `mtime` *was* updated properly then we'll end up loading that image twice. fixes: https://codeberg.org/nsxiv/nsxiv/issues/456
2023-09-21introduce img_free()NRK
this removes some repetitive code.
2023-09-21remove faulty assertionsNRK
these assertions did not hold true in practice when the underlying file ends up changing during load.
2023-08-31various README nits (#470)NRK
don't capitalize "berg" in "Codeberg" spelling. Codeberg's official sites does not seem to do so. switch from "GPLv2" to "GPL-2.0-or-later" according to the spdx short identifier: https://spdx.org/licenses/GPL-2.0-or-later.html explicitly mention that Imlib2 needs to be built with X11 support. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/470 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2023-08-28set autoreload timeout based on the latest event (#459)David Gowers
currently the autoreload feature of nsxiv is a bit unreliable because we try to load at the very first event we received. however, the writer might not be done writing and so we might try to load a truncated image (and fail). in the following ascii diagram, function S represents sleep and `+` sign represents writes by the writer. because we set the sleep (of 10ms) at the first event, subsequent writes by the writer doesn't influence our reload logic: S(10) load() nsxiv | | writer + + + + (done) time(ms): 00 05 10 15 after this patch, (assuming function T (re)sets a timeout), we will keep (re)setting a timeout on new events giving the writer more time to finish: T(10) T(10) T(10) T(10) load() nsxiv | | | | | writer + + + + (done) time(ms): 00 05 10 15 20 25 while this patch makes things significantly more robust, the problem here is inherently unsolvable since there's no way to tell whether the writer is done writing or not. for example, if user does something like `curl 'some.png' > test.png` then curl might stop for a second or two in the middle of writing due to internet issues - which will make nsxiv drop the image. this patch also increases the autoreload delay from 10ms to now 128ms instead to decrease chances of false failures. ref: https://github.com/0ion9/sxiv/commit/6ae2df6ed549c2cc119bd7d235b75154fc042d2d partially-fixes: https://codeberg.org/nsxiv/nsxiv/issues/456 commit-message-by: NRK Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/459 Reviewed-by: eylles <eylles@noreply.codeberg.org>
2023-08-22fix: brightness keybindings on manpage (#467)padv
Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/467 Reviewed-by: NRK <nrk@disroot.org> Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org> Co-authored-by: padv <pascal.devuyst@gmail.com> Co-committed-by: padv <pascal.devuyst@gmail.com>
2023-07-16config.mk: do not explicitly set CC (#455)NRK
1. `c99` doesn't exist on openbsd 2. `c99` behaves weirdly on macos (doesn't support -Wall) since make will already set CC (required by POSIX if the implementation supports C, see `man 1p make`) to something appropriate (or it might be set in the environment) go ahead and remove explicitly setting it on our end. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/455 Reviewed-by: TAAPArthur <taaparthur@noreply.codeberg.org>
2023-07-08add some upgrade comments (#457)NRK
these document improvements and/or removal of unnecessary code for when we will require a higher minimum version of Imlib2. all the comments have been prefixed with "UPGRADE: " for easy grepping. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/457 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2023-07-08add compiled features into --version output (#462)NRK
a lot of application which allow selecting features at build time seem to output the build config with `--version` or similar (e.g ffmpeg). aside from giving the user information about the feature set the binary was compiled with (in case the user didn't compile it themselves, e.g on a binary distro) it can also (possibly) help when submitting bug reports. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/462 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2023-06-30config.mk: update openbsd configuration (#453)NRK
based on the openbsd port: https://github.com/openbsd/ports/blob/cf3cdaf09214bf85907dc9147bab7da77e0281d8/graphics/nsxiv/Makefile Tested-by: Seninha Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/453
2023-06-23config.h: allow all values to be NULLNRK
might as well make things consistent instead of having certain values that can be NULL and certain that cannot. some of the default values are still kept in config.h for example reasons.
2023-06-23make xresources class name configurable in config.hexplosion-mental
2023-06-15CI: misc cleanups + faster analysis (#449)NRK
* switch to git ls-files to avoid picking up any other local .c files * enable assertions during static analysis since we used some assertions to disable/silence certain warnings. * update TCC commit hash to a more recent one * parallelize static analysis cppcheck already has -j argument to parallelize it's analysis and provide results faster, clang-tidy unfortunately doesn't. so use xargs -P to archive parallel execution. on my system this brings down the analysis time from ~27s to ~5s.
2023-05-28update documentation (#448)NRK
the fedora copr repo is no longer being updated since the maintainer of it, mamg22, no longer uses nsxiv in his daily setup (and thus stopped contributing to nsxiv as well). he has requested the repo and his email to be removed from the project. so go ahead and honor that request. also take this as an opportunity to remove some long inactive maintainers from the CURRENT MAINTAINERS section of the manpage. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/448 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2023-05-26make assertions opt-in (#447)NRK
slight addendum to 657080a7e55843e351fa6ce41e4ce315eab62b67 instead of disabling asserts by adding -DNDEBUG to config.mk, this disables asserts by default in the source code itself. this way, if someone compiles with `make CFLAGS="-O3 -march=native"` without knowing about asserts/-DNDEBUG then he won't accidentally get a build with assertions in it. this basically makes the assertions opt-in, if someone wants it, he'll need to *explicitly* set `-DDEBUG` to get it. so that it's not possible to accidentally end up with assertions enabled. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/447 Reviewed-by: TAAPArthur <taaparthur@noreply.codeberg.org>
2023-05-23set a default delay if delay is 0 (#445)NRK
gif spec [0] doesn't mention what to do when "Delay Time" is 0. apng spec [1] states: | If the the value of the numerator is 0 the decoder should render the | next frame as quickly as possible, though viewers may impose a | reasonable lower bound. webp spec [2]: | the interpretation of frame duration of 0 (and often <= 10) is | implementation defined. so it seems that it's safe to set a default delay for 0 delay frames, which is what the older gif and webp loaders were already doing. do the same for the imlib2 multi-frame loader as well. [0]: https://www.w3.org/Graphics/GIF/spec-gif89a.txt [1]: https://wiki.mozilla.org/APNG_Specification [2]: https://developers.google.com/speed/webp/docs/riff_container#animation Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/445 Reviewed-by: eylles <eylles@noreply.codeberg.org>
2023-05-23move load/cache messages to right side (#446)a1337xyz
this avoids overwriting the left side bar, which might contain more important information, for e.g output of the thumb-info script. Co-authored-by: A1337Xyz <blindwizard@tutanota.com> Co-authored-by: NRK <nrk@disroot.org> Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/446 Reviewed-by: eylles <eylles@noreply.codeberg.org> Reviewed-by: NRK <nrk@disroot.org> Co-authored-by: a1337xyz <a1337xyz@noreply.codeberg.org> Co-committed-by: a1337xyz <a1337xyz@noreply.codeberg.org>
2023-05-19fix: memory leak in `win_draw_bar` (#444)blk_750
Closes: https://codeberg.org/nsxiv/nsxiv/issues/410 Co-authored-by: blk_750 <blk_750@protonmail.com> Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/444 Reviewed-by: NRK <nrk@disroot.org> Co-authored-by: blk_750 <blk_750@noreply.codeberg.org> Co-committed-by: blk_750 <blk_750@noreply.codeberg.org>
2023-05-18fix: calling imlib2 with color modifier being NULL (#440)NRK
the multiframe loaders sets the color modifier to NULL but doesn't restore it before returning. this results in a imlib2 developer warning if you try to change brightness/contrast on a multiframe image (which doesn't have alpha). ensure that the color modifier is restored before returning under all paths. Reported-by: Madhu Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/440 Reviewed-by: eylles <eylles@noreply.codeberg.org>
2023-05-18fix: loading old frames due to multi-frame cache (#437)NRK
by default imlib2 doesn't check the file's timestamp to avoid disk activity when loading from cache. however, this ends up breaking our autoreload functionality on multi-frame images. the reason why single frame images weren't broken was because `img_load()` calls `imlib_image_set_changes_on_disk()`, which tells imlib2 to check the timestamp before loading from cache. do the same thing for the multi-frame loader as well. additionally add a comment to img_load() explaining what's going on. Closes: https://codeberg.org/nsxiv/nsxiv/issues/436 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/437 Reviewed-by: eylles <eylles@noreply.codeberg.org>
2023-05-13[ci]: silence false positive warningNRK
clang-tidy currently flags the following: util.c:57:8: error: 'ptr' may be set to null if 'realloc' fails, which may result in a leak of the original buffer [bugprone-suspicious-realloc-usage,-warnings-as-errors] ptr = realloc(ptr, size); the analysis here is correct, but if realloc fails, we simply exit so there's no real "leak". moreover this check is not very useful for nsxiv's codebase because we do not use naked realloc(), instead we use the erealloc wrapper that exits on failure. so just disable the warning entirely instead of changing the source code to silence the false positive.
2023-05-13README: clarify dependency on giflib and libwebpNRK
this makes it clear that giflib and libwebp are unused if imlib2 version is sufficient for multi-frame decoding. ref: https://codeberg.org/nsxiv/nsxiv/issues/442#issuecomment-912175
2023-05-09config.mk: default to `-O2` and `-DNDEBUG` (#435)NRK
assertions are for debugging purposes, and so shouldn't be enabled for "release" builds. disable it by default by using `-DNDEBUG`. `-O2` on gcc/clang will result it slightly better binary. on tcc it'll be ignored. and since -O is specified by POSIX there shouldn't be any portability concern. additionally add a (commented out) recommended debug build for gcc/clang with address and undefined sanitizers turned on. Closes: https://codeberg.org/nsxiv/nsxiv/issues/424 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/435 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org> Reviewed-by: eylles <eylles@noreply.codeberg.org>
2023-04-14add a pick quit keybind (#432)eylles
The last time[0] this was discussed, no-one was against it but no-one was confident in it either and so it was added to nsxiv-extra as a patch. But now that enough time has passed, it seems like there's a pretty high demand for something like this because there's plenty of use-cases that use nsxiv as a "picker" where it's meant to quickly pick a single file. And so add this as a convenient default key-bind. [0]: https://codeberg.org/nsxiv/nsxiv-record/pulls/42 Co-authored-by: eylles <ed.ylles1997@gmail.com> Co-authored-by: NRK <nrk@disroot.org> Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/432 Reviewed-by: NRK <nrk@disroot.org> Co-authored-by: eylles <eylles@noreply.codeberg.org> Co-committed-by: eylles <eylles@noreply.codeberg.org>
2023-04-10editorconfig: only apply to .c and .h files (#433)NRK
otherwise, it ends up applying to the manpage and git commit messages too. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/433 Reviewed-by: eylles <eylles@noreply.codeberg.org> Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2023-03-17fix a typpo in CHANGELOG.mdNRK
2023-03-17document handling of empty X resources valuesNRK
since 5cab2fb we reject empty X resources value to support use-cases like this: https://codeberg.org/nsxiv/nsxiv/issues/339 this issue was also bought up by GRFreire in: https://codeberg.org/nsxiv/nsxiv-record/pulls/115#issuecomment-474831 this suggests that this is a use-case that a decent amount of users might be interested in. so document the behavior so it's more easily visible.
2023-03-11etc changes related to code-style docsNRK
* Add a "Code Style" section in CONTRIBUTING * Move .clang-format to etc/ * Add a short comment on clang-format and editorconfig file
2023-03-11apply clang-formatNRK
minus the bogus changes Co-authored-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
2023-03-11make some changes prepping for clang-formatNRK
Co-authored-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
2023-03-11add clang-formatBerke Kocaoğlu
Co-authored-by: NRK <nrk@disroot.org>
2023-03-04fix: thumbnail leak when removing the last file (#423)NRK
bf6c062 tried to fixed the thumbnail leak, but it was done inside a `if (n+1 < filecnt)` branch, meaning the thumbnail was still leaking away whenever the last file was removed. we need to unload the thumb regardless of whether it's in the middle or not. this bug was caught due to the recent `assert`s that were added in 01f3cf2. Closes: https://codeberg.org/nsxiv/nsxiv/issues/422 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/423 Reviewed-by: eylles <eylles@noreply.codeberg.org> Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2023-01-28Release version 31v31NRK
Co-authored-by: Berke Kocaoğlu <kberke@metu.edu.tr>
2023-01-28README: update upstream sxiv linkNRK
2023-01-28manpage: update MAINTAINERS sectionNRK
removes a couple maintainers who have never been active in the development. there are a couple other maintainers have not been active in a while, but was somewhat active in the past. so keep their names in it (for now at least). also re-arrange the entires a bit based on activity.
2023-01-28manpage: remove special casing CONTRIBUTORSNRK
this section was added almost 10 years ago (see commit 60f84190f) back when sxiv was pretty new and didn't have many contributors. the situation has obviously changed now, especially with `nsxiv` we have a fair amount of contributors now. so it makes no sense to special case a couple of them.
2023-01-28remove deprecated -T flagNRK