diff --git a/README.md b/README.md index 6c97250..29bf3cc 100644 --- a/README.md +++ b/README.md @@ -1,199 +1,12 @@ [![nsxiv](https://codeberg.org/nsxiv/pages/raw/branch/master/img/logo.png)](https://codeberg.org/nsxiv/nsxiv) - -[![Codeberg](https://img.shields.io/badge/Hosted_at-Codeberg-%232185D0?style=flat-square&logo=CodeBerg)](https://codeberg.org/nsxiv/nsxiv) -[![tags](https://img.shields.io/github/v/tag/nsxiv/nsxiv?style=flat-square)](https://codeberg.org/nsxiv/nsxiv/tags) [![license](https://img.shields.io/badge/license-GPL--2.0%2B-lightgreen?style=flat-square)](https://codeberg.org/nsxiv/nsxiv/src/branch/master/LICENSE) -[![loc](https://img.shields.io/tokei/lines/github/nsxiv/nsxiv?color=red&style=flat-square)](https://codeberg.org/nsxiv/nsxiv) -**Neo (or New or Not) Simple (or Small or Suckless) X Image Viewer** +**Zeniba Image Viewer** -------------------------------------------------------------------- -nsxiv is a fork of the now-unmaintained [sxiv](https://github.com/xyb3rt/sxiv) -with the purpose of being a (mostly) drop-in replacement for sxiv, maintaining its -interface and adding simple, sensible features. nsxiv is free software licensed -under GPL-2.0-or-later and aims to be easy to modify and customize. - -Please file a bug report if something does not work as documented or expected on -[Codeberg] after making sure you are using the latest release. If you're looking -to migrate from `sxiv`, see [MIGRATION]. Contributions are welcome, see -[CONTRIBUTING] to get started. - -[Codeberg]: https://codeberg.org/nsxiv/nsxiv/issues/new -[CONTRIBUTING]: etc/CONTRIBUTING.md#contribution-guideline -[MIGRATION]: etc/MIGRATION.md - - -Features --------- - -* Basic image operations like zooming, panning, rotating -* Basic support for animated/multi-frame images (**requires Imlib2 v1.8.0 or above**) -* Thumbnail mode: grid of selectable previews of all images -* Ability to cache thumbnails for fast re-loading -* Automatically refreshing modified images -* Customizable keyboard and mouse mappings via `config.h` -* Scriptability via `key-handler` -* Displaying image information in status bar via `image-info` & `thumb-info` -* Customizable window title via `win-title` - - -Screenshots ------------ - -**Image mode with default colors:** - -![Image](https://codeberg.org/nsxiv/pages/raw/branch/master/img/image.png "Image mode") - -**Thumbnail mode with custom colors:** - -![Thumb](https://codeberg.org/nsxiv/pages/raw/branch/master/img/thumb.png "Thumb mode") - - -Installing via package manager ------------------------------- - - - - - -nsxiv is available on the following distributions/repositories. If you don't see -your distro listed here, either contact your distro's package maintainer or -consider packaging it yourself and adding it to the respective community repo. - - -Dependencies ------------- - -nsxiv requires the following software to be installed: - - * X11 - * Imlib2 (built with X11 support) - -The following dependencies are optional: - - * `inotify`\*: Used for auto-reloading images on change. - Disabled via `HAVE_INOTIFY=0`. - * `libXft`, `freetype2`, `fontconfig`: Used for the status bar. - Disabled via `HAVE_LIBFONTS=0`. - * `libexif`: Used for auto-orientation and exif thumbnails. - Disable via `HAVE_LIBEXIF=0`. - -Please make sure to install the corresponding development packages in case that -you want to build nsxiv on a distribution with separate runtime and development -packages (e.g. \*-dev on Debian). - -\* [inotify][] is a Linux-specific API for monitoring filesystem changes. - It's not natively available on `*BSD` systems but can be enabled via - installing and linking against [libinotify-kqueue][]. - -[inotify]: https://www.man7.org/linux/man-pages/man7/inotify.7.html -[libinotify-kqueue]: https://github.com/libinotify-kqueue/libinotify-kqueue - - -Building --------- - -nsxiv is built using the commands: - - $ make - -You can pass `HAVE_X=0` to `make` to disable an optional dependency. -For example: - - $ make HAVE_LIBEXIF=0 - -will disable `libexif` support. Alternatively they can be disabled via editing -`config.mk`. `OPT_DEP_DEFAULT=0` can be used to disable all optional -dependencies. - -Installing nsxiv: - - # make install - -Installing desktop entry: - - # make install-desktop - -Installing icons: - - # make install-icon - -Installing all of the above: - - # make install-all - -Please note, that these requires root privileges. -By default, nsxiv is installed using the prefix `/usr/local`, so the full path -of the executable will be `/usr/local/bin/nsxiv`, the `.desktop` entry will be -`/usr/local/share/applications/nsxiv.desktop` and the icon path will be -`/usr/local/share/icons/hicolor/{size}/apps/nsxiv.png`. - -You can install nsxiv into a directory of your choice by changing this command to: - - $ make PREFIX="/your/dir" install - -Example scripts are installed using `EGPREFIX` which defaults to -`/usr/local/share/doc/nsxiv/examples`. You can change `EGPREFIX` the same way -you can change `PREFIX` shown above. - -The build-time specific settings of nsxiv can be found in the file *config.h*. -Please check and change them, so that they fit your needs. -If the file *config.h* does not already exist, then you have to create it with -the following command: - - $ make config.h - - -Usage ------ - -Refer to the man-page for the documentation: - - $ man nsxiv - -You may also view the man-page [online](https://nsxiv.codeberg.page/man/). -However, note that the online man-page might not accurately represent your local -copy. - - -F.A.Q. ------- - -* Can I open remote urls with nsxiv?
-Yes, see [nsxiv-url](https://codeberg.org/nsxiv/nsxiv-extra/src/branch/master/scripts/nsxiv-url) - -* Can I open all the images in a directory?
-Yes, see [nsxiv-rifle](https://codeberg.org/nsxiv/nsxiv-extra/src/branch/master/scripts/nsxiv-rifle) - -* Can I set default arguments for nsxiv?
-Yes, see [nsxiv-env](https://codeberg.org/nsxiv/nsxiv-extra/src/branch/master/scripts/nsxiv-env) - -* Can I pipe images into nsxiv?
-Yes, see [nsxiv-pipe](https://codeberg.org/nsxiv/nsxiv-extra/src/branch/master/scripts/nsxiv-pipe) - -You may also wish to see the [known issues](https://codeberg.org/nsxiv/nsxiv/issues/242). - - -Customization -------------- - -The main method of customizing nsxiv is by setting values for the variables in *config.h*, -or by using Xresources as explained in the manual. If these options are not sufficient, -you may implement your own features by following -[this guide](https://codeberg.org/nsxiv/nsxiv-extra/src/branch/master/CUSTOMIZATION.md). - -Due to our limited [project scope](etc/CONTRIBUTING.md#project-scope), certain features or -customization cannot be merged into nsxiv mainline. Following the spirit of suckless -software, we host the [nsxiv-extra](https://codeberg.org/nsxiv/nsxiv-extra) repo where users -are free to submit whatever patches or scripts they wish. - -If you think your custom features can be beneficial for the general user base and is within -our project scope, please submit it as a pull request on this repository, then we *may* -merge it to mainline. - -Description on how to use or submit patches can be found on -nsxiv-extra's [README](https://codeberg.org/nsxiv/nsxiv-extra). +fork of the famous [nsxiv](https://codeberg.org/nsxiv/nsxiv) +to configure it juust the way I like it Download -------- @@ -203,22 +16,3 @@ on Codeberg or get a copy using git with the following command: $ git clone https://codeberg.org/nsxiv/nsxiv.git -You can view the changelog [here](etc/CHANGELOG.md) - - -Similar projects ----------------- - -If nsxiv isn't able to fit your needs, check out the image viewer section of -**[suckless rocks](https://suckless.org/rocks)** to find other minimal image -viewers to try out. - -Below are a couple other lesser known projects not listed in suckless rocks. - -* [MAGE](https://codeberg.org/explosion-mental/mage): - A smaller/more-suckless version of sxiv. -* [div](https://codeberg.org/TAAPArthur/div): - Minimal and extensive, aimed at C devs willing to build their own features. -* [mpv-image-viewer](https://github.com/occivink/mpv-image-viewer): - Lua script to turn mpv into an image viewer. Supports thumbnails via - [mpv-gallery-view](https://github.com/occivink/mpv-gallery-view). diff --git a/etc/.clang-format b/etc/.clang-format deleted file mode 100644 index a29be62..0000000 --- a/etc/.clang-format +++ /dev/null @@ -1,82 +0,0 @@ -# clang-format doesn't dictate the project's code style and can mess up a -# couple edge cases. However it comes quite close and can be used for fixing -# most style issues automatically on new changes via `git-clang-format`. ---- - -Standard: c++03 - -ColumnLimit: 0 - -AccessModifierOffset: -8 -ConstructorInitializerIndentWidth: 8 -ContinuationIndentWidth: 8 -IndentCaseLabels: false -IndentGotoLabels: false -IndentPPDirectives: None -IndentWidth: 8 -IndentWrappedFunctionNames: false -NamespaceIndentation: None -TabWidth: 8 -UseTab: AlignWithSpaces - -AlignAfterOpenBracket: true -AlignConsecutiveAssignments: false -AlignConsecutiveDeclarations: false -AlignEscapedNewlines: false -AlignOperands: true -AlignTrailingComments: false -DerivePointerAlignment: true -PointerAlignment: true - -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: true -AllowShortCaseLabelsOnASingleLine: false -AllowShortFunctionsOnASingleLine: None -AllowShortIfStatementsOnASingleLine: false -AllowShortLoopsOnASingleLine: false - -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: false -AlwaysBreakTemplateDeclarations: false - -BinPackArguments: true -BinPackParameters: true - -BreakBeforeBraces: Custom -BraceWrapping: - AfterControlStatement: MultiLine - AfterEnum: false - AfterExternBlock: false - AfterFunction: true - AfterStruct: false - AfterUnion: false - BeforeElse: false - IndentBraces: false - SplitEmptyFunction: true - -BreakBeforeBinaryOperators: None -BreakBeforeInheritanceComma: false -BreakBeforeTernaryOperators: false -BreakConstructorInitializers: BeforeComma -BreakConstructorInitializersBeforeComma: false -BreakStringLiterals: true - -Cpp11BracedListStyle: false -MaxEmptyLinesToKeep: 1 - -ReflowComments: false - -SortIncludes: true - -SpaceAfterCStyleCast: false -SpaceBeforeAssignmentOperators: true -SpaceBeforeParens: ControlStatements -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: false -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false - -... diff --git a/etc/CHANGELOG.md b/etc/CHANGELOG.md deleted file mode 100644 index 5af260f..0000000 --- a/etc/CHANGELOG.md +++ /dev/null @@ -1,499 +0,0 @@ -nsxiv - Changelog ------------------ - -**[git](https://codeberg.org/nsxiv/nsxiv.git)** - -Changes will only be documented on stable releases. If you're on git/master then -there may be more changes. Please use `git log` to view them. - -- - - - -**[v32](https://codeberg.org/nsxiv/nsxiv/archive/v32.tar.gz)** -*(October 01, 2023)* - -* Changes: - - * Removed legacy multi-frame loaders. Animated image support now requires - Imlib2 v1.8.0 or above. - * Move loading/caching messages to right side bar [#446] - * Set a default delay if delay is 0 in a multi-frame image [#445] - * `config.mk`: default to `-O2` [#435] - * `config.mk` no longer explicitly sets `CC` to `c99` [#455] - * Assertions are now opt-in and requires explicitly defining `DEBUG` [#447] - -* Added: - - * Added a pick-quit key-binding [#432] - * Ability to configure Xresources class name in `config.h` [#427] - * `--version` output now also includes compiled-in feature list [#462] - * Document handling of empty X resources values [#428] - * Experimental flag `--bg-cache` to generate thumbnail cache in a background - process [#438] - -* Fixes: - - * Changing brightness/contrast on multi-frame images [#440] - * Brightness keybindings on manpage [#467] - * Various autoreload bugs [#437], [#459], [#460] - * `*-info` scripts not updating when selecting thumbnail with mouse [#477] - * Updated openbsd configuration in `config.mk` [#453] - * Memory leak in `win_draw_bar` [#444] - * Thumbnail leak when removing the last file [#423] - -[#423]: https://codeberg.org/nsxiv/nsxiv/pulls/423 -[#427]: https://codeberg.org/nsxiv/nsxiv/pulls/427 -[#428]: https://codeberg.org/nsxiv/nsxiv/pulls/428 -[#432]: https://codeberg.org/nsxiv/nsxiv/pulls/432 -[#435]: https://codeberg.org/nsxiv/nsxiv/pulls/435 -[#437]: https://codeberg.org/nsxiv/nsxiv/pulls/437 -[#438]: https://codeberg.org/nsxiv/nsxiv/pulls/438 -[#440]: https://codeberg.org/nsxiv/nsxiv/pulls/440 -[#444]: https://codeberg.org/nsxiv/nsxiv/pulls/444 -[#445]: https://codeberg.org/nsxiv/nsxiv/pulls/445 -[#446]: https://codeberg.org/nsxiv/nsxiv/pulls/446 -[#447]: https://codeberg.org/nsxiv/nsxiv/pulls/447 -[#453]: https://codeberg.org/nsxiv/nsxiv/pulls/453 -[#455]: https://codeberg.org/nsxiv/nsxiv/pulls/455 -[#459]: https://codeberg.org/nsxiv/nsxiv/pulls/459 -[#460]: https://codeberg.org/nsxiv/nsxiv/pulls/460 -[#462]: https://codeberg.org/nsxiv/nsxiv/pulls/462 -[#467]: https://codeberg.org/nsxiv/nsxiv/pulls/467 -[#477]: https://codeberg.org/nsxiv/nsxiv/pulls/477 - -- - - - -**[v31](https://codeberg.org/nsxiv/nsxiv/archive/v31.tar.gz)** -*(January 28, 2023)* - -* Changes: - - * Uncritical files moved to `etc/`. [#350] - * Empty Xresource entry will now be ignored. [#340] - * `win-title` will be read in a non-blocking manner. [#314] - -* Added: - - * Support for multi-frame images via `Imlib2`. [#373] - * Support for long-opts. [#332] - * Cli flag `--anti-alias` to enable/disable anti-aliasing. [#361] - * Cli flag `--alpha-layer` to enable/disable checkerboard background. [#408] - * Accept directory via stdin (-i) [#383] - * Support for modifying brightness and contrast [#396] - -* Fixes: - - * Build failure when `_SC_PHYS_PAGES` is not defined. [#334] - * Various statusbar issues. [#353],[#341] - * Crashes due to faulty signal-handler. [#411] - * Potential memory leak in `r_readdir()`. [#319] - * Potentially printing incorrect error message. [#321] - * Wrong slideshow length on animated webp. [#381] - * Document missing Ctrl+6 binding in the manpage. [#347] - -[#314]: https://codeberg.org/nsxiv/nsxiv/pulls/314 -[#319]: https://codeberg.org/nsxiv/nsxiv/pulls/319 -[#321]: https://codeberg.org/nsxiv/nsxiv/pulls/321 -[#332]: https://codeberg.org/nsxiv/nsxiv/pulls/332 -[#334]: https://codeberg.org/nsxiv/nsxiv/pulls/334 -[#340]: https://codeberg.org/nsxiv/nsxiv/pulls/340 -[#341]: https://codeberg.org/nsxiv/nsxiv/pulls/341 -[#347]: https://codeberg.org/nsxiv/nsxiv/pulls/347 -[#350]: https://codeberg.org/nsxiv/nsxiv/pulls/350 -[#353]: https://codeberg.org/nsxiv/nsxiv/pulls/353 -[#361]: https://codeberg.org/nsxiv/nsxiv/pulls/361 -[#373]: https://codeberg.org/nsxiv/nsxiv/pulls/373 -[#381]: https://codeberg.org/nsxiv/nsxiv/pulls/381 -[#383]: https://codeberg.org/nsxiv/nsxiv/pulls/383 -[#396]: https://codeberg.org/nsxiv/nsxiv/pulls/396 -[#408]: https://codeberg.org/nsxiv/nsxiv/pulls/408 -[#411]: https://codeberg.org/nsxiv/nsxiv/pulls/411 - -- - - - -***SPECIAL NOTE***: Due to [this incident](https://codeberg.org/nsxiv/nsxiv-tmp/issues/1) -we have moved development over to [Codeberg](https://codeberg.org/nsxiv/nsxiv). - -A lot of the references *below* may now be 404 on GitHub. Any threads which -survived the wipe have been migrated over to [nsxiv-record]. All of the -references *above* can be found on the new main nsxiv repository on Codeberg. - -[nsxiv-record]: https://codeberg.org/nsxiv/nsxiv-record/ - -- - - - -**[v30](https://codeberg.org/nsxiv/nsxiv/archive/v30.tar.gz)** -*(June 15, 2022)* - -* Changes: - - * Development and main repository moved over to Codeberg. - See the special note above for more info. - * `autoreload_{inotify,nop}.c` merged into a single file, `autoreload.c`. [#263] - * Moved all configuration related macros to `config.mk`. [#264] - * `win-title` is now called only when there's change rather than being called - on each redraw. [#266] - -* Added: - - * Added more mimetypes to the `.desktop` entry. [#260] - * Added `thumb-info` for customizing the statusbar in thumbnail-mode. [#265] - * Added comments for building on OpenBSD. [#264] - -* Fixes: - - * "Too many open file" error due to not closing the win-title script. [#245] - * `-f` now directly starts in fullscreen mode rather than opening a normal - window and then going fullscreen. [#251] - * Broken slideshow on slow systems or fast animations. [#282] - * Memory leak when removing an image in thumbnail mode. [#247] - * Correctly setting `_NET_WM_PID`. [#251] - * Don't override statusbar if info script doesn't exist. [#271] - * Potential misbehavior regarding font. [#250] - -[#245]: https://codeberg.org/nsxiv/nsxiv-record/pulls/245 -[#247]: https://codeberg.org/nsxiv/nsxiv-record/pulls/247 -[#250]: https://codeberg.org/nsxiv/nsxiv-record/pulls/250 -[#251]: https://codeberg.org/nsxiv/nsxiv-record/pulls/251 -[#263]: https://codeberg.org/nsxiv/nsxiv-record/pulls/263 -[#264]: https://codeberg.org/nsxiv/nsxiv-record/pulls/264 -[#260]: https://codeberg.org/nsxiv/nsxiv-record/pulls/260 -[#264]: https://codeberg.org/nsxiv/nsxiv-record/pulls/264 -[#265]: https://codeberg.org/nsxiv/nsxiv-record/pulls/265 -[#266]: https://codeberg.org/nsxiv/nsxiv-record/pulls/266 -[#271]: https://codeberg.org/nsxiv/nsxiv-record/pulls/271 -[#282]: https://codeberg.org/nsxiv/nsxiv-record/pulls/282 - -- - - - -**[v29](https://github.com/nsxiv/nsxiv/archive/v29.tar.gz)** -*(March 03, 2022)* - -* Changes: - - * Window title is now customizable via `win-title`, cli flag `-T` and related - config.h options are removed. See `WINDOW TITLE` section of the manpage for - more info. [#213] - * Imlib2 cache size is now set based on total memory percentage, by default - set to 3%. [#184] - * Removed some non-POSIX extensions in the Makefile. [#225] - -* Added: - - * Ability to customize thumbnail mode mouse-bindings via `config.h`. [#167] - * Option to set statusbar position to top via `config.h`. [#231] - * New keybinding z to scroll to center. [#203] - -* Fixes: - - * Manpage cleanup: avoid confusing wording and document thumbnail mode - mouse-bindings. [#186] - * Wrong jpeg exif orientation with Imlib2 v1.7.5 (and above). [#188] - * Animation slowdown when zoomed in. [#200] - * Reset statusbar after failed keyhandler. [#191] - * Window title not working on certain WMs. [#234] - * Various compiler warnings. [#197] - -[#167]: https://codeberg.org/nsxiv/nsxiv-record/pulls/167 -[#184]: https://codeberg.org/nsxiv/nsxiv-record/pulls/184 -[#186]: https://codeberg.org/nsxiv/nsxiv-record/pulls/186 -[#188]: https://codeberg.org/nsxiv/nsxiv-record/pulls/188 -[#191]: https://codeberg.org/nsxiv/nsxiv-record/pulls/191 -[#197]: https://codeberg.org/nsxiv/nsxiv-record/pulls/197 -[#200]: https://codeberg.org/nsxiv/nsxiv-record/pulls/200 -[#203]: https://codeberg.org/nsxiv/nsxiv-record/pulls/203 -[#213]: https://codeberg.org/nsxiv/nsxiv-record/pulls/213 -[#225]: https://codeberg.org/nsxiv/nsxiv-record/pulls/225 -[#231]: https://codeberg.org/nsxiv/nsxiv-record/pulls/231 -[#234]: https://codeberg.org/nsxiv/nsxiv-record/pulls/234 - -- - - - -**[v28](https://github.com/nsxiv/nsxiv/archive/v28.tar.gz)** -*(December 12, 2021)* - -* Changes: - - * Statusbar made optional via `HAVE_LIBFONTS`. [#95] - * Remove library auto-detection, use `OPT_DEP_DEFAULT` instead. [#71] - * Example scripts will now be installed into `EGPREFIX` - (`$(PREFIX)/share/doc/nsxiv/examples` by default). See README for more - info. [#86] - -* Added: - - * Animated webp support (optional via `HAVE_LIBWEBP`). [#20] - * New mouse-binding Ctrl-Button1 for relative drag. [#117] - * Ability to configure colors and fonts in `config.h`. [#115] - * Ability to configure navigation width area in `config.h`. [#155] - * Ability to customize the set of modifiers used when processing keybindings - in `config.h` via `USED_MODMASK`. [#150] - * Ability to configure Imlib2's cache size for better image (re)loading - performance in `config.h`. [#171] - * Cli flag `-0` for sending null-seperated file-list to standard out (`-o`), - and key-handler and receiving null-seperated file-list via stdin (`-i`). - [#68],[#141],[#164] - * Export environment variable `NSXIV_USING_NULL` to key-handler. [#164] - * Embed new nsxiv icon. [#163] - * `make install-icon` to install icons. [#80],[#96] - * `make install-desktop` to install .desktop entry. [#80],[#96] - * `make install-all` to install everything. [#80],[#96] - * Configurable `KEYHANDLER_ABORT` in `config.h`. [#91],[#172] - * Statusbar message upon key-handler activation. [#98] - * Ability to write custom C functions in `config.h` and use them via - keybindings. [#76] - -* Fixes: - - * Not able to use `KEYHANDLER_ABORT` key (Escape by default) in - regular keybindings. [#91] - * Memory leak related to Xresources. [#134] - * Memory leak in gif loader. [#165] - * Better handle gif colormap and prevent out-of-bound access. [#165] - * Prevent crash when zooming out in very small images. [#178] - * Removed non-POSIX commands and extensions from `Makefile`. [#71] - * Regression where nsxiv wouldn't run on non-TrueColor X server. [#114] - * Wrong comments in `config.h` and description in `manpage`. - [#105],[#106],[#152] - -[#20]: https://codeberg.org/nsxiv/nsxiv-record/pulls/20 -[#68]: https://codeberg.org/nsxiv/nsxiv-record/pulls/68 -[#71]: https://codeberg.org/nsxiv/nsxiv-record/pulls/71 -[#76]: https://codeberg.org/nsxiv/nsxiv-record/pulls/76 -[#80]: https://codeberg.org/nsxiv/nsxiv-record/pulls/80 -[#86]: https://codeberg.org/nsxiv/nsxiv-record/pulls/86 -[#91]: https://codeberg.org/nsxiv/nsxiv-record/pulls/91 -[#95]: https://codeberg.org/nsxiv/nsxiv-record/pulls/95 -[#96]: https://codeberg.org/nsxiv/nsxiv-record/pulls/96 -[#98]: https://codeberg.org/nsxiv/nsxiv-record/pulls/98 -[#105]: https://codeberg.org/nsxiv/nsxiv-record/pulls/105 -[#106]: https://codeberg.org/nsxiv/nsxiv-record/pulls/106 -[#114]: https://codeberg.org/nsxiv/nsxiv-record/pulls/114 -[#115]: https://codeberg.org/nsxiv/nsxiv-record/pulls/115 -[#117]: https://codeberg.org/nsxiv/nsxiv-record/pulls/117 -[#134]: https://codeberg.org/nsxiv/nsxiv-record/pulls/134 -[#141]: https://codeberg.org/nsxiv/nsxiv-record/pulls/141 -[#150]: https://codeberg.org/nsxiv/nsxiv-record/pulls/150 -[#152]: https://codeberg.org/nsxiv/nsxiv-record/pulls/152 -[#155]: https://codeberg.org/nsxiv/nsxiv-record/pulls/155 -[#163]: https://codeberg.org/nsxiv/nsxiv-record/pulls/163 -[#164]: https://codeberg.org/nsxiv/nsxiv-record/pulls/164 -[#165]: https://codeberg.org/nsxiv/nsxiv-record/pulls/165 -[#171]: https://codeberg.org/nsxiv/nsxiv-record/pulls/171 -[#172]: https://codeberg.org/nsxiv/nsxiv-record/pulls/172 -[#178]: https://codeberg.org/nsxiv/nsxiv-record/pulls/178 - -- - - - -**[v27.1](https://github.com/nsxiv/nsxiv/archive/v27.1.tar.gz)** -*(September 16, 2021)* - -* Fixes: - - * Source tarball failing build [#66] - -[#66]: https://codeberg.org/nsxiv/nsxiv-record/pulls/66 - -- - - - -**[v27](https://github.com/nsxiv/nsxiv/archive/v27.tar.gz)** -*(September 16, 2021)* - -* Changes: - - * Re-release under the name nsxiv. - * Xresources `Sxiv.foreground` and `Sxiv.background` changed - to `Nsxiv.window.foreground` and `Nsxiv.window.background`. - * Xresources `Sxiv.font` changed to `Nsxiv.bar.font`. - * Rework the build system. Now by default we'll build with only optional - dependencies that are already installed. [#19] - -* Added: - - * Fill scale mode. [#2] - * Configurable X window title (via `config.h` and the `-T` flag). [#23] - * Support custom bar colors via Xresources. [#19] - * Support custom mark color via Xresources. [#51] - * Toggle animation playback with Ctrl-a. [#33] - * Set `_NET_WM_PID` and `WM_CLIENT_MACHINE` X properties. [#13] - * Set `ICCCM WM manager` hints. [#12] - -* Fixes: - - * Cli flag `-G` not initially setting gamma. [#31] - * Wrong keybinding description in the manpage. [#14] - * .desktop entry not advertising webp support. [#15] - * Prevent crash when embedded into transparent window. [#3] - * Small memory leak. [#57] - * Rare crash when showing some GIFs. [#41] - * Rare event where nsxiv wouldn't close after window being destroyed. [#53] - -[#2]: https://codeberg.org/nsxiv/nsxiv-record/pulls/2 -[#3]: https://codeberg.org/nsxiv/nsxiv-record/pulls/3 -[#12]: https://codeberg.org/nsxiv/nsxiv-record/pulls/12 -[#13]: https://codeberg.org/nsxiv/nsxiv-record/pulls/13 -[#14]: https://codeberg.org/nsxiv/nsxiv-record/pulls/14 -[#15]: https://codeberg.org/nsxiv/nsxiv-record/pulls/15 -[#19]: https://codeberg.org/nsxiv/nsxiv-record/pulls/19 -[#23]: https://codeberg.org/nsxiv/nsxiv-record/pulls/23 -[#31]: https://codeberg.org/nsxiv/nsxiv-record/pulls/31 -[#33]: https://codeberg.org/nsxiv/nsxiv-record/pulls/33 -[#41]: https://codeberg.org/nsxiv/nsxiv-record/pulls/41 -[#51]: https://codeberg.org/nsxiv/nsxiv-record/pulls/51 -[#53]: https://codeberg.org/nsxiv/nsxiv-record/pulls/53 -[#57]: https://codeberg.org/nsxiv/nsxiv-record/pulls/57 - - -sxiv ----- - -**Stable releases** - -**[v26](https://github.com/nsxiv/nsxiv/archive/v26.tar.gz)** -*(January 16, 2020)* - - * Maintenance release - -**[v25](https://github.com/nsxiv/nsxiv/archive/v25.tar.gz)** -*(January 26, 2019)* - - * Support font fallback for missing glyphs - * Fix busy loop when built without inotify - * Use background/foreground colors from X resource database - -**[v24](https://github.com/nsxiv/nsxiv/archive/v24.tar.gz)** -*(October 27, 2017)* - - * Automatically reload the current image whenever it changes - * Support embedding into other X windows with -e (e.g. tabbed) - * New option -p prevents sxiv from creating cache and temporary files - * Simpler mouse mappings, the most basic features are accessible with the - mouse only (navigate, zoom, pan) - -**[v1.3.2](https://github.com/nsxiv/nsxiv/archive/v1.3.2.tar.gz)** -*(December 20, 2015)* - - * external key handler gets file paths on stdin, not as arguments - * Cache out-of-view thumbnails in the background - * Apply gamma correction to thumbnails - -**[v1.3.1](https://github.com/nsxiv/nsxiv/archive/v1.3.1.tar.gz)** -*(November 16, 2014)* - - * Fixed build error, caused by delayed config.h creation - * Fixed segfault when run with -c - -**[v1.3](https://github.com/nsxiv/nsxiv/archive/v1.3.tar.gz)** -*(October 24, 2014)* - - * Extract thumbnails from EXIF tags (requires libexif) - * Zoomable thumbnails, supported sizes defined in config.h - * Fixed build error with giflib version >= 5.1.0 - -**[v1.2](https://github.com/nsxiv/nsxiv/archive/v1.2.tar.gz)** -*(April 24, 2014)* - - * Added external key handler, called on keys prefixed with `Ctrl-x` - * New keybinding `{`/`}` to change gamma (by András Mohari) - * Support for slideshows, enabled with `-S` option & toggled with `s` - * Added application icon (created by 0ion9) - * Checkerboard background for alpha layer - * Option `-o` only prints files marked with `m` key - * Fixed rotation/flipping of multi-frame images (gifs) - -**[v1.1.1](https://github.com/nsxiv/nsxiv/archive/v1.1.1.tar.gz)** -*(June 2, 2013)* - - * Various bug fixes - -**[v1.1](https://github.com/nsxiv/nsxiv/archive/v1.1.tar.gz)** -*(March 30, 2013)* - - * Added status bar on bottom of window with customizable content - * New keyboard shortcuts `\`/`|`: flip image vertically/horizontally - * New keyboard shortcut `Ctrl-6`: go to last/alternate image - * Added own EXIF orientation handling, removed dependency on libexif - * Fixed various bugs - -**[v1.0](https://github.com/nsxiv/nsxiv/archive/v1.0.tar.gz)** -*(October 31, 2011)* - - * Support for multi-frame images & GIF animations - * POSIX compliant (IEEE Std 1003.1-2001) - -**[v0.9](https://github.com/nsxiv/nsxiv/archive/v0.9.tar.gz)** -*(August 17, 2011)* - - * Made key and mouse mappings fully configurable in config.h - * Complete code refactoring - -**[v0.8.2](https://github.com/nsxiv/nsxiv/archive/v0.8.2.tar.gz)** -*(June 29, 2011)* - - * POSIX-compliant Makefile; compiles under NetBSD - -**[v0.8.1](https://github.com/nsxiv/nsxiv/archive/v0.8.1.tar.gz)** -*(May 8, 2011)* - - * Fixed fullscreen under window managers, which are not fully EWMH-compliant - -**[v0.8](https://github.com/nsxiv/nsxiv/archive/v0.8.tar.gz)** -*(April 18, 2011)* - - * Support for thumbnail caching - * Ability to run external commands (e.g. jpegtran, convert) on current image - -**[v0.7](https://github.com/nsxiv/nsxiv/archive/v0.7.tar.gz)** -*(February 26, 2011)* - - * Sort directory entries when using `-r` command line option - * Hide cursor in image mode - * Full functional thumbnail mode, use Return key to switch between image and - thumbnail mode - -**[v0.6](https://github.com/nsxiv/nsxiv/archive/v0.6.tar.gz)** -*(February 16, 2011)* - - * Bug fix: Correctly display filenames with umlauts in window title - * Basic support of thumbnails - -**[v0.5](https://github.com/nsxiv/nsxiv/archive/v0.5.tar.gz)** -*(February 6, 2011)* - - * New command line option: `-r`: open all images in given directories - * New key shortcuts: `w`: resize image to fit into window; `W`: resize window - to fit to image - -**[v0.4](https://github.com/nsxiv/nsxiv/archive/v0.4.tar.gz)** -*(February 1, 2011)* - - * New command line option: `-F`, `-g`: use fixed window dimensions and apply - a given window geometry - * New key shortcut: `r`: reload current image - -**[v0.3.1](https://github.com/nsxiv/nsxiv/archive/v0.3.1.tar.gz)** -*(January 30, 2011)* - - * Bug fix: Do not set setuid bit on executable when using `make install` - * Pan image with mouse while pressing middle mouse button - -**[v0.3](https://github.com/nsxiv/nsxiv/archive/v0.3.tar.gz)** -*(January 29, 2011)* - - * New command line options: `-d`, `-f`, `-p`, `-s`, `-v`, `-w`, `-Z`, `-z` - * More mouse mappings: Go to next/previous image with left/right click, - scroll image with mouse wheel (horizontally if Shift key is pressed), - zoom image with mouse wheel if Ctrl key is pressed - -**[v0.2](https://github.com/nsxiv/nsxiv/archive/v0.2.tar.gz)** -*(January 23, 2011)* - - * Bug fix: Handle window resizes correctly - * New keyboard shortcuts: `g`/`G`: go to first/last image; `[`/`]`: go 10 - images back/forward - * Support for mouse wheel zooming (by Dave Reisner) - * Added fullscreen mode - -**[v0.1](https://github.com/nsxiv/nsxiv/archive/v0.1.tar.gz)** -*(January 21, 2011)* - - * Initial release diff --git a/etc/CONTRIBUTING.md b/etc/CONTRIBUTING.md deleted file mode 100644 index aa96068..0000000 --- a/etc/CONTRIBUTING.md +++ /dev/null @@ -1,112 +0,0 @@ -Project Scope -------------- - - * Bug fixes and maintenance - * Prioritize extensibility and simplicity - * Do not make the codebase more complex, keep it simple to hack on - * Do not add extra dependency (if we do, add compile time switch to disable it) - * New features may be added if it cannot be achieved (easily) via a shell script, - doesn't break backwards compatibility and doesn't violate any of the above rules. - -Note: Since we aim to be a drop-in replacement for sxiv, we intend to keep all -sxiv's behaviors/features even in cases where removing them would make the -code-base simpler. - -Also note that (n)sxiv uses `imlib2` for loading images. Thus any request or -patches for adding support for new image formats should go into -[imlib2's repo](https://git.enlightenment.org/old/legacy-imlib2) instead. - - -Contribution Guideline ----------------------- - -When contributing, make sure: - - * Your contribution falls under nsxiv's scope and aim - * You follow the existing code style (see the "Code Style" section below) - * You open the pull request from a new branch, not from master - * To avoid using force pushes, especially for bigger patches. Only use them - when there's merge conflicts. - -If your contribution is not suitable for general use, it will not be included in nsxiv. -For changes that are very much up to preference, such as changing values in config.h, -please do not open a pull request unless you have an objective explanation. - -See the [open issues](https://codeberg.org/nsxiv/nsxiv/issues) to find something -to work on. You can also filter the issues via label: - -* [Good first issue](https://codeberg.org/nsxiv/nsxiv/issues?labels=49698): - (Easy) Issues which do not require much if any experience. -* [Up for grabs](https://codeberg.org/nsxiv/nsxiv/issues?labels=49705): - (Intermediate) Issues which are free for anyone who wants to pick it up. - Might require some experience. -* [Help wanted](https://codeberg.org/nsxiv/nsxiv/issues?labels=49699): - (Intermediate/Experienced) Issues where we require some help. - - -Code Style ----------- - -`nsxiv` mostly follows the [suckless code-style][sl], with a few exceptions. -If your editor supports [.editorconfig](../.editorconfig) then you'll already be -off to a good start without needing much manual intervention. Additionally we -provide a [clang-format](./.clang-format) configuration for reference, which you -may use via [`git-clang-format`][cf] to format the changes you've made (please -do not run it globally on the entire code-base since clang-format gets a decent -amount of edge cases wrong). - -[sl]: https://suckless.org/coding_style/ -[cf]: https://clang.llvm.org/docs/ClangFormat.html#git-integration - - -Development workflow for maintainers ------------------------------------- - -If we notice you contributing and/or showing interest in issues/pull requests, -we may invite you to join the nsxiv org as a member. Being a member simply means -you will be able to approve, disapprove and merge pull requests. - -Our workflow regarding pull requests is the following: - - * Code related changes require two approvals, but documentation related - changes (e.g. typo) can be merged with just one. - * If a pull request has a single approval, no objections and has been open - for more than 7 days, then it may be force-merged. - * Always prefer squashing when merging. In the case a PR makes more than one - significant change, use the "don't squash" tag and rebase instead. - * When merging, make sure the commit message is cleaned up properly so that - it reflects the current intention of the PR. - -For releases, the process is the following: - - * Tag the release with a "vN" tag, where N is the version number. Also set - the commit message and tag description for the release commit to "Release - version N". Make sure to use an annotated tag. - * Update `VERSION` macro in `config.mk`. - * Update the changelog (`etc/CHANGELOG.md`): - * Include link to the release tarball and add the release date. - * Document only the changes or fixes between releases. Don't document - changes which never made it into a release. - * Use the "Changes" section to document behavior changes since the last - release, the "Added" section for new features, and the "Fixes" section - for fixed bugs or regressions. - * Include pull request IDs with reference style links. - -Mirroring to GitHub: - -Assuming `origin` is the name of the codeberg remote and `github` is the name -of the github remote; run the following commands to mirror the codeberg repo to -github: - -```console -$ git fetch --prune origin -$ git push --prune github '+refs/remotes/origin/*:refs/heads/*' '+refs/tags/*:refs/tags/*' -``` - -The first command updates the local repo and the second command pushes -everything on `origin` without pushing any of the local branches. - -- - - - -For mundane development related talks which don't warrant their own issue, use -the [general discussion](https://codeberg.org/nsxiv/nsxiv/issues/294) thread. diff --git a/etc/MIGRATION.md b/etc/MIGRATION.md deleted file mode 100644 index db776e0..0000000 --- a/etc/MIGRATION.md +++ /dev/null @@ -1,53 +0,0 @@ -# Migrating from `sxiv` - -`nsxiv` is *mostly* a drop-in replacement for `sxiv`, but not fully. -This document outlines some key differences to be aware of if you're migrating -from `sxiv`. - -### Configuration directory - -`sxiv` looks for config files under the directory -`${XDG_CONFIG_HOME:-${HOME}/.config}/sxiv`. E.g -`~/.config/sxiv/exec/key-handler`. - -`nsxiv` uses the same logic to find the config dir but uses the name "nsxiv". -E.g `~/.config/nsxiv/...`. - -The "exec" scripts such as `key-handler` and `image-info` in `nsxiv` has some -more features, but all previous argument order are preserved. And so if you have -any exec scripts, you can simply copy them over and they should just work. - -### Xresources - -The xresources config for `nsxiv` is under the "Nsxiv" namespace whereas `sxiv` -uses the "Sxiv" namespace. Some of the variables are also different between -`nsxiv` and `sxiv`, below is a table that shows the old and new names: - -| sxiv | nsxiv | -| :-- | :-- | -| Sxiv.background | Nsxiv.window.background | -| Sxiv.foreground | Nsxiv.window.foreground | -| Sxiv.barBackground | Nsxiv.bar.background | -| Sxiv.barForeground | Nsxiv.bar.foreground | -| Sxiv.font | Nsxiv.bar.font | - -### Default window class - -The window class of `nsxiv` is set to "Nsxiv" by default (can be overwritten via -`-N` flag). This usually shouldn't matter, unless you have scripts that search -for "Sxiv" window class. - -### Thumbnail cache directory - -Similar to config dir, the thumbnail cache dir of `nsxiv` is under the "nsxiv" -name instead of "sxiv". E.g `~/.cache/nsxiv`. - -The "caching structure" in `nsxiv` is the same as `sxiv`. Which means that you -can simply rename the directory to `nsxiv`: - -```console -$ mv ~/.cache/sxiv ~/.cache/nsxiv -``` - -If you want to have both `sxiv` and `nsxiv` installed at the same time, you can -even use symlink to avoid duplicate cache. diff --git a/etc/examples/image-info b/etc/examples/image-info deleted file mode 100755 index 5f06123..0000000 --- a/etc/examples/image-info +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh - -# Example for $XDG_CONFIG_HOME/nsxiv/exec/image-info -# Called by nsxiv(1) whenever an image gets loaded. -# The output is displayed in nsxiv's status bar. -# Arguments: -# $1: path to image file (as provided by the user) -# $2: image width -# $3: image height -# $4: fully resolved path to the image file - -s=" " # field separator - -exec 2>/dev/null - -filename=$(basename -- "$1") -filesize=$(du -Hh -- "$1" | cut -f 1) -geometry="${2}x${3}" - -echo "${filesize}${s}${geometry}${s}${filename}" - diff --git a/etc/examples/key-handler b/etc/examples/key-handler deleted file mode 100755 index 3fe741d..0000000 --- a/etc/examples/key-handler +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -# Example for $XDG_CONFIG_HOME/nsxiv/exec/key-handler -# Called by nsxiv(1) after the external prefix key (C-x by default) is pressed. -# The next key combo is passed as its first argument. Passed via stdin are the -# images to act upon: all marked images, if in thumbnail mode and at least one -# image has been marked, otherwise the current image. nsxiv(1) will block until -# the handler terminates. It then checks which images have been modified and -# reloads them. - -# By default nsxiv(1) will send one image per-line to stdin, however when using -# -0 the image list will be NULL separated and the environment variable -# "$NSXIV_USING_NULL" will be set to 1. - -# The key combo argument has the following form: "[C-][M-][S-]KEY", -# where C/M/S indicate Ctrl/Meta(Alt)/Shift modifier states and KEY is the X -# keysym as listed in /usr/include/X11/keysymdef.h without the "XK_" prefix. -# If KEY has an uppercase equivalent, S-KEY is resolved into it. For instance, -# K replaces S-k and Scedilla replaces S-scedilla, but S-Delete is sent as-is. - -rotate() { - degree="$1" - tr '\n' '\0' | xargs -0 realpath | sort | uniq | while read file; do - case "$(file -b -i "$file")" in - image/jpeg*) jpegtran -rotate "$degree" -copy all -outfile "$file" "$file" ;; - *) mogrify -rotate "$degree" "$file" ;; - esac - done -} - -case "$1" in -"C-x") xclip -in -filter | tr '\n' ' ' | xclip -in -selection clipboard ;; -"C-c") while read file; do xclip -selection clipboard -target image/png "$file"; done ;; -"C-e") while read file; do urxvt -bg "#444" -fg "#eee" -sl 0 -title "$file" -e sh -c "exiv2 pr -q -pa '$file' | less" & done ;; -"C-g") tr '\n' '\0' | xargs -0 gimp & ;; -"C-r") while read file; do rawtherapee "$file" & done ;; -"C-comma") rotate 270 ;; -"C-period") rotate 90 ;; -"C-slash") rotate 180 ;; -esac - diff --git a/etc/examples/thumb-info b/etc/examples/thumb-info deleted file mode 100755 index b422f9c..0000000 --- a/etc/examples/thumb-info +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -# Example for $XDG_CONFIG_HOME/nsxiv/exec/thumb-info -# Called by nsxiv(1) whenever the selected thumbnail changes. -# The output is displayed in nsxiv's status bar. -# Arguments: -# $1: path to image file (as provided by the user) -# $2: empty -# $3: empty -# $4: fully resolved path to the image file - -s=" " # field separator - -exec 2>/dev/null - -filename=$(basename -- "$4") -filesize=$(du -Hh -- "$4" | cut -f 1) - -echo "${filesize}${s}${filename}" - diff --git a/etc/examples/win-title b/etc/examples/win-title deleted file mode 100755 index 31994ef..0000000 --- a/etc/examples/win-title +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -# Example for $XDG_CONFIG_HOME/nsxiv/exec/win-title -# Called by nsxiv(1) whenever any of the relevant information changes. -# The output is set as nsxiv's window title. -# -# Arguments, "Optional" arguments might be empty: -# $1: resolved absolute path of the current file -# $2: current file number -# $3: total file number -# $4: image width (Optional: Disabled on thumbnails mode) -# $5: image height (Optional: Disabled on thumbnails mode) -# $6: current zoom (Optional: Disabled on thumbnails mode) -# -# The term file is used rather than image as nsxiv does not -# precheck that the input files are valid images. Total file -# count may be different from the actual count of valid images. - -exec 2>/dev/null - -filename="${1##*/}" - -if [ -n "$4" ]; then # image mode - printf "%s" "nsxiv - ${filename} | ${4}x${5} ${6}% [${2}/${3}]" -else - printf "%s" "nsxiv - ${filename} [${2}/${3}]" -fi diff --git a/etc/nsxiv.1 b/etc/nsxiv.1 deleted file mode 100644 index 55ce0da..0000000 --- a/etc/nsxiv.1 +++ /dev/null @@ -1,627 +0,0 @@ -.TH NSXIV 1 nsxiv\-VERSION -.SH NAME -nsxiv \- Neo Simple X Image Viewer -.SH SYNOPSIS -.B nsxiv -.RB [ \-abcfhiopqrtvZ0 ] -.RB [ \-A -.IR FRAMERATE ] -.RB [ \-e -.IR WID ] -.RB [ \-G -.IR GAMMA ] -.RB [ \-g -.IR GEOMETRY ] -.RB [ \-N -.IR NAME ] -.RB [ \-n -.IR NUM ] -.RB [ \-S -.IR DELAY ] -.RB [ \-s -.IR MODE ] -.RB [ \-z -.IR ZOOM ] -.IR FILE ... -.SH DESCRIPTION -nsxiv is a simple image viewer for X. -.P -It has two modes of operation: image and thumbnail mode. The default is image -mode, in which only the current image is shown. In thumbnail mode a grid of -small previews is displayed, making it easy to choose an image to open. -.P -Please note, that the fullscreen mode requires an EWMH/NetWM-compliant window -manager. -.SH OPTIONS -.TP -.BI "\-A, \-\-framerate " FRAMERATE -Play animations with a constant frame rate set to -.IR FRAMERATE . -If -.I FRAMERATE -is set to 0 then animation playback is disabled. -.TP -.B "\-a, \-\-animate" -Play animations of multi-frame images. -.TP -.B "\-b" -Do not show statusbar. -.TP -.B "\-\-bar, \-\-no\-bar" -Enables or disables statusbar. -.B "\-\-no\-bar" -is equivalent to -.BR "\-b" . -.TP -.B "\-c, \-\-clean\-cache" -Remove all orphaned cache files from the thumbnail cache directory and exit. -.TP -.BI "\-e, \-\-embed " WID -Embed nsxiv's window into window whose ID is -.IR WID . -.TP -.B "\-f, \-\-fullscreen" -Start in fullscreen mode. -.TP -.BI "\-G, \-\-gamma " GAMMA -Set image gamma to GAMMA (\-32..32). -.TP -.BI "\-g, \-\-geometry " GEOMETRY -Set window position and size. See section GEOMETRY SPECIFICATIONS of X(7) for -more information on GEOMETRY argument. -.TP -.B "\-h, \-\-help" -Print brief usage information to standard output and exit. -.TP -.B "\-i, \-\-stdin" -Read names of files to open from standard input. Also done if FILE is `-'. -.TP -.BI "\-N, \-\-class " NAME -Set the resource name (WM_CLASS) of nsxiv's X window to NAME. -.TP -.BI "\-n, \-\-start\-at " NUM -Start at picture number NUM. -.TP -.B "\-o, \-\-stdout" -Write list of all marked files to standard output when quitting. In combination -with -.B "\-i, \-\-stdin" -nsxiv can be used as a visual filter/pipe. -.TP -.B "\-p, \-\-private" -Enable private mode, in which nsxiv does not write any cache or temporary files. -.TP -.B "\-q, \-\-quiet" -Be quiet, and disable warnings to standard error stream. -.TP -.B "\-r, \-\-recursive" -Search the given directories recursively for images to view. -.TP -.BI "\-S, \-\-ss\-delay " DELAY -Start in slideshow mode. Set the delay between images to -.I DELAY -seconds. -.I DELAY -may be a floating-point number. -.TP -.BI "\-s, \-\-scale\-mode " MODE -Set scale mode according to MODE character. Supported modes are: [d]own, -[f]it, [F]ill, [w]idth, [h]eight. -.TP -.BR "\-t, \-\-thumbnail" [=no] -Start in thumbnail mode. The long option accepts an optional "no" to disable it. -.TP -.B "\-v, \-\-version" -Print version information to standard output and exit. -.TP -.B "\-Z, \-\-zoom\-100" -The same as `\-z 100'. -.TP -.BI "\-z, \-\-zoom " ZOOM -Set zoom level to ZOOM percent. -.TP -.B "\-0, \-\-null" -Use NULL-separator. With this option, output of \-o and file-list sent to the -key-handler and the input of \-i will be separated by a NULL character. -.TP -.BI "\-\-anti\-alias" [=no] -Enables anti-aliasing, when given -.I no -as an argument, disables it instead. -.TP -.BI "\-\-alpha\-layer" [=no] -Enables checkerboard background for alpha layer, when given -.I no -as an argument, disables it instead. -.TP -.BI "\-\-cache\-allow, \-\-cache\-deny " "CACHE\-PATHS" -List of directories to whitelist or blacklist for thumbnail caching. -See -.I "THUMBNAIL CACHING" -section for more information on the argument format. -These options are mutually exclusive, if they are specified more than once then -only the final one takes effect. -.SH KEYBOARD COMMANDS -.SS General -The following keyboard commands are available in both image and thumbnail modes: -.TP -.BR 0 \- 9 -Prefix the next command with a number (denoted via -.IR count ). -.TP -.B q -Quit nsxiv. -.TP -.B Q -Quit nsxiv, but additionally print the current filename when \-o is active and -no files have been marked. -.TP -.B Return -Switch to thumbnail mode / open selected image in image mode. -.TP -.B f -Toggle fullscreen mode. -.TP -.B b -Toggle visibility of statusbar at the bottom of the window. -.TP -.B Ctrl-x -Send the next key to the external key-handler. See section EXTERNAL KEY HANDLER -for more information. -.TP -.B g -Go to the first image. -.TP -.B G -Go to the last image, or image number -.IR count . -.TP -.B r -Reload image. -.TP -.B D -Remove current image from file list and go to next image. -.TP -.BR Ctrl-h ", " Ctrl-Left -Scroll left one screen width. -.TP -.BR Ctrl-j ", " Ctrl-Down -Scroll down one screen height. -.TP -.BR Ctrl-k ", " Ctrl-Up -Scroll up one screen height. -.TP -.BR Ctrl-l ", " Ctrl-Right -Scroll right one screen width. -.TP -.BR + -Zoom in. -.TP -.B \- -Zoom out. -.TP -.B m -Mark/unmark the current image. -.TP -.B M -Mark/unmark all images starting from the last marked/unmarked image up to the -current one. -.TP -.B Ctrl-m -Reverse all image marks. -.TP -.B Ctrl-u -Remove all image marks. -.TP -.B N -Go -.I count -marked images forward. -.TP -.B P -Go -.I count -marked images backward. -.TP -.B { -Decrease gamma correction by -.I count -steps. -.TP -.B } -Increase gamma correction by -.I count -steps. -.TP -.B Ctrl-g -Reset gamma correction. -.TP -.B Ctrl-[ -Decrease brightness correction by -.I count -steps. -.TP -.B Ctrl-] -Increase brightness correction by -.I count -steps. -.TP -.B ( -Decrease contrast by -.I count -steps. -.TP -.B ) -Increase contrast by -.I count -steps. -.SS Thumbnail mode -The following keyboard commands are only available in thumbnail mode: -.TP -.BR h ", " Left -Move selection left -.I count -times. -.TP -.BR j ", " Down -Move selection down -.I count -times. -.TP -.BR k ", " Up -Move selection up -.I count -times. -.TP -.BR l ", " Right -Move selection right -.I count -times. -.TP -.B R -Reload all thumbnails. -.SS Image mode -The following keyboard commands are only available in image mode: -.TP -Navigate image list: -.TP -.BR n ", " Space -Go -.I count -images forward. -.TP -.BR p ", " Backspace -Go -.I count -images backward. -.TP -.B [ -Go -.I count -* 10 images backward. -.TP -.B ] -Go -.I count -* 10 images forward. -.TP -.B Ctrl-6 -Go to the previously viewed image. -.TP -Handle multi-frame images: -.TP -.B Ctrl-n -Go -.I count -frames of a multi-frame image forward. -.TP -.B Ctrl-p -Go -.I count -frames of a multi-frame image backward. -.TP -.BR Ctrl-a ", " Ctrl-Space -Play/stop animations of multi-frame images. -.TP -Panning: -.TP -.BR h ", " Left -Scroll image 1/5 of window width or -.I count -pixels left. -.TP -.BR j ", " Down -Scroll image 1/5 of window height or -.I count -pixels down. -.TP -.BR k ", " Up -Scroll image 1/5 of window height or -.I count -pixels up. -.TP -.BR l ", " Right -Scroll image 1/5 of window width or -.I count -pixels right. -.TP -.B H -Scroll to left image edge. -.TP -.B J -Scroll to bottom image edge. -.TP -.B K -Scroll to top image edge. -.TP -.B L -Scroll to right image edge. -.TP -.B z -Scroll to image center. -.TP -Zooming: -.TP -.B = -Set zoom level to 100%, or -.IR count %. -.TP -.B w -Set zoom level to 100%, but fit large images into window. -.TP -.B W -Fit image to window. -.TP -.B F -Fill image to window. -.TP -.B e -Fit image to window width. -.TP -.B E -Fit image to window height. -.TP -Rotation: -.TP -.B < -Rotate image counter-clockwise by 90 degrees. -.TP -.B > -Rotate image clockwise by 90 degrees. -.TP -.B ? -Rotate image by 180 degrees. -.TP -Flipping: -.TP -.B | -Flip image horizontally. -.TP -.B _ -Flip image vertically. -.TP -Miscellaneous: -.TP -.B a -Toggle anti-aliasing. -.TP -.B A -Toggle visibility of alpha-channel, i.e. image transparency. -.TP -.B s -Toggle slideshow mode and/or set the delay between images to -.I count -seconds. -.SH MOUSE COMMANDS -.SS Thumbnail mode -The following mouse mappings are available in thumbnail mode: -.TP -.B Button1 -Select the image. Goes into image mode if double\-clicked. -.TP -.B Button3 -Mark/unmark the image. Dragging while holding down Button3 will mark/unmark -multiple images. -.TP -.B Button4 -Scroll up by one row. -.TP -.B Button5 -Scroll down by one row. -.TP -.B Ctrl-Button4 -Scroll up by one page. -.TP -.B Ctrl-Button5 -Scroll down by one page. -.SS Image mode -The following mouse mappings are available in image mode: -.TP -.B Button1 -Go to the next image if the mouse cursor is in the right part of the window or -to the previous image if it is in the left part. -.TP -.B Ctrl-Button1 -Pan the image relative to the mouse cursor. -.TP -.B Button2 -Pan the image according to the mouse cursor position in the window while -keeping this button pressed down. -.TP -.B Button3 -Switch to thumbnail mode. -.TP -.B Button4 -Zoom in. -.TP -.B Button5 -Zoom out. -.SH CONFIGURATION -The following X resources are supported under "Nsxiv" (e.g. -.B Nsxiv.bar.font -): -.TP -.B window.background -Color of the window background -.TP -.B window.foreground -Color of the window foreground -.TP -.B bar.font -Name of Xft bar font -.TP -.B bar.background -Color of the bar background. Defaults to window.background -.TP -.B bar.foreground -Color of the bar foreground. Defaults to window.foreground -.TP -.B mark.foreground -Color of the mark foreground. Defaults to window.foreground -.TP -Please see xrdb(1) on how to change them. -.LP -An X resources entry with an empty value means the default -(defined in config.h) will be used. -.SH WINDOW TITLE -The window title can be replaced with the output of a user-provided script, -which is called by nsxiv whenever any of the relevant information changes. -The path of this script is -.I $XDG_CONFIG_HOME/nsxiv/exec/win-title -and the arguments given to it (where "Optional" arguments might be empty) are: -.IP $1 4 -resolved absolute path of the current file -.IP $2 4 -current file number -.IP $3 4 -total file count -.IP $4 4 -image width (Optional: Disabled on thumbnails mode) -.IP $5 4 -image height (Optional: Disabled on thumbnails mode) -.IP $6 4 -current zoom (Optional: Disabled on thumbnails mode) -.P -The term file is used rather than image as nsxiv does not precheck that the -input files are valid images. Total file count may be different from the actual -count of valid images. -.P -There is also an example script installed together with nsxiv as -.IR EGPREFIX/win-title . -.SH STATUS BAR -The information displayed on the left side of the status bar can be replaced -with the output of user-provided script. -.P -The script that is called by nsxiv whenever an image gets loaded is located at -.I $XDG_CONFIG_HOME/nsxiv/exec/image-info -and the arguments given to it are: -.IP $1 4 -path to image file (as provided by the user) -.IP $2 4 -image width -.IP $3 4 -image height -.IP $4 4 -fully resolved path to the image file -.P -In thumbnail mode, the script that is called is located at -.I $XDG_CONFIG_HOME/nsxiv/exec/thumb-info -and the arguments given to it are: -.IP $1 4 -path to image file (as provided by the user) -.IP $2 4 -empty -.IP $3 4 -empty -.IP $4 4 -fully resolved path to the image file -.P -There are also example scripts installed together with nsxiv as -.IR EGPREFIX/image-info -and -.IR EGPREFIX/thumb-info . -.SH EXTERNAL KEY HANDLER -Additional external keyboard commands can be defined using a handler program -located in -.IR $XDG_CONFIG_HOME/nsxiv/exec/key-handler . -The handler is invoked by pressing -.BR Ctrl-x . -The next key combo is passed as its first argument. Passed via stdin are the -images to act upon: all marked images, if in thumbnail mode and at least one -image has been marked, otherwise the current image. nsxiv(1) will block until -the handler terminates. It then checks which images have been modified and -reloads them. - -By default nsxiv(1) will send one image per-line to stdin, however when using -\-0 the image list will be NULL separated and the environment variable -"$NSXIV_USING_NULL" will be set to 1. - -The key combo argument has the following form: "[C-][M-][S-]KEY", -where C/M/S indicate Ctrl/Meta(Alt)/Shift modifier states and KEY is the X -keysym as listed in /usr/include/X11/keysymdef.h without the "XK_" prefix. -If KEY has an uppercase equivalent, S-KEY is resolved into it. For instance, -K replaces S-k and Scedilla replaces S-scedilla, but S-Delete is sent as-is. - -There is also an example script installed together with nsxiv as -.IR EGPREFIX/key-handler . -.SH THUMBNAIL CACHING -nsxiv stores all thumbnails under -.IR $XDG_CACHE_HOME/nsxiv/ . -.P -Use the command line option -.I \-c -to remove all orphaned cache files. Additionally, run the following command -afterwards inside the cache directory to remove empty subdirectories: -.P -.RS -find . \-depth \-type d \-empty ! \-name '.' \-exec rmdir {} \\; -.RE -.P -The option -.BR "\-\-cache\-allow " or " \-\-cache\-deny" -may be used to whitelists or blacklist certain directories from being cached. -The argument is a -.B : -separated list of paths. A -.B * -at the beginning of the path indicates that path should be matched recursively. -.P -For example: -.B \-\-cache\-allow \(dq/user/pictures:*/media/pictures\(dq -whitelists \(dq/user/pictures\(dq directory non-recursively and \(dq/media/pictures\(dq -directory recursively. Nothing outside these two directories will be cached. -And -.B \-\-cache\-deny \(dq*/secret\(dq -will enable blacklist mode and will not cache anything inside \(dq/secret\(dq -or it's subdirectories. -.SH ORIGINAL AUTHOR -.EX -Bert Muennich -.EE -.SH CURRENT MAINTAINERS -.EX -NRK -Berke Kocaoğlu -TAAPArthur -eylles -Stein Gunnar Bakkeby -explosion-mental -.EE -.SH CONTRIBUTORS -.EX -For a list of contributors, run `git shortlog -s` in the nsxiv git repository. -.EE -.SH HOMEPAGE -.TP -Website: -.EE -https://nsxiv.codeberg.page/ -.EX -.TP -Source code: -.EE -https://codeberg.org/nsxiv/nsxiv -.EX -.SH SEE ALSO -.BR X (7), -.BR xrdb (1) diff --git a/etc/nsxiv.desktop b/etc/nsxiv.desktop deleted file mode 100644 index de90437..0000000 --- a/etc/nsxiv.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Type=Application -Name=nsxiv -GenericName=Image Viewer -Exec=nsxiv %F -MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/png;image/tiff;image/x-bmp;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-tga;image/x-xpixmap;image/webp;image/heic;image/svg+xml;application/postscript;image/jp2;image/jxl;image/avif;image/heif; -NoDisplay=true -Icon=nsxiv diff --git a/etc/woodpecker/CFLAGS b/etc/woodpecker/CFLAGS deleted file mode 100644 index 57d7d16..0000000 --- a/etc/woodpecker/CFLAGS +++ /dev/null @@ -1,13 +0,0 @@ -# vanilla flags --std=c99 -Wall -pedantic -# optimizations: enables extra warnings and deeper analysis thus catches more errors/warnings --O3 -flto -# treat warnings as errors --Werror -# extra flags --Wextra -Wshadow -Wvla -Wpointer-arith --Wundef -Wstrict-overflow=4 -Wwrite-strings -Wunreachable-code --Wbad-function-cast -Wdeclaration-after-statement --Wmissing-prototypes -Wstrict-prototypes -# silence --Wno-unused-parameter -Wno-missing-field-initializers diff --git a/etc/woodpecker/analysis.sh b/etc/woodpecker/analysis.sh deleted file mode 100755 index 5a227ce..0000000 --- a/etc/woodpecker/analysis.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh -e - -std="c99" -NProc=$(( $(nproc) / 4 )) -if [ -z "$NProc" ] || [ "$NProc" -lt 1 ]; then NProc="1"; fi - -run_cppcheck() { - cppcheck --std="$std" --enable=performance,portability \ - --force --quiet --inline-suppr --error-exitcode=1 \ - --max-ctu-depth=8 -j"$NProc" \ - $(make OPT_DEP_DEFAULT="$1" dump_cppflags) -DDEBUG \ - --suppress=varFuncNullUB --suppress=uninitvar \ - $(git ls-files *.c) -} - -run_tidy() { - checks="$(sed '/^#/d' etc/woodpecker/clang-tidy-checks | paste -d ',' -s)" - git ls-files *.c | xargs -P"$NProc" -I{} clang-tidy --quiet \ - --warnings-as-errors="*" --checks="$checks" {} \ - -- -std="$std" $(make OPT_DEP_DEFAULT="$1" dump_cppflags) -DDEBUG -} - -run_cppcheck "0" & run_cppcheck "1" & run_tidy "0" & run_tidy "1"; -wait diff --git a/etc/woodpecker/analysis.yml b/etc/woodpecker/analysis.yml deleted file mode 100644 index 4edcd6b..0000000 --- a/etc/woodpecker/analysis.yml +++ /dev/null @@ -1,12 +0,0 @@ -when: - branch: master - -steps: - analysis: - image: alpine - commands: | - apk add --no-cache build-base cppcheck clang-extra-tools git \ - imlib2-dev xorgproto \ - libxft-dev libexif-dev >/dev/null - make config.h version.h - ./etc/woodpecker/analysis.sh diff --git a/etc/woodpecker/build.yml b/etc/woodpecker/build.yml deleted file mode 100644 index 431f27f..0000000 --- a/etc/woodpecker/build.yml +++ /dev/null @@ -1,31 +0,0 @@ -when: - branch: master - -# NOTE: "stable" tcc is too old and fails at linking. instead fetching a recent known working commit. -steps: - build: - image: alpine - environment: - - TCC_SHA=29ae3ed4d5b83eec43598d6cd7949bccb41c8083 - commands: | - apk add --no-cache \ - imlib2 imlib2-dev xorgproto \ - libxft libxft-dev libexif libexif-dev \ - gcc clang llvm llvm-dev build-base wget ca-certificates bc >/dev/null - wget "https://github.com/TinyCC/tinycc/archive/$TCC_SHA.tar.gz" >/dev/null - tar xzf "$TCC_SHA.tar.gz" >/dev/null - ( cd "tinycc-$TCC_SHA" && ./configure --config-musl && make -s -j"$(nproc)" && make install; ) >/dev/null - CFLAGS="$(sed '/^#/d' etc/woodpecker/CFLAGS | paste -d ' ' -s)" - build () { - for cc in "gcc" "clang"; do - echo "### $cc - $2 build ###" - make clean && make -s -j"$(nproc)" CC="$cc" CFLAGS="$CFLAGS" LDFLAGS="$CFLAGS" OPT_DEP_DEFAULT="$1" - done - } - # try all combination with tcc # - etc/woodpecker/try-all-builds.sh - # full-build with gcc and clang # - build "1" "full" - # ensure minimal-build works without opt deps installed - apk del libxft libxft-dev libexif libexif-dev >/dev/null - build "0" "minimal" diff --git a/etc/woodpecker/clang-tidy-checks b/etc/woodpecker/clang-tidy-checks deleted file mode 100644 index c326eef..0000000 --- a/etc/woodpecker/clang-tidy-checks +++ /dev/null @@ -1,16 +0,0 @@ -# checks -clang-analyzer-*,clang-diagnostic-*,bugprone-*,performance-*,modernize-* -misc-*,android-cloexec-*,llvm-include-order --readability-*,readability-duplicate-include,readability-misleading-indentation - -# silence --misc-unused-parameters,-misc-include-cleaner,-misc-no-recursion --bugprone-easily-swappable-parameters,-bugprone-narrowing-conversions,-bugprone-incorrect-roundings --bugprone-implicit-widening-of-multiplication-result,-bugprone-integer-division --android-cloexec-fopen,-android-cloexec-pipe,-cert-err33-c --bugprone-assignment-in-if-condition --bugprone-suspicious-realloc-usage --bugprone-switch-missing-default-case - -# false positive warnings --clang-analyzer-valist.Uninitialized diff --git a/etc/woodpecker/spell.yml b/etc/woodpecker/spell.yml deleted file mode 100644 index 78ce57f..0000000 --- a/etc/woodpecker/spell.yml +++ /dev/null @@ -1,13 +0,0 @@ -when: - branch: master - -# NOTE: codespell not available on stable alpine, grab it from pip -steps: - spell-check: - image: alpine:edge - commands: | - apk add --no-cache python3 py3-pip git - python3 -m venv ~/py3-venv - . ~/py3-venv/bin/activate - pip install codespell - git ls-files | sed '/\.png$/d' | xargs codespell diff --git a/etc/woodpecker/try-all-builds.sh b/etc/woodpecker/try-all-builds.sh deleted file mode 100755 index 89e41f1..0000000 --- a/etc/woodpecker/try-all-builds.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -# -# Shell script that checks for all possible build combination with TCC. -# Usage: call the script while in the nsxiv root directory - -set -- $(grep -o '^HAVE_[[:alpha:]]* ' config.mk) -CFLAGS="$(sed '/^#/d' etc/woodpecker/CFLAGS | paste -d ' ' -s)" -z=$(echo "2 ^ $#" | bc) - -print_opt_name() { - shift "$(( $1 + 1 ))" - printf "%s=" "$1" -} - -print_opt_arg() { - bn=$(echo "$1 / (2 ^ $2)" | bc) - printf "%d " $(( bn % 2 )) -} - -n=0 -while [ "$n" -lt "$z" ]; do - i=0 - while [ "$i" -lt "$#" ]; do - print_opt_name "$i" "$@" - print_opt_arg "$n" "$i" - i=$((i + 1)) - done | tee "/dev/stderr" | ( - make clean - if ! xargs make -j"$(nproc)" CC=tcc CFLAGS="$CFLAGS" LDFLAGS="$CFLAGS"; then - echo "[FAILED]" >&2 - exit 1 - else - echo "[SUCCESS]" >&2 - fi - ) - [ "$?" -ne 0 ] && exit "$?" - n=$((n + 1)) -done >/dev/null diff --git a/icon/128x128.png b/icon/128x128.png deleted file mode 100644 index d45250b..0000000 Binary files a/icon/128x128.png and /dev/null differ diff --git a/icon/16x16.png b/icon/16x16.png deleted file mode 100644 index a19074a..0000000 Binary files a/icon/16x16.png and /dev/null differ diff --git a/icon/32x32.png b/icon/32x32.png deleted file mode 100644 index e18ccf8..0000000 Binary files a/icon/32x32.png and /dev/null differ diff --git a/icon/48x48.png b/icon/48x48.png deleted file mode 100644 index 442a96c..0000000 Binary files a/icon/48x48.png and /dev/null differ diff --git a/icon/64x64.png b/icon/64x64.png deleted file mode 100644 index 3ce0d27..0000000 Binary files a/icon/64x64.png and /dev/null differ diff --git a/icon/README.md b/icon/README.md deleted file mode 100644 index 3ddd7f8..0000000 --- a/icon/README.md +++ /dev/null @@ -1,43 +0,0 @@ -img2data --------- - -img2data is a helper program to convert images to binary data for embedding in -software. The generated data is used in nsxiv to set the window icons. - - -How It Works ------------- - -Each given image is compressed using run-length encoding and a data array is -generated. In these arrays, the four high bits of each byte are the run length -minus one and the lowest four bits are the data, which are indices for the -color array. - -See `data.gen.h` or the output of img2data for a better understanding. - - -Dependencies ------------- - -img2data requires Imlib2 to be installed. - - -Building --------- - -img2data is built using the command: - - $ CC -Wall -std=c89 -pedantic -lImlib2 img2data.c -o img2data - -where `CC` is a C compiler such as `gcc`. - - -Usage ------ - -img2data is used as the following: - - $ ./img2data 16x16.png 32x32.png 48x48.png 64x64.png 128x128.png - -You may replace or omit any image, but you must have a `data.gen.h` with at -least 1 image for nsxiv to compile. diff --git a/icon/img2data.c b/icon/img2data.c deleted file mode 100644 index 2223bf0..0000000 --- a/icon/img2data.c +++ /dev/null @@ -1,157 +0,0 @@ -#include -#include -#include -#include -#include - -/* macros */ -#define ARRLEN(a) (sizeof(a) / sizeof((a)[0])) - -/* globals */ -static unsigned long palette[16] = {0}; -static unsigned int palette_size = 0; -static unsigned int run_column = 0; -static unsigned int icon_sizes[16] = {0}; -static unsigned int icon_sizes_size = 0; - -/* functions */ -static void error(int eval, int err, const char *fmt, ...) -{ - va_list ap; - - fflush(stdout); - va_start(ap, fmt); - if (fmt) - vfprintf(stderr, fmt, ap); - va_end(ap); - if (err) - fprintf(stderr, "%s%s", fmt ? ": " : "", strerror(err)); - fputc('\n', stderr); - - if (eval) - exit(eval); -} - -static unsigned long color_to_ulong(Imlib_Color color) -{ - return (color.alpha << 24 & 0xff000000) | - (color.red << 16 & 0x00ff0000) | - (color.green << 8 & 0x0000ff00) | - (color.blue & 0x000000ff); -} - -static int to_palette(unsigned long color) -{ - unsigned int i; - - for (i = 0; i < palette_size; i++) { - if (palette[i] == color) - return i; - } - if (palette_size + 1 == 16) - error(EXIT_FAILURE, 0, "Error: More than 16 colors in palette"); - palette[palette_size] = color; - - return palette_size++; -} - -static void print_run(int color, unsigned int run_length) -{ - while (run_length > 0) { - int x = run_length / 16 >= 1 ? 16 : run_length; - - printf("0x%02x, ", (x - 1) << 4 | color); - run_length -= x; - if (++run_column % 12 == 0) - printf("\n\t"); - } -} - -static void print_palette(void) -{ - unsigned int i; - - printf("static const unsigned long icon_colors[] = {\n\t"); - for (i = 0; i < palette_size; i++) { - printf("0x%08lx, ", palette[i]); - if (i % 4 == 3) - printf("\n\t"); - } - printf("\n};\n\n"); -} - -static void print_icon_array(void) -{ - unsigned int i; - - printf("static const icon_data_t icons[] = {\n"); - for (i = 0; i < icon_sizes_size; i++) - printf("\tICON_(%d),\n", icon_sizes[i]); - printf("};\n\n"); -} - -static unsigned int print_encoded_image(const char *path) -{ - Imlib_Image image; - Imlib_Color color; - unsigned int width, height, x, y; - unsigned int run_length = 1; - int currentcolor = 0; - int lastcolor = -1; - - image = imlib_load_image(path); - - if (image == NULL) - error(EXIT_FAILURE, 0, "Error loading image: %s", path); - - imlib_context_set_image(image); - - width = imlib_image_get_width(); - height = imlib_image_get_height(); - - if (width != height) - error(EXIT_FAILURE, 0, "Image is not square: %s", path); - - printf("static const unsigned char icon_data_%d[] = {\n\t", width); - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - imlib_image_query_pixel(x, y, &color); - currentcolor = to_palette(color_to_ulong(color)); - if (currentcolor != lastcolor) { - if (lastcolor != -1) - print_run(lastcolor, run_length); - run_length = 1; - } else { - run_length++; - } - lastcolor = currentcolor; - } - } - print_run(lastcolor, run_length); - printf("\n};\n\n"); - - imlib_free_image(); - - return width; -} - -int main(int argc, char **argv) -{ - unsigned int img_size = 0; - unsigned int i; - - if (argc < 2) - error(EXIT_FAILURE, 0, "No icons provided"); - else if (argc-1 > ARRLEN(icon_sizes)) - error(EXIT_FAILURE, 0, "Too many icons"); - - for (i = 1; i < argc; i++) { - img_size = print_encoded_image(argv[i]); - run_column = 0; - icon_sizes[icon_sizes_size++] = img_size; - } - print_palette(); - print_icon_array(); - - return EXIT_SUCCESS; -}