Changelog#
All notable changes to vimiv are documented in this file.
v0.10.0 (unreleased)#
Added:#
Support for PyQt6 and thus Qt6. In case both are installed, vimiv prefers PyQt6 and only falls back to PyQt5 if PyQt6 is not available. The Qt version and wrapper can be selected explicitly with the
QT_SELECTenvironment variable, using:5orPyQt5: Use PyQt5.6orPyQt6: Use PyQt6.PySide6: Use PySide6 (Qt for Python). This is highly experimental and should be used with care.
The
scroll_to_centersetting. When set to true, always keep the cursor centered when scrolling as previously hard-coded. Otherwise, cursor ends up at the top / bottom when scrolling up / down. Thanks @Markuzcha for the idea!The
:move-viewcommand to move the view in image and thumbnail mode to the top / center / bottom along with thezt,zzandzbbindings. Thanks @Markuzcha for the idea!
Changed:#
The JPEG image header check was simplified to have a false negative rate of 0, while maintaining a decently low false positive rate.
Support for PyQt5 < 5.15 was dropped.
The option to read binary images from stdin using
vimiv -. Thanks @mozirilla213 for the idea and initial implementation!
Fixed:#
The SVG image header check to no longer return true for all XML files.
Binding the
<delete>key as special key. Thanks @xfzv!Consecutive :tag-write would insert empty lines into the tag file, which would on :tag-load getting interpreted as file paths.
v0.9.0 (2023-07-15)#
Added:#
More vim movement commands with corresponding keybindings, namely:
:scroll page-up/page-down/half-page-up/half-page-downmapped to<ctrl>b,<ctrl>f,<ctrl>uand<ctrl>dfor library and thumbnail mode.:end-of-linemapped to$and:first-of-linemapped to^to select the first icon of the current row in thumbnail mode.
Thanks @jcjgraf for the idea!
The
--actionflag for the:markcommand.--action toggleis the default and keeps the previous behaviour of the mark command, i.e. inversing the mark status of the passed path(s). In addition one can now use--action markand--action unmarkto force (un-) marking the paths.Support for the
aviffile format using the imageformats plugin. To enable it, addimageformats = avifto the[PLUGINS]section of yourvimiv.conf. Requires qt-avif-image-plugin. Thanks @schyzophrene-asynchrone!A few more default mouse bindings:
<button-right>to enter the library from image and thumbnail mode.<button-right>to go to the parent directory in the library.<button-middle>to enter thumbnail mode from image and library mode.<button-forward>and<button-back>to select the next/previous image in image mode.<button-forward>and<button-back>to scroll down/up and open any selected image in library mode.<button-forward>and<button-back>select the next/previous thumbnail in thumnbail mode.
Thanks @BachoSeven for your thoughts!
The
:copy-imagecommand which copies the selected image to the clipboard. The flags--width,--heightand--sizeallow to scale the copied image. Thanks @jcjgraf!The
read_onlysetting. When set to true, all commands that may write changes to disk are disabled. This comes with the{read-only}status module which displays[RO]in caseread_onlyis true. Note that you must add this to your vimiv.conf to enable it if you already define the left status contents. The new defaults are:left = {pwd}{read-only} left_image = {index}/{total} {basename}{read-only} [{zoomlevel}] left_thumbnail = {thumbnail-index}/{thumbnail-total} {thumbnail-name}{read-only}
Thanks @willemw12 for the idea!
The
zhkeybinding to toggle hidden files. Thanks @Kakupakat for the idea!The
:print-stdoutcommand which prints a given list of string to the STDOUT.The
:mark-printdefault alias which prints all marked images to STDOUT using:print-stdout.The
-o TEXTflag to printTEXTto standard output before exit. Wildcards are expanded before printing, allowing to for example print marked files using-o %m. Thanks @loiccoyle for the idea!The
-iflag to read paths to open from standard input instead. Thanks @loiccoyle for the idea!The
--qt-argsflag to pass arguments directly to qt. When passing multiple arguments, they must be quoted accordingly, e.g.vimiv --qt-args '--name floating'. Thanks @loiccoyle for the discussion!Statusbar modules
name,thumbnail-basename,extensionandthumbnail-extension.Support for the
jp2file format using the imageformats plugin. To enable it, addimageformats = jp2to the[PLUGINS]section of yourvimiv.conf. Requires the qt imageformats plugin. Thanks @szsdk for testing!The
image.zoom_wheel_ctrlsetting which toggles the need to hold the<ctrl>modifier for zooming an image with the mouse wheel. Thanks @ArtemSmaznov for the idea!The
--askflag for the:deletecommand to prompt the user for confirmation before deleting. Thanks @timsofteng for the idea!Support for different sorting options for images and directories via the
sort.image_order,sort.directory_order,sort.reverseandsort.ignore_casesettings. Please refer to the documentation for further details. Thanks to @kAldown for the initial implementation, @jcjgraf for taking over, and many more joining in the discussions and reminding us why this feature is important!New
{cursor-position}statusbar module which tracks the mouse cursor position in image coordinates.The
:cropcommand which displays a rectangle to crop the curent image. The rectangle can be dragged and resized using the mouse. As with:straighten, accept the changes with<return>and reject them with<escape>. The{transformation-info}status module displays the currently selected geometry of the original image. Thanks @Yutsuten for reviving this!Add the
nonesorting type for thesort.image_orderandsort.directory_orderoptions, implemented by @buzzingwiresAdd the
thumbnail.saveoption, implemented by @buzzingwires
Changed:#
New set of default metadata key sets numbered from 1 to 5. Thanks @jcjgraf!
When toggling
library.show_hiddenthe selection now stays on the same file, not the same index.Using the mouse to scroll in library and thumbnail mode now changes the selection instead of just scrolling the view. Horizontal scrolling in thumbnail mode is supported.
Default statusbar module
thumbnail-namewas changed tothumbnail-basenameforleft_thumbnail.Support for Qt versions 5.9 and 5.10 was officially dropped. These are no longer supported by our testing framework, and 5.11 is out since July 2018. Code will likely still work with these versions, but as it is no longer tested, there is no guarantee.
The
shufflesetting was moved into thesortgroup.Complete refactoring of metadata support. The handler functionality is moved out to the plugin space, allowing for full flexibility in choosing a suitable backend. By default,
metadata_pyexiv2ormetadata_piexifis loaded, if the respective backend is installed. The default behaviour can be overridden by explicitly loading a metadata plugin.Vimiv now requires at least Python 3.8 and thus PyQt 5.13.2.
Qt logs of level warning / critical are now suppressed if the corresponding vimiv log level is higher.
Fixed:#
Crash when deleting images without permission. Thanks @jcjgraf!
Undeleting symlinks. Thanks @jcjgraf!
Expanding tilde to home directory when using the
:writecommand. Thanks @jcjgraf for pointing this out!Completion for aliases.
Crash when extracting metadata using piexif from a non JPEG or TIFF image. Thanks @BachoSeven for pointing this out!
Crash when searching in a symlinked directory. Thanks @BachoSeven for pointing this out!
Inconsistencies between the base status bar module and the thumbnail- modules.
v0.8.0 (2021-01-18)#
Added:#
A customizable set of metadata key settings numbered
metadata.keys1tometadata.keys3. The default ismetadata.keys1. One can switch between the sets using[count]i. To override one of these sets, addkeys2 = Override,SecondSet. To add a new one, usekeys4 = New,Fourth,Set. Here the values must be a comma-separated list of valid metadata keys. Thanks @jcjgraf!<equal>is now bound to:scale --level=fitin image mode. Thanks @jcjgraf for pointing this out!The
:history-clearcommand to clear the command history.Handle
unbindexplicitly when parsingkeys.conf. Instead of binding a key to the:unbindcommand, any existing keybinding for this key is now removed.A new api interface which enables writing plugins to support new image formats. See Adding Support for New Imageformats for more details. Thanks @jcjgraf!
New
--keep-zoomflag for:nextand:prevwhich preserves zoom level and scroll position of the current image. Thanks @jcjgraf for the idea!Exif support using pyexiv2. When available, vimiv now prefers pyexiv2 over piexif for exif support due to its ability to format exif values into a human readable format. Thanks a lot @jcjgraf for all your hard work, thoughts and comments on this topic!
New
:metadata-list-keyscommand to display all valid exif keys for the current image.
Changed:#
The
=key can now be bound using<equal>. Using the raw=character is not possible inkeys.confas it is treated as separator much like:.Renamed
vimiv.appdata.xmltoorg.karlch.vimiv.qt.metainfo.xml.History is now mode based. The plain-text history file is replaced by a json file which stores the history of each mode. Any existing history is migrated by adding it to every mode and keeping a backup of the plain-text history file at
history.bak. The scriptscripts/vimiv_history.pyis provided to print the history of a mode line-by-line as aid in case user-scripts relied on the plain-text nature of the history file.
Fixed:#
Not selecting the first library row in a directory in case the directory was previously empty.
Initial selection of
:complete --inverse. This is now correctly the last row, not the second-to-last.Various issues when handling backslash and percent characters in paths and completions. Thanks @woefe for pointing these out!
Quoting of paths and the date format of the trashinfo file created by the
:deletecommand. Thanks @woefe for the bug report.Creating thumbnails for thumbnails.
Opening single hidden images when
library.show_hiddenis set to false. Thanks @schyzophrene-asynchrone for pointing this out!Displaying key binding conflicts before parsing the complete
keys.conf. This lead to scenarios in which a warning was displayed which is later resolved by the correspondingunbind. Thanks @schyzophrene-asynchrone!Crash when toggling manipulate mode before ever entering it. Thanks @pozitron57 for pointing this out!
Crash when dragging thumbnails.
v0.7.0 (2020-05-17)#
Added:#
The tilde character
~is now also expanded to the user’s home directory when running external commands started via!.The
%fwildcard to match the current filelist. This is useful in addition to*as the filelist does not have to be equal to all files in the current directory.The
:tag-opencommand equivalent to:tag-loadfollowed by:open %mfor convenience.Various small improvements to the
:helpcommand:Consistent cleaner formatting using the html-subset of
QLabel.New
wildcardstopic.
Changed:#
Manipulations are no longer directly written to file when running
:accept. Instead, they behave according to theimage.autowritesetting just like transformations.Zooming now always uses the center of the currently visible area as focal-point.
Spaces in statusbar settings such as
statusbar.leftare now only replaced by the html-equivalent if there are multiple subsequent spaces. This keeps wanted additional spacing while allowing to use html code such as<span style='color: #8FBCBB; font-weight: bold;'>colored and bold</span>.Both the command line and the widget to display status messages are now overlay widgets instead of being integrated with the bar. This decouples them from the main grid layout and better reflects their role as they are being shown temporarily over the current widget/image.
Fixed:#
Centering the image on any type of resize, even when the user explicitly changed the scroll position.
Displaying bindings containing special html characters such as ‘<’ or ‘>’ in the keyhint widget and in the
{keys}status module.Crash when scrolling thumbnail mode with empty thumbnail list.
Crash when running
:gotowithout valid paths/images/thumbnails.Switching mode when toggling an inactive mode.
Displaying status messages larger than one line in manipulate mode.
Resetting settings to ther default value via
:set setting.name. The value of the setting was changed accordingly, but thechangedsignal was not emitted which means nothing actually happened.Hanging when a FIFO file is in the current directory.
v0.6.1 (2020-03-07)#
Fixed:#
Fix removing thumbnails when the number of thumbnails decreases. Regression since v0.6.0.
v0.6.0 (2020-03-07)#
Added:#
Command names can now be overridden by passing the
namekeyword toapi.commands.register.The
:resizeand:rescalecommands to change the dimension of the original image. These are transformations and can be written to file.The
:undo-transformationscommand to reset the image to the original.The
:straightencommand which displays a grid to straighten the current image. The image can then be straightened clockwise using thel,>andLkeys and counter-clockwise withh,<andH. Accept the changes with<return>and reject them with<escape>. It comes ith the{transformation-info}status module that displays the current straightening angle in degrees.The option to prompt the user for an answer using
api.prompt.ask_question. This comes with a blocking prompt which can be answered using key presses. The prompt can be styled with theprompt.font,prompt.fg,prompt.bg,prompt.padding,prompt.border_radius,prompt.borderandprompt.border.colorstyles.A new
PromptSettingtype which is essentially a boolean setting with the additionalaskvalue. If the value isask, the user is prompted everytime the boolean state of this setting is requested.
Changed:#
Removed prepended whitespace from completion options.
The
:nopcommand is now hidden from the completion.The function
api.openhad been renamed toapi.open_pathsto remove the clash with the python builtin. Usingapi.opendirectly is deprecated and will be removed in v0.7.0.The slideshow is always stopped when the image is unfocused.
The
image.autowritesetting is nowaskby default. This should prevent surprises in case the changes are written to disk or discarded.:deletenow only deletes images.
Fixed:#
Always writing changed images to disk regardless of the
image.autowritesetting.Segfault when applying manipulations.
Crash when searching empty pathlist.
Library column widths when starting in an empty directory.
Reset image filelist selection when working directory content changes. We now ensure a custom selection, such as after
:open %m, is not replaced by all images in the working directory on a proposed reload.Selecting wrong path in library/thumbnail when deleting images in image mode.
v0.5.0 (2020-01-05)#
Added:#
Basic support for binding mouse clicks and double clicks to commands. The relevant names are
<button-NAME>and<double-button-NAME>. HereNAMEstands for the name of the mouse button to bind, e.g.left,middleorright.New
imageformatsplugin to ease adding support for additional image formats. Activate it by addingimageformats = name, ...to the plugins section of yourvimiv.conf. Herename, ...consists of the names of the image formats to add separated by a comma. Currently only thecr2raw format is implemented which requires qt raw.Path completion for the
:markcommand.Some help for migrating from the gtk version:
All gtk directories are backed up.
The tag files are migrated.
A welcome pop-up linking the documentation is displayed.
Changed:#
Saner default step for mouse zoom. Thanks @OliverLew for catching this.
Completion api no longer provides a
BaseFilterclass. Instead, theFilterProxyModelis always used for completion filtering. Customization can only be done by adding new completion models inheriting fromBaseModel.Completion widget is now shown/hidden depending on if there are completions or not.
The
:gotocommand can now be run with count only, e.g.:2goto.The
:gotocommand now consistently uses the modulo operator in all modes if the passed number is larger than the allowed maximum.
Fixed:#
Showing keyhint widget in command mode.
Partial matches with special keys such as
<tab>.The
-scommand line option to temporarily set an option. Broken since v0.4.0.Support for some jpg files not recognized by the
imghdrmodule. Thanks @maximbaz for the help.Undefined behaviour when running
:enter command. This now displays an error message and hints that:commandor:searchshould be used instead.
v0.4.1 (2019-12-01)#
Fixed:#
Not clearing existing status messages when pressing a key.
v0.4.0 (2019-12-01)#
Added:#
The option to reference environment variables in the configuration files using
${env:VARIABLE}.The
-b,--basedirargument to override the base directory for storage. In contrast to--temp-basedirthe directory is not deleted later.:renameandmark-renamecommands to rename files starting from a common base.Panning images with the left mouse button.
Zooming images with control+mouse-wheel.
Path focus synchronization between all modes. Library and thumbnail mode are always synchronized. To keep the image synchronized with the others, either the
nandpbindings can be used in the library, or the image can be opened explicitly. This behaviour is intended as opening a new image for every scroll in library/thumbnail would degrade performance significantly.
Changed:#
External commands started with
!no longer run in a sub-shell. To run commands with a sub-shell use:spawninstead.The selected path in the library is centered as in thumbnail mode if possible.
The library always focuses the child directory when entering the parent directory via
:scroll left.The completion widget no longer has padding but instead keeps one space to align with the
:in the command line. To simplify alignment,statusbar.paddingoption now only applies to the top and bottom.The vertical scrollbar in the completion widget is now hidden.
A reason should now be passed to
api.status.updateandapi.status.clearfor logging purposes. Not passing a reason is deprecated and will be removed in v0.5.0.
Fixed:#
Fuzzy path completion.
Setting
monitor_filesystemtofalseduring runtime.Crash when entering command mode with
{filesize}status module.XDG related directories such as XDG_CONFIG_HOME are created with mode 700 as expected by the XDG standard if they do not exist.
Writing image changes on quit.
Crash when running transform-related commands without valid pixmap.
Removed:#
All
completion.scrollbarrelated styles as the scrollbar is now hidden.
v0.3.0 (2019-11-01)#
Added:#
Elements in library and thumbnail can be selected with a mouse double click.
Library and thumbnail selection color is dimmed when the corresponding widget is not focused. It comes with the style options
library.selected.bg.unfocusandthumbnail.selected.bg.unfocus.Pop-up window to show keybindings for current mode. It can be shown with the
:keybindingscommand and comes with the style optionskeybindings.bindings.colorandkeybindings.highlight.color.Default left statusbar setting for manipulate mode showing basename, image size, modification date and the processing indicator.
New
:helpcommand to display help messages on commands, settings and some general information.
Changed:#
Any parsing errors when reading configuration files now log an error message and exit vimiv.
The
--configargument overrides the default user configuration path instead of appending to it. This is consistent with the--keyfileargument.Completely broken user styles now log an error message and exit vimiv instead of falling back to the default. This is consistent with the configuration file handling.
Class instances can now be retrieved from the object registry via
Class.instanceinstead ofobjreg.get(Class). The old syntax has been deprecated and will be removed in v0.4.0.Show full command description on
:command -hinstead of the default help created by argparse.Default statusbar message timeout increased to 1 minute to make
:command -hmore usable.
Fixed:#
The UI no longer blocks when processing working directory changes.
Search reacts appropriately when the working directory changes. If the content is updated, search is re-run. When a new directory is opened, search is cleared.
Support for colors with alpha-channel in styles file.
Status messages are shown even if the bar is hidden.
Setting the style option from the command-line via
-s style NAME.Crash when passing an invalid mode to commands.
Mixing command and search history when cycling history without substring match.
Switching between cycling history with and without substring match.
Aliasing to commands including the
%and%mwildcards.
Removed:#
Support for colors in 3-digit hex format (#RGB), use #RRGGBB instead.
v0.2.0 (2019-10-01)#
Added:#
A global
fontstyle option to set all fonts at once. If a local option such asstatusbar.fontis defined, it overrides the global option.New widget to display image metadata with the
:metadatacommand bound toiin image mode by default. It comes with the style optionsmetadata.bg,metadata.paddingandmetadata.border_radius.Completion of tag names for the
:tag-*commands.The
--commandargument to run arbitrary commands on startup.Logging is now modular, especially for debugging. This comes with the
--debugargument which accepts the names of modules to debug. E.g.--debug startupwould show all debug messages fromvimiv/startup.pywithout setting the global log level toDEBUG.It is now possible to chain multiple commands with
&&. E.g.:write && quit.New
--open-selectedflag for scroll and goto commands in library which automatically opens any selected image. Added keybindings arenandpfor scrolling up/down andgofor goto with this flag.
Changed:#
All styles are now based upon base16. Therefore custom styles must define the colors
base00tobase0f. All other style options are optional.Plugins now receive the additional information in the config file as first argument of their
initfunction.initwithout arguments has been deprecated and will be removed in v0.3.0.
Fixed:#
Elided text is now calculated correctly in the library.
Setting value completions are no longer appended to the existing suggestions when the setting is changed.
Overlay widgets are always raised in addition to shown ensuring them to be visible.
Completions are now mode dependent removing misleading completions such as undelete in manipulate mode.
Crash when trying to open tag which does not exist or has wrong permissions.
Crash when loading a plugin with a syntax error.
Running accepted manipulations multiple times as the changes were not reset.
Removed:#
The
--slideshowargument as it was broken and can easily be emulated by the new--commandargument using--command slideshow.
v0.1.0 (2019-08-15)#
Initial release of the Qt version.