aboutsummaryrefslogtreecommitdiff
path: root/main.c
Commit message (Collapse)AuthorAgeFilesLines
* nout patchHEADmastersinanmohd2022-07-151-0/+2
|
* sort and group includesNRK2022-06-281-9/+10
| | | | | | | | | | | | | * includes are sorted alphabetically * their grouping and layout is the following: - nsxiv.h will be the first include - followed by any internal headers (e.g "commands.h" "config.h") - followed by system headers (<stdlib.h> etc) - followed by third party headers (X.h libwebp etc) * also add `llvm-include-order` check to clang-tidy so that it can catch unsorted includes during CI.
* code-style: cleanup includesNRK2022-06-281-0/+10
| | | | | | | | * rm unused include <sys/types.h> * move <sys/time.h> to main.c, it's the only file that needs it. * move TV_* macros to main.c * let *.c files explicitly include what they need instead of including them at nsxiv.h
* fix: don't use reserved identifiersNRK2022-06-251-1/+1
| | | | identifiers beginning with an underscore is reserved by the C standard.
* fix: potentially printing wrong error message (#321)NRK2022-06-251-1/+1
| | | | | | | | | | | | it's possible for the close() calls to override the errno resulting in incorrect error message being printed. call error() immediately to avoid such possibilities. also refactor a couple conditions to avoid doing multiple checks. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/321 Reviewed-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
* code-style: simplify window title related codeNRK2022-06-021-22/+21
| | | | | | | | | instead of dancing around with some `init` parameter, directly give `win_set_title()` what it needs. `get_win_title()` now also does *just* what the name says. this simplifies things quite a bit and the functions now do what their name implies more closely instead of doing some `init` dance internally.
* reduce calls to win-titleNRK2022-06-021-1/+7
| | | | | | | | | rather than calling the script unconditionally per redraw, we now have a `title_dirty` flag and keep track of when any of the relavent information changes. Co-authored-by: Arthur Williams <taaparthur@gmail.com> Partially fixes: https://github.com/nsxiv/nsxiv/issues/258
* fix: broken slideshow if redraw takes too long (#282)N-R-K2022-05-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | currently the way check_timeout() is implemented, animate has higher priority than slideshow. so if doing a redraw takes longer than the frame delay of the animated image then it's going to continuously keep animating and never reliably get to slideshow. this issue can occur if the animated image has too fast of a delay or if nsxiv is being run on a slow system where doing redraw takes too long. the issue can be emulated by artificially slowing down img_render by sticking a sleep in there. diff --git a/main.c b/main.c index 5dc52d4..0580011 100644 --- a/main.c +++ b/main.c @@ -441,6 +441,7 @@ void redraw(void) if (mode == MODE_IMAGE) { img_render(&img); + nanosleep(&(struct timespec){0, 62000000}, NULL); /* 62ms */ if (img.ss.on) { t = img.ss.delay * 100; if (img.multi.cnt > 0 && img.multi.animate) make it so that slideshow has higher priority than animate to fix the issue. Closes: https://github.com/nsxiv/nsxiv/issues/281
* fix: broken statusbar after key-handler cancellationNRK2022-05-191-25/+6
| | | | | | | | | | | | | | | | | | | to reproduce: 1. have an image-info script 2. invoke the key-handler 3. cancle invocation by pressing `escape` at this point, the statusbar ends up being empty. the regression seems to be caused by 6922d5d (changing select to poll), unsure why that is. in any case, this simplifies read_info quite a bit and solves the regression as well. in short: * read straight into the statusbar buffer * if read succeeds, make sure buffer is null terminated and replace any newline with space * close the script
* fix: don't override statusbar if info script doesn't existNRK2022-05-191-1/+1
| | | | | | | this happens when the keyhandler is invoked while viewing an animated image. if {image,thumb}-info scripts exists, everything works as expected. but if they don't, then update_info will override the statusbar.
* fix: broken thumbnail statusbar after running keyhandlerNRK2022-05-191-2/+2
|
* check_timeouts: avoid unnecessary conversions (#273)N-R-K2022-05-121-4/+4
| | | | | | | | before we were using select, which expected `struct timeval` as arg. so we needed to do ms -> timeval conversions. but now since we're using poll, which accepts milisec as arg, there's no need to do ms -> timeval -> ms. instead have check_timeouts directly return ms.
* Declare every extern function/variable in `nsxiv.h` (#268)N-R-K2022-05-031-15/+10
| | | | | | | | with a couple exceptions as they cause too many -Wshadow warnings. also moves the `extcmd_t` typedef on top for cosmetic purposes. also enable `-Wmissing-prototypes` in the ci
* Add thumb-info (#265)N-R-K2022-05-031-12/+17
| | | | Closes: https://github.com/nsxiv/nsxiv/issues/88 Closes: https://github.com/nsxiv/nsxiv/pull/253
* replace select() with poll() (#270)N-R-K2022-04-281-18/+13
| | | | | | | | | | usage of select (3) in modern programs is typically discouraged. this simply replaces the select call with poll (3) instead. and since poll conveniently ignores negative fds, this also reduces needs for some special casing. this also handles error if they occur, while old implementation didn't. other than the error handling, no change in functionality should occur.
* fix: thumbnail memory leak when removing file (#247)N-R-K2022-03-271-0/+4
|
* fix: close the file descriptor in get_win_title() (#245)N-R-K2022-03-171-0/+1
| | | | this would eventually end up opening too many fds and erroring out with "too many open files".
* always initialize window titleNRK2022-03-021-16/+22
| | | | | before if exec/win-title didn't exist then window title wouldn't be set. this patch makes it so window title is always set to something.
* code-style: slight cleanupsNRK2022-03-021-1/+1
| | | | | | * put TOP_STATUSBAR under the HAVE_LIBFONTS guard * change get_win_title param to take unsigned char ptr * init UTF8_STRING like other atoms
* use win-title script for customizing window title (#213)N-R-K2022-02-231-4/+34
| | | | | this removes the cli flag `-T` as well as related config.h options. Co-authored-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
* Add reuseable abstraction over fork/exec/dup2 (#211)N-R-K2022-02-201-45/+24
|
* declare internal variables as staticNRK2022-02-171-4/+4
|
* code-style: prefer calloc over malloc+memsetNRK2022-02-171-2/+1
|
* update copyright yearNRK2022-02-131-1/+1
|
* make thumbnail bindings configureable via config.h (#167)N-R-K2022-01-101-52/+9
| | | | | | | | | | | | | | this allows for configuring thumbnail mode mouse bindings similar to image mode bindings. however we can't put the thumbnails bindings into the existing buttons[] array due to fallthrough. For example M3 would switch mode and then end up selecting an image. which is why thumbnail bindings have been put into it's own array `buttons_tns[]` and `buttons[]` has been renamed to `buttons_img[]` for consistency. Closes: https://github.com/nsxiv/nsxiv/issues/131
* fix -Wshadow related warningsNRK2022-01-061-6/+6
| | | | | | | | fixes all -Wshadow related warnings (on gcc). this would allow us to use `-Wshadow` in github workflow (https://github.com/nsxiv/nsxiv/pull/195). i've thought about adding `-Wshadow` to our Makefile as well, but decided against it to keep the Makefile CFLAGS barebore/minimal.
* fix: reset statusbar after failed keyhandler (#191)N-R-K2022-01-031-8/+10
| | | | | | | | | | | | currently if the keyhandler invocation fails, for example due to it not being present, the statusbar does not reset and stays on "getting keyhandler input" message. now the return value from run_key_handler() is used to determine if the function was successful or not. and if the function failed, we call handle_key_handler() with false which resets the statusbar. we also no longer call redraw() within run_key_handler() and instead assign it's return value to dirty which does a redraw if true.
* fix: animation slowdown when zoomed in (#200)N-R-K2022-01-031-1/+1
| | | | | | | | | | | | rendering is a pretty expensive operation, especially when scaling with anti-aliasing. by waiting for the image to render before setting timeout, the actual timeout ends up being (render time + actual delay). this pretty much fixes the slowdown entirely on all the images i've tested. it should also improve things noticeably even in cases where the delay between frames is shorter than how fast we can render. although on such images, the issue may not be fixed entirely. Closes: https://github.com/nsxiv/nsxiv/issues/70
* specify func argument and related cleanup (#183)N-R-K2021-12-191-2/+2
| | | | | | | | | | | | * specifies the function argument type in commands.h compared to leaving it unspecified. all the functions in cmd_t must have arg_t as it's argument. * changes to commands.h will now trigger a rebuild - this restores old behavior prior to 12efa0e * cg_quit now uses it's argument as exit status * DestroyNotify invokes cg_quit rather than calling exit directly. * Explicitly pass EXIT_SUCCESS to cgquit in keybinding Co-authored-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
* fix: send implicit_mod to process_bindings (#176)N-R-K2021-12-011-5/+5
| | | | | | | | | | | | * fix: send implicit_mod to process_bindings this solves the edge case where someone might have `ShiftMask + A` in their keybindings compared to a plain `A`. Closes: https://github.com/nsxiv/nsxiv/pull/166#issuecomment-978853136 * code-style: smuggle small style fix in win_draw_bar now mimics autoreload_nop.c functions
* switch back to whitelisting modifers (#150)N-R-K2021-11-241-1/+1
| | | | | | | | | | | | | * Revert "Allow any set of modifiers to be used in keybindings" this keeps things equal with sxiv while giving users possibility to customize USED_MODMASK if they wish. This reverts commit 3234b0e521cca006a94cb135a88d146122d7f66d. Closes: https://github.com/nsxiv/nsxiv/issues/149 Closes: https://github.com/nsxiv/nsxiv/issues/123 Co-authored-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
* rename: keyhandler_abort -> KEYHANDLER_ABORT (#172)N-R-K2021-11-241-2/+2
| | | | | | | | with the exception of arrays, all other var names in config.h are in ALL CAPS. since keyhandler_abort is an unreleased feature, it should be okay to rename it for consistency. though.. in the future we should be more careful about naming when adding new vars to config.h (or the codebase in general.)
* mark functions and vars as static (#146)N-R-K2021-11-201-15/+15
| | | | | | | | | | | | | | | | | | | | | | | | | the goal here to mark functions and variables not used outside the translation unit as static. main reason for this is cleanliness. however as a side-effect this can help compilers optimize better as it now has guarantee that a certain function won't be called outside of that translation unit. one other side-effect of this is that accessing these vars/function from config.h is now different. if one wants to access a static var/func from different translation unit in config.h, he would have to create a wrapper function under the right ifdef. for static functions one would also need to forward declare it. here's a dummy example of accessing the function `run_key_handler` from config.h under _MAPPINGS_CONFIG ``` static void run_key_handler(const char *, unsigned); bool send_with_ctrl(arg_t key) { run_key_handler(XKeysymToString(key), ControlMask); return false; } ```
* set env var NSXIV_USING_NULL for key-handler and update docsNRK2021-11-191-0/+1
| | | | Co-authored-by: Berke Kocaoğlu <berke.kocaoglu@metu.edu.tr>
* apply -0 to stdin/-i as wellNRK2021-11-191-5/+9
| | | | | | | | | | | | while i was initially against this since it can be done via `xargs -0`. the problem with this approach is that there's a limit to how many args a command can recieve, leading to problem like this [0] when opening large (1k~) amount of images. there's no limit on how big stdin can be, so being able to read a null-separated list from stdin doesn't have this problem. [0]: https://github.com/ranger/ranger/pull/2307#issuecomment-818683515
* use dedicated function to process key/button bindings (#166)N-R-K2021-11-191-22/+22
| | | Co-authored-by: Arthur Williams <taaparthur@gmail.com>
* make width of navigation area configurable (#155)LuXu2021-11-041-4/+15
| | | | | | | | | this allows users to configure navigation width from config.h. it also allows disabling the navigation function entirely by using a 0 width. one extra functionality this adds is being able to define an absolute width (in pixels) instead of just percentage via `NAV_IS_REL`. Co-authored-by: NRK <nrk@disroot.org>
* -0 sends NULL separated file-list to key-handlerNRK2021-10-291-1/+1
| | | | | | | | with this change `-0` is turned into a more generic switch which can be used to send NULL-separated file-list to the key-handler as well. this also means `-0` no longer implicitly enables `-o` Closes: https://github.com/nsxiv/nsxiv/issues/140
* code-style: general cleanups (#137)N-R-K2021-10-291-10/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | * tns_clean_cache: remove unused function arg * remove malloc casting * improve consistency use sizeof(T) at the end * avoid comparing integers of different signedness * use Window type for embed and parent * remove unnecessary comparisons * remove cpp style comments * improve consistency: remove comma from the end of enumerator list * Removed useless _IMAGE_CONFIG defines * consistency: use the same order as snprintf * Resolve c89 warnings Co-authored-by: uidops <uidops@protonmail.com> Co-authored-by: Arthur Williams <taaparthur@gmail.com>
* update copyright notice (#139)eylles2021-10-281-1/+2
|
* code-style: remove extra casts (#130)javad2021-10-241-1/+1
| | | | Co-authored-by: N-R-K <79544946+N-R-K@users.noreply.github.com>
* Add ability to bind arbitrary functions.Arthur Williams2021-10-131-7/+8
| | | | | | | | | | | | | | | | | | | | | | | Before all the predated commands where kept in an array and their indexes were used in bindings. This meant that users couldn't add their own functions from the config file. Now key/mouse bindings have been changed to to store the function ptr (wrapped in a cmd_t struct to also store the mode) directly instead. General cleanup done in this commit: Defined `MODE_ALL` instead of using magic number. For example, suppose one had bindings like: { 0, XK_q, g_quit, None }, { ShitMask, XK_q, {quit_err}, None } { ControlMask, XK_q, {quit_err, .mode=MODE_IMAGE}, None } The existing binding `q` has been left unchanged and is defined the same way. However, the new hypothetical binding `Shift-q` can be used to call the custom function quit_err in any mode (default). `Ctrl-q` on the other hand will be called only on image mode. Closes #50
* Make imgcursor a config variable.Arthur Williams2021-10-131-12/+0
| | | | | | | | Previously, the value of imgcursor was determined by where a pointer binding was set to a ci_cursor_navigate. If it was then the pointer would change to left/right arrows depending on the position relative to the window. Now the user has full control of over it which also allows them to preserve the behavior in case they wrap the function.
* code-style: fix consistency issues all over the codebase (#94)Berke Kocaoğlu2021-10-111-8/+10
| | | | | | | | | | | | | | | * remove duplicate comment * remove empty tabs and blank lines * move macros and globals ontop * comment to seprate function implementation * fix alignment * switch to *argv[] similar to other suckless code * kill all empty last lines * append comment to endif * reuse existing ARRLEN macro * comment fall through * use while (true) everywhere Co-authored-by: NRK <nrk@disroot.org>
* add statusbar message upon key-hander activation (#98)N-R-K2021-10-071-1/+17
| | | | | | | | | Currently when running the key-handler the statusbar shows a "Running key-handler..." message, but there's no indication of the prefix key being pressed. There's a slight functional benefit of this patch in the sense that users can visually tell if the key-handler is listening on input or if the key-handler has been aborted or not.
* make ten_ms local to run (#101)N-R-K2021-09-291-2/+1
| | | | | ten_ms needed to be a global but after the following commit 3724d3fc17dc6135a05608cab5bdf00c6978282d this no longer holds true. it can simply be local to run, as it's not used anywhere else.
* make keyhandler abort key configurable via config.hNRK2021-09-241-1/+1
|
* fix: unable to bind anything to XK_EscapeNRK2021-09-241-1/+1
|
* Allow any set of modifiers to be used in keybindingsArthur Williams2021-09-201-1/+1
| | | | | | | | | | | | | Previous the code only allowed ShiftMask,ControlMask or Mod1Mask to be used in keybindings and the presence of any others modifiers would be ignored. Most problems generally allow certain modifiers to be be ignored but not most and certainly don't allow Super-A to be treated like A. Now users can use any modifiers they want in keybindings and can also ignore any modifiers they want. By default only ModMask2 (commonly numlock is ignored) Co-authored-by: N-R-K <79544946+N-R-K@users.noreply.github.com>
* Rename, Update Docs and Prepare for Release (#9)Berke Kocaoğlu2021-09-161-8/+9
| | | | | | | Co-authored-by: Guilherme Rugai Freire <41879254+GRFreire@users.noreply.github.com> Co-authored-by: N-R-K <79544946+N-R-K@users.noreply.github.com> Co-authored-by: NRK <nrk@disroot.org> Co-authored-by: Arthur Williams <taaparthur@gmail.com> Co-authored-by: eylles <ed.ylles1997@gmail.com>