aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
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>
2022-09-28improve error message on bad cli argument (#371)NRK
currently the error messages have the shortopt hardcoded in them, even when the user actually entered a longopt: $ ./nsxiv --framerate v nsxiv: Invalid argument for option -A: v and as far as I see, there's no way to *reliably* tell weather we're processing a longopt or a shortopt. perhaps we can do some shenanigangs with `optind` but that seems finicky at best. and it seems like other coreutils which support longopt has similar issues: $ xargs --max-procs=z xargs: invalid number "z" for -P option utils like `grep` and `head` seems to work-around it by not mentioning the flag: $ head --lines=z head: invalid number of lines: ‘z’ $ grep --max-count=l grep: invalid max count this patch does the same thing as `grep/head` and omits the flag from the error message. Closes: https://codeberg.org/nsxiv/nsxiv/issues/368 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/371 Reviewed-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
2022-09-14fix potential truncation of cli arguments (#367)NRK
strtol() returns a `long`, but we're storing the result in an `int` which might end up getting truncated. change `n` to `long` and guard against >INT_MAX arguments in cases where it matters. use a float for storing argument of `-S` change `opt.slideshow` to `unsigned` similar to `img.ss.delay` Co-authored-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr> Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/367 Reviewed-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr> Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2022-09-10rename: aa -> anti_aliasNRK
2022-09-10allow disabling anti-aliasing via cli flagNRK
simply running nsxiv with `--anti-alias` will enable anti-aliasing, and running it with `--anti-alias=no` will disable it. the cli flag will overwrite the config.h default. Closes: https://codeberg.org/nsxiv/nsxiv/issues/349
2022-09-05remove some hardcoded "nsxiv", use progname insteadNRK
2022-09-05don't assume positive argcNRK
handle a rare, but possible case of argc being 0, in which case argv[0] would be null. note that both POSIX and ISO C standard allow argc to be 0 and in practice this can be triggered via calling `exec(3)` family of functions with NULL as the first `argv`.
2022-09-05[ci]: disable noisy checks (#365)NRK
* disable `cert-err33-c` and `readability-identifier-length` check which causes warnings on clang-tidy v14. * disable all "readability" checks by default, instead just opt-into the useful ones (such as duplicate include). Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/365 Reviewed-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
2022-08-19Misc docs cleanup (#362)NRK
* link to online man-page * rename: "N-R-K" -> "NRK" * separate multiple links with a comma. otherwise the links get messed up due to `[] []` being valid syntax for reference style links with the 2nd `[]` serving as `id`. * prefer codeberg links over github ones Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/362 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2022-08-16code-style: don't indent switch cases (#358)explosion-mental
The suckless coding style [^0] and the linux coding style [^1] both recommends not indenting switch cases. And it helps out people with lower resolution monitors. [^0]: https://suckless.org/coding_style/ [^1]: https://www.kernel.org/doc/html/v5.10/process/coding-style.html#indentation Co-authored-by: explosion-mental <explosion0mental@gmail.com> Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/358 Reviewed-by: NRK <nrk@disroot.org> Co-authored-by: explosion-mental <explosion-mental@noreply.codeberg.org> Co-committed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2022-08-16code-style: various cleanups (#356)NRK
* run_key_handler: make the logic easier to follow * remove timeout_t the typedef is not needed. inline the declaration similar to the other static structs. * simplify estrdup reuse emalloc, instead of calling malloc and null-checking. * win_clear: initialize `e` right away * process_bindings: explicitly check against NULL most pointer checks in the codebase do explicit check. * use a named constant instead of magic number also changes the padding from 3 to 4 bytes according to [0]. but i couldn't find any situtation where this mattered, so perhaps the current padding is enough. but doesn't hurt adding one more byte. [0]: https://nullprogram.com/blog/2017/10/06/ Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/356 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2022-08-16add support for long-opts (#332)NRK
Uses [optparse] to add support for long-opts. optparse is posix compliant with getopt(3) and thus would be backwards compatible. It does not have any dependency (not even the c standard library!) and is C89 compatible and thus fits our current code-style. [optparse]: https://github.com/skeeto/optparse Note that we're using a couple `pragma`-s to silence some harmless warnings. This should be portable because these pragma-s don't change the behavior of the program. Furthermore, C standard mandates that unknown pragma's should be ignored by the compiler and thus would not result in build failure on compilers which do not recognize them. Closes: https://codeberg.org/nsxiv/nsxiv/issues/328 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/332 Reviewed-by: eylles <eylles@noreply.codeberg.org>
2022-08-11[ci]: build with macos on githubNRK
should help catch *BSD compilation issues.
2022-08-11fix: build failure when _SC_PHYS_PAGES is not definedNRK
_SC_PHYS_PAGES isn't POSIX and might not be defined. in such case, just return back `CACHE_SIZE_FALLBACK`. NOTE: POSIX says the `names` in `sysconf()` are "symbolic constants" not necessarily macros. So we might end up returning the fallback in some cases where `_SC_PHYS_PAGES` *was* available, but not defined as a macro. which is not ideal, but nothing fatal. in practice, this shouldn't be an issue since most systems seems to define them to be macros, i've checked Glibc, Musl, OpenBSD, FreeBSD and Haiku. also add a (useful) comment on `config.h` describing the effect higher cache size has. Closes: https://codeberg.org/nsxiv/nsxiv/issues/354
2022-08-09Move uncritical files into `etc/` (#350)NRK
This is mainly just to reduce the amount of files in the project root. The criteria of what gets into `etc/` are the following: * The file should not be necessary for building nsxiv. This excludes the `icon/*` stuff since that's needed by `window.c`. * The file shouldn't have any valid reason to stay in the project root. This excludes things like `README.md`, `.gitignore` etc. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/350 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2022-08-08fix: statusbar not updating when switching bar (#353)NRK
Closes: https://codeberg.org/nsxiv/nsxiv/issues/352 Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/353 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>
2022-08-02README: fix broken link (#351)Nan
Fixes a link that previously 404'd Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/351 Reviewed-by: NRK <nrk@disroot.org> Co-authored-by: Nan <nan42@waifu.club> Co-committed-by: Nan <nan42@waifu.club>
2022-07-30autoreload: simplify and cleanup (#342)NRK
the current code is quite hacky and complex as it mixes multiple pointers. all of this complexity is unnecessary. drop it by introducing an explicit scratch buffer instead of implicitly abusing `arl->filename` as one. this also reduces some unnecessary allocation overhead. additionally, the argument to arl_setup must be the result of `realpath(3)` (as commented in `nsxiv.h`). instead of commenting it, assert it. and lastly, rename `arl_setup` to `arl_add` since it's not doing any "setup" but rather *adding* a file to watch. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/342 Reviewed-by: explosion-mental <explosion-mental@noreply.codeberg.org>