aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
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
2023-01-28update copyright yearNRK
2023-01-28use assertions instead of ignoring bogus arguments (#406)NRK
instead of silently ignoring bogus arguments (i.e programming errors), which can make debugging harder, it's better to assert them so that they get caught faster in debug builds. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/406 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2023-01-28img_t: rename alpha -> alpha_layer for consistencyNRK
2023-01-28add cli flag --alpha-layerNRK
now that we have long-opts, we don't have to worry about exhausting the alphabet list for short-opts. so adding a cli flag to set/unset the checker background makes sense. ref: https://codeberg.org/nsxiv/nsxiv/issues/404
2023-01-26don't spoil errno in sig handler (#411)NRK
reported by thread-sanitizer. the sighandler's spoiled `errno` was causing xlib to incorrectly assume some error occurred and thus causing the crash described in #391. to reproduce: * Open an nsxiv window * Open another terminal and run the following: var=$(pidof nsxiv); while :; do kill -s SIGCHLD $var; done putting the `pid` into a variable is actually important because doing `$(pidof nsxiv)` inside the loop makes it really hard to reproduce the issue, I presume because of the extra process invocation it was sending less SIGCHLD and so putting it into a variable avoids that overhead and is able to generate more signals. instead of reaping the zombies manually, we now pass the `SA_NOCLDSTOP|SA_NOCLDWAIT` for SIGCHLD instead so that the zombies are reaped automatically. Closes: https://codeberg.org/nsxiv/nsxiv/issues/391 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/411 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2023-01-12README: fix rendering on codeberg (#402)NRK
looks like some update to the markdown parser at codeberg broke our readme. just use a simple `*` instead (escaped by `\` to be safe) Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/402
2023-01-12[ci]: fix things (#400)NRK
for the spellcheck issue, the solution was to just bypass the system package manager and use pip. and the macos workaround is taken from here: https://github.com/actions/setup-python/issues/577 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/400 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2023-01-09read win-title in non-blocking manner (#314)NRK
Closes: https://codeberg.org/nsxiv/nsxiv/issues/313 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/314 Reviewed-by: eylles <eylles@noreply.codeberg.org>
2023-01-09spawn(): search $PATH as wellNRK
makes this function more useful for other people writing patches such as this: https://codeberg.org/nsxiv/nsxiv-extra/src/branch/master/patches/dmenu-search
2023-01-09spawn(): improve performance and simplify APINRK
posix_spawn() is designed especially for this purpose, and thus it's much more lightweight and efficient than manually fork/dup/exec-ing. on my system, it improves the performance of spawn() by about 10x. given that we make frequent calls to potentially multiple scripts, the increased efficiency will add up overtime. using posix_spawn() also simplifies the logic quite a bit, despite the very verbose function names. however it does make cleanup a bit more complicated. this patch uses the linux kernel style cleanup strategy [0] (which I'm personally not a huge fan of, but it fits this situation quite nicely) with a "stack-like" unwinding via `goto`-s. additionally simplify the spawn() API by taking in {read,write}fd pointers and returning the pid instead of using some custom struct. this coincidently also fixes #299 [0]: https://www.kernel.org/doc/html/v4.10/process/coding-style.html?highlight=goto#centralized-exiting-of-functions
2023-01-08add support for multi-frame images via imlib2 (#373)NRK
this will be a massive change compared to the usual stuff. however the gains will be worth it: * we gain lots of additional animated image support. * and we'll gain _even_ more format support as imlib2 adds them, without needing any change in our code-base. * about ~300 LoC will be purged once we remove our internal gif and webp loader. as for when to remove the internal loaders, a good time might be when debian upgrades their imlib2, currently it seems to be at v1.7.5, which doesn't support animated images. as of now, nsxiv will continue to build with the internal gif/webp loaders (assuming they were enabled in config.mk) if imlib2 version is below 1.8.0 and will print out a deprecation notice. and if imlib2 version supports multi-frame then it will simply ignore the internal loaders and use the imlib2 one. in other words, users shouldn't need to do anything on their side. everything that previously functioned will continue to function regardless of the user's imlib2 version (though they might see the annoying deprecation notice if the imlib2 version doesn't support multi-frame images). known issue: * image loading performance can be noticeably worse in imlib2 versions below 1.9.0 Closes: https://codeberg.org/nsxiv/nsxiv/issues/301 Closes: https://codeberg.org/nsxiv/nsxiv/issues/300 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/373 Reviewed-by: TAAPArthur <taaparthur@noreply.codeberg.org>
2022-12-22add brightness and contrast (#396)Berke Kocaoğlu
* Imlib2 supports modifying gamma, brightness and contrast directly while sxiv only supports gamma. Makes sense to extend it to brightness and contrast as well. * Since color corrections need to be aware of each other, they have been refactored into one centralized function. * This also makes the code more hackable as it makes it easier to add more color correction functions without them interfering with each other. Co-authored-by: 0ion9 <finticemo@gmail.com> Co-authored-by: NRK <nrk@disroot.org> Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/396 Reviewed-by: NRK <nrk@disroot.org> Reviewed-by: TAAPArthur <taaparthur@noreply.codeberg.org> Co-authored-by: Berke Kocaoğlu <kberke@metu.edu.tr> Co-committed-by: Berke Kocaoğlu <kberke@metu.edu.tr>
2022-12-02[ci]: make it easy to run analysis locally (#395)NRK
allows for developers to more easily run the analysis locally before opening a pull request if they wish. also disables a noisy warning (bugprone-assignment-in-if-condition) producing too many false positives. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/395 Reviewed-by: Berke Kocaoğlu <kberke@metu.edu.tr> Co-authored-by: NRK <nrk@disroot.org> Co-committed-by: NRK <nrk@disroot.org>
2022-11-05compress duplicated logic into a function (#384)NRK
Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/384 Reviewed-by: TAAPArthur <taaparthur@noreply.codeberg.org>
2022-10-30accept directory via stdin (-i) (#383)NRK
this basically just extracts the logic that was previously inside `main()` into a seperate function `add_entry()` so that it can be used for accepting entries form stdin as well. Closes: https://codeberg.org/nsxiv/nsxiv/issues/382 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/383 Reviewed-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
2022-10-25fix: wrong length on animated webp (#381)NRK
the length member needed to be zero-ed before we started decoding. this was causing unintended behavior of playing an animated webp longer than it should under slideshow mode. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/381 Reviewed-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
2022-10-21img_open: explicitly decode image data immediately (#380)NRK
the way `imlib_load_image()` works, is that it only does a lightweight signature/metadata check. it doesn't actually decode the image. which means that a file that has valid metadata but invalid content would get loaded successfully. `imlib_image_get_data_for_reading_only()` basically forces imlib to decode the data, and thus reveal any malformed images so we can reject it (see commit f0266187). however, this is a spurious way of achieving the goal at hand. imlib2 already offers an `_immediately` variant which decodes the data immediately. so just use that instead of spuriously using the "get_data" function to force a decode. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/380 Reviewed-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
2022-10-19code-style: misc changes (#374)NRK
* ensure static variables comes after non-static ones * remove depreciated DATA32 type * prefer `sizeof(expression)` over `sizeof(Type)`. * silence a -Wsign warning * {gif,webp} loader: use a pointer to reduce code-noise * gif loader: allocate in one place Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/374 Reviewed-by: TAAPArthur <taaparthur@noreply.codeberg.org>
2022-10-07[ci]: try building all combination with tcc (#338)NRK
this will hopefully catch issues like [337] in the future. not using gcc and/or clang since we have 5 build options right now, which means 2^5 = 32 different combination. using gcc/clang would take too much resources and time; meanwhile tcc is lightning fast. [337]: https://codeberg.org/nsxiv/nsxiv/pulls/337 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/338 Reviewed-by: eylles <eylles@noreply.codeberg.org>