diff options
37 files changed, 310 insertions, 823 deletions
| @@ -1,3 +1,28 @@ +Fri, 09 Nov 2018 17:17:15 +0100  Daniel Friesel <derf+feh@finalrewind.org> + +* Release v3.0 +    * Remove deprecated webcam scripts (feh-cam and gen-cam-menu) +    * Remove deprecated collage mode (-c/--collage) +    * Remove deprecated option --cycle-once (use --on-last-slide=quit instead) +    * Remove deprecated option --menu-bg +    * Change default save_filelist key from "f" to "L" (mnemonic: fileList) +    * Change default toggle_fullscreen key from "v" to "f" as this is also +      used by mplayer, mpv and similar +    * flip and rotation (keys "<", ">", "|", and "_") no longer change the +      underlying file. This leaves delete ("Ctrl+Delete") as the only +      destructive action which is enabled by default +    * Add option --edit, which makes flip and rotation change the underlying +      file as well as the displayed image. This was the default behaviour in +      feh 1.x and 2.x + +Sat, 27 Oct 2018 19:46:48 +0200  Daniel Friesel <derf+feh@finalrewind.org> + +* Release v2.28.1 +    * Do not ignore quit signals (SIGTERM, SIGINT, SIGQUIT) during preload +    * Add missing EXIF orientations 2, 4, 5, and 7 (when built with exif=1, +      patch by Olof-Joachim Frahm) +    * Improve randomness on non-glibc systems +  Mon, 17 Sep 2018 21:17:04 +0200  Daniel Friesel <derf+feh@finalrewind.org>  * Release v2.28 @@ -25,23 +25,6 @@ test-x11: all  install: install-man install-doc install-bin install-font install-img  install: install-icon install-examples install-applications -ifeq (${cam},1) -install: install-cam -uninstall: uninstall-cam -endif - -install-cam: -	@echo installing fe-cam and gen-cam-menu -	@cp man/feh-cam.1 man/gen-cam-menu.1 ${man_dir}/man1 -	@chmod 644 ${man_dir}/man1/feh-cam.1 ${man_dir}/man1/gen-cam-menu.1 -	@cp cam/feh-cam cam/gen-cam-menu ${bin_dir} -	@chmod 755 ${bin_dir}/feh-cam ${bin_dir}/gen-cam-menu - -uninstall-cam: -	rm -f ${man_dir}/man1/feh-cam.1 -	rm -f ${man_dir}/man1/gen-cam-menu.1 -	rm -f ${bin_dir}/feh-cam ${bin_dir}/gen-cam-menu -  install-man:  	@echo installing manuals to ${man_dir}  	@mkdir -p ${man_dir}/man1 @@ -1,12 +1,21 @@  [](https://travis-ci.org/derf/feh) -# feh -Imlib2 based image viewer +Feh – Image viewer and Cataloguer  --- - * http://feh.finalrewind.org/ - * http://linuxbrit.co.uk/feh/ - * #feh on irc.oftc.net +feh is a light-weight, configurable and versatile image viewer. +It is aimed at command line users, but can also be started from graphical file +managers. Apart from viewing images, it can compile text and thumbnail +listings, show (un)loadable files, set X11 backgrounds, and more. + +Features include filelists, various image sorting modes, custom action scripts, +and image captions. feh can be controlled by configurable keyboard and mouse +shortcuts, terminal input and signals.  When no file arguments or filelists are +specified, feh displays all files in the current directory. + +For more information, please refer to the [feh +website](https://feh.finalrewind.org/) or read the [feh +manual](https://man.finalrewind.org/1/feh/).  Dependencies  --- @@ -22,11 +31,10 @@ If built with exif=1:   * libexif-dev   * libexif12 -Recommended +Recommended Binaries  --- - * jpegtran  (supplied by the jpeg library, for lossless image rotation) - * convert  (supplied by ImageMagick, can be used to load unsupported formats) + * convert  (supplied by ImageMagick, can be used to load image formats not supported by Imlib2)  Installation  --- @@ -46,24 +54,23 @@ $ sudo make install  **Explanation:** feh ships some icons and an X11 desktop entry, which allow it to  be used from file managers, desktop menus and similar. However, installing -icons to /usr/local/share/... does not seem to work reliable in all cases. +icons to /usr/local/share/... does not seem to work reliably.  Because of this, when using "make install app=1", feh will install its icons  to /usr/share/..., even though they technically belong into /usr/local. - -ZSH Completion for feh is available [here](http://git.finalrewind.org/zsh/plain/etc/completions/_feh) +[ZSH completion for +feh](https://git.finalrewind.org/zsh/plain/etc/completions/_feh) is also +available.  Make flags  ---------- -Flags can be used to control the build and installation process. - -e.g. +feh's build process uses make flags to enable/disable optional features and +fine-tune the build and installation process. They can be passed as **make** +arguments or set as environment variables, like so:  ```bash  make flag=bool -``` -```bash  make install flag=bool  ```  or @@ -72,15 +79,13 @@ export flag=bool  make && make install  ``` -For example, `make xinerama=0 debug=1` will disable Xinerama support and produce a debug build. - -Available flags are: +The following flags are respected by the makefile. A default value of **1** +indicates that the corresponding feature is enabled by default.  | Flag | Default value | Description |  | :--- | :---: | :--- | -| app  | 0 | install icons to /usr/share, regardless of `DESTDIR` and `PREFIX, and call gtk-update-icon-cache afterwards | -| cam  | 0 | install deprecated feh-cam und gen-cam-menu scripts | -| curl | 1 | use libcurl to view http:// and similar images | +| app  | 0 | install icons to /usr/share, regardless of `DESTDIR` and `PREFIX`, and call gtk-update-icon-cache afterwards | +| curl | 1 | use libcurl to view https:// and similar images |  | debug | 0 | debug build, enables `--debug` |  | exif | 0 | Builtin EXIF tag display support |  | help | 0 | include help text (refers to the manpage otherwise) | @@ -88,18 +93,19 @@ Available flags are:  | verscmp | 1 | Support naturing sorting (`--version-sort`). Requires a GNU-compatible libc exposing `strverscmp` |  | xinerama | 1 | Support Xinerama/XRandR multiscreen setups | -So, by default **libcurl** and **Xinerama** are enabled, the rest is disabled. +For example, `make xinerama=0 debug=1` will disable Xinerama support and +produce a debug build; libcurl and natural sorting support will remain enabled.  Additionally, the standard variables `PREFIX` and `DESTDIR` are supported. -**PREFIX _(default: /usr)_** controls where the application and its data files +**PREFIX _(default: /usr/local)_** controls where the application and its data files  will be installed. It must be set both during `make` and `make install`.  **DESTDIR _(default: empty)_** sets the installation root during "make install". It  is mostly useful for package maintainers. -**Note:** config.mk is designed so that in most cases, you can set environment -variables instead of editing it. E.g.: +**Note:** Defaults are specified in `config.mk`. It is designed so that in most +cases, you can set environment variables instead of editing it. E.g.:  ```bash  CFLAGS='-g -Os' make @@ -114,26 +120,29 @@ Builtin EXIF support is maintained by Dennis Real, [here](https://github.com/rea  Testing (non-X)  --------------- + +The non-X11 parts of feh can be automatically tested by running +  ```bash  $ make test  ``` - -Requires **perl >= 5.10** with `Test::Command`. The tests are non-interactive and -work without X, so they can safely be run even on a headless buildserver. +This requires **perl >= 5.10** and the perl module `Test::Command`. Tests are +non-interactive and do not require a running X11, so they can safely be run on +a headless buildserver. -Testing (X) ------------ +Contributing +--- -Requires - * import (usually supplied by imagemagick) - * perl >= 5.10 with GD, Test::More and X11::GUITest - * twm - * Xephyr +Bugfixes are always welcome, just open a pull request :) -```bash -$ make test-x11 -``` +Before proposing a new feature, please consider the scope of feh: It is an +image viewer and cataloguer, not an image editor or similar. Also, its option +list is already pretty long. Please discuss your ideas in a feature request +before opening a pull request in this case. -**_Be aware that this is quite experimental, so far the X-tests have only been -run on one machine. So they may or may not work for you._** +Please keep in mind that feh's options, key bindings and format specifiers are +documented in two different places: The manual (man/feh.pre) and the help text +(src/help.raw). Although the help is not compiled in by default, it should be +kept up-to-date. On space-constrained embedded systems, it may be more useful +than the (significantly larger) man page. diff --git a/cam/ChangeLog b/cam/ChangeLog deleted file mode 100644 index 4a562bd..0000000 --- a/cam/ChangeLog +++ /dev/null @@ -1,14 +0,0 @@ -0.3 ---- -- added this changelog.. - -0.4 ---- -- added richlowe's patch.  since he pretty much rewrote everything, he's -an author, not a contributor. :) -- uses "use strict" now -- uses POD for documentation -- added title support in cam bookmarks file -- cmd line flag for different bookmars file -- getoppt_long use for command-line flags -- rmeoved richlow's damn nonstandard Pod::Usage stuff diff --git a/cam/README b/cam/README deleted file mode 100644 index e67d60e..0000000 --- a/cam/README +++ /dev/null @@ -1,45 +0,0 @@ -Cam 0.4 README -============== -This document was last updated on 20010223-1620-PST. -Please see the file COPYING for licensing information. - -Description -=========== -feh-cam is a Perl wrapper for feh that simlifies viewing webcams. It uses -keyed bookmarks.  Type "feh-cam --help" at the command line for usage -information. - -Webcam Information -================== -All webcam images are the property of their respective owners.  If you -enjoy the cam, you should check out the page too!  The initial list of -cam bookmarks (in the cam_bookmarks file) is a combination of webcams -scoured from the #E People Page (http://bma.debian.net/~bma/e-irc/), -my favorite webcams from the Stile Project's cam pages -(http://www.stileproject.com/), and additional #e people cams that -have come online since cam's original release (0.1). - -Installation -============ -- Copy the "feh-cam" script to a location in your PATH (ex /usr/bin, -  /usr/local/bin, or $HOME/bin), and make sure hte execute bit on the -  script is set (type "chmod a+x $HOME/.cam_bookmarks"). -- Copy the "cam_bookmarks" file to $HOME/.cam_bookmarks and make sure -  cam can see it by typing "feh-cam --list". -- Optionally, modify the options inside the feh-cam script.  You can pass -  feh any options before the image by adjusting the $PRE variable,  -  and any options after the image by adjustin the $POST variable. -  For example, I like to keep all cam images by default; you can enable -  this behavior with the -k command line option, or enable it permanently -  by adding it to the $PRE flags in feh-cam. - -About the Authors -================= -Paul Duncan <pabs@pablotron.org>, pabs on #e -http://www.pablotron.org/ - -Richard Lowe <richlowe@btinternet.com>, richlowe on #e -http://www.richlowe.btinternet.co.uk/ - -...but the real credit goes to Tom Gilbert for making feh, an awesome -image viewer. :) diff --git a/cam/cam_bookmarks b/cam/cam_bookmarks deleted file mode 100644 index 8d45413..0000000 --- a/cam/cam_bookmarks +++ /dev/null @@ -1,2 +0,0 @@ -nasa_shuttle=60,http://science.ksc.nasa.gov/shuttle/countdown/video/chan2large.jpg - diff --git a/cam/feh-cam b/cam/feh-cam deleted file mode 100755 index 29b254f..0000000 --- a/cam/feh-cam +++ /dev/null @@ -1,195 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Getopt::Long; - -############################################# -############# CAM RUN-TIME OPTIONS ########## -############################################# -my $feh   = "feh"; - -# additional feh cmdline options -my $PRE  = " -q -G -Twebcam -1 0 -0 1 "; -my $POST = "";  -############################################# -############################################# - -# Options -my $help        = ''; -my $fullscreen  = ''; -my $geometry    = ''; -my $list        = ''; -my $verbose     = ''; -my $add         = ''; -my $keep        = ''; -my $deftitle    = '%cCAM - %u'; -my $title       = ''; -my $bp          = $ENV{HOME}."/.cam_bookmarks"; -my $DEBUG       = 0; - -# check args -&print_usage_and_exit unless (@ARGV); - -print STDERR "Note: feh-cam will be removed from the feh distribution in 2013.\n"; -print STDERR "Please mail derf\@finalrewind.org if you still use it.\n"; - - -# Url, Refresh, and bookmarks -my $url = ""; -my $ref = ""; -my %bms = (); - -GetOptions('help|?|h'                    => \$help, -           'full-screen|f|giblets-mom' => \$fullscreen, -           'list|l'                      => \$list, -           'geometry|g=s'                => \$geometry, -           'verbose|v'                   => \$verbose, -           'add|a'                       => \$add, -           'keep-images|k|save-pr0n'     => \$keep, -           'title|t=s'                   => \$title, -           'debug|d'                     => \$DEBUG, -           'bookmarks|b=s'               => \$bp -           ); - -my $key = shift @ARGV; - -&print_usage_and_exit if ($help); - -if ($verbose)    { -    $PRE .= " -V "; -} - -if ($fullscreen) { -      $PRE =~ s/-w//; -      $PRE .= " --full-screen --auto-zoom "; -} - -if ($geometry) { -  $PRE .= " --geometry $geometry "; -} - -# if requested, add a key/url pair to bookmarks file -if ($add)    { -    my $mytitle          = ''; -    ($url,$ref,$mytitle) = @ARGV; -    die "Bad key syntax\n" unless ($key && $url && $ref); - -    $mytitle="" unless ($mytitle); - -    open(BMF, ">>$bp") or die "Couldn't open bookmarks file \"$bp\": $!\n"; -    print BMF "$key=$ref,$url \"$mytitle\"\n"; -    close BMF; -    print "Added URL key \"$key\" = $url, $ref.\n"; # its useful to have this even if you arent debugging --richlowe -    exit 0; -} - -if ($keep)    { -    $PRE .= " -k "; -} - - - -# load bookmarks -open(BMF, "$bp") or die "Couldn't open bookmarks file \"$bp\": $!\n"; -foreach (<BMF>)    { -    next unless /^(.*?)=(.*)$/; -    $bms{$1} = $2; -    print "key=$1, url=$2\n" if ($DEBUG); -} -close BMF; - -# if requested, dump a list of key/url pair values -if ($list) { -    foreach (sort keys %bms)    { -        my $t = $bms{$_};  - -           $t =~ s/^(.+?),(.+?)(^ "(.*)"|)?$/$2/; -        chomp $t; -        print "$_ = $t, $1, $3\n"; -    } -    exit 0; -} - -# main loop -MAIN: { -    do { -        $title=""; -        $url = $bms{$key}; -        die "Couldn't find URL key \"$key.\"\n" unless($url); -         -        $url =~ s/^(.+?),(.+?)( "(.*)")?$/$2/; -        $ref = $1; -    -         if ($4) { -            $title = $4; -         } else { -           $title = $deftitle; -         } - -        if ($title) { -            $title =~ s/\%c/$key/g; -            $title =~ s/\%u/$url/g; -            $title =~ s/\%r/$ref/g; -            $title =~ s/\%\%/\%/g; -            $title = " --title \"$title\" "; -        } -     -        my $cmd = "$feh $PRE $title -T".$key."cam -R $ref $url $POST"; -        print "$cmd\n" if ($DEBUG); -        FORK: { -           my $pid; -            if ($pid = fork) { -                # We're a daddy! :) -            } elsif (defined $pid) { -                # child -                exec "$cmd" or die "Couldnt exec() $feh: $!\n"; -            } elsif ( $! =~ /No more process/) { -                sleep 5; -                redo FORK; -            } else { -                # wtf? -                die "Unrecoverable fork() error: $!\n"; -            } -        } -    } while ($key = shift @ARGV); -} - -    -sub print_usage_and_exit()    { -    print <<END_USAGE; -$0 0.4 -by Paul Duncan <pabs\@pablotron.org>, and -   Richard Lowe <richlowe\@btinternet.com> - -Description: -  A convenient webcam wrapper for feh. - -Usage: -  $0 <keys> -    Load the urls specified by the given keys. -    key : a url key stored in the bookmarks file (\"$bp\"). -  $0 <-a|--add> key url refresh -    Add a key to the bookmarks file. -    key : short key (ex \"jenni\"), -    url : url (ex \"http://www.jennicam.org/webcam/cam.jpg\"), -    refresh : refresh, in seconds (ex 120) -  $0 <-l|--list> -    List each url key in the bookmarks file (\"$bp\"). -  $0 [-f|--full-screen] keys -    Start feh in full-screen mode (aka --giblets-mom \"viewing\" mode). -  $0 [-k|--keep-images] keys -    Save each image in the current directory (aka --save-pr0n). -  $0 [-g|--geometry] xxx -    Use window geometry xxx (e.g. 640x480). -  $0 [-v|--verbose] options -    Start feh in verbose mode (feh -V). -  $0 <-h|-?|--help> -    Display usage information (this screen). - -Notes: -Thanks to giblet for feh, an awesome image and webcam viewing program, -and raster for Imlib2. -END_USAGE -    exit(-1); -} - diff --git a/cam/gen-cam-menu b/cam/gen-cam-menu deleted file mode 100755 index 710070b..0000000 --- a/cam/gen-cam-menu +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/sh - -###################################################################### -# gen_cam_menu.sh 0.1                                                # -# by Paul Duncan <pabs@pablotron.org>                                # -#                                                                    # -# This script will generate a menu of cam bookmarks for              # -# Enlightenment DR0.16.x.  TYou can safely run this script more than # -# once; it won't add an another entry to the left-click menu if it's # -# already been run once.  It doesn't delete any existing menu        # -# entries, and it backs up your existing menu files as well. (just   # -# in case I screwed up.. hehe).  THe two variables below allow you   # -# rename the left-click menuitem, and the menu title.                # -#                                                                    # -#                                                                    # -MENU_ITEM="Webcams";                                                 # -MENU_TITLE="Webcam List";                                            # -BMARKS=$HOME"/.cam_bookmarks";                                       # -#                                                                    #   -###################################################################### - - -C_MENUFILE="webcam.menu"; -F_MENUFILE="file.menu"; -C_MENU=$HOME"/.enlightenment/"$C_MENUFILE; -F_MENU=$HOME"/.enlightenment/"$F_MENUFILE; - -# make backups, just in case -cp -f $C_MENU $C_MENU"-cam_menu.backup" -cp -f $F_MENU $F_MENU"-cam_menu.backup" - -echo "Note: gen-cam-menu will be removed from the feh distribution by 2013." > /dev/stderr -echo "Please mail derf@finalrewind.org if you still use it." > /dev/stderr - -# generate cam menu -echo "Generating \""$C_MENU"\"."; -echo "\"$TITLE\"" > "$C_MENU"; -cat $BMARKS | perl -e "while (<>) { /(.*?)=/; \$keys{\$1}=\"1\"; } foreach(sort keys %keys) { /(.)(.*$)/; print \"\\\"\".uc(\$1).\"\$2\\\" NULL exec \\\"feh-cam \$1\$2\\\"\\n\"; }">> $C_MENU; - -# add entry to file menu if there isn't one -echo "Generating \""$F_MENU"\"."; -perl -i -e "\$already_there=0; while (<>) { \$already_there++ if (/$MENU_ITEM/); print \"\\\"$MENU_ITEM\\\" NULL menu \\\"$C_MENUFILE\\\"\\n\" if (!\$already_there&&/Restart/); print; }" $F_MENU; - -echo "Done."; @@ -2,7 +2,6 @@ PACKAGE ?= feh  VERSION ?= ${shell git describe --dirty}  app ?= 0 -cam ?= 0  curl ?= 1  debug ?= 0  exif ?= 0 diff --git a/examples/themes b/examples/themes index d315942..2d77770 100644 --- a/examples/themes +++ b/examples/themes @@ -41,11 +41,6 @@ booth --full-screen --hide-pointer --slideshow-delay 20  # Screw xscreensaver, use feh =)  screensave --recursive --full-screen --randomize --slideshow-delay 10 --hide-pointer -# Different menus -aqua --menu-bg /usr/share/feh/images/menubg_aqua.png -sky --menu-bg /usr/share/feh/images/menubg_sky.png -black --menu-bg /usr/share/feh/images/menubg_black.png -  # Some more examples, used by the feh developer  rfs --full-screen --hide-pointer --auto-zoom --randomize diff --git a/man/feh-cam.pre b/man/feh-cam.pre deleted file mode 100644 index 4a02753..0000000 --- a/man/feh-cam.pre +++ /dev/null @@ -1,57 +0,0 @@ -.Dd $DATE$ -.Dt FEH-CAM 1 -.Os -. -.Sh NAME -.Nm feh-cam -.Nd utility for viewing live webcam images -.Sh SYNOPSIS -.Nm -.Op Ar options -.Ar keys -. -.Sh VERSION -This manual documents feh-cam, shipped with feh version $VERSION$ -. -.Sh DEPRECATION WARNING -. -This tool will be removed from the feh distribution by 2013. -. -.Pp -. -If you still use it, please contact me at -.Aq derf@finalrewind.org -. -.Sh DESCRIPTION -.Nm -is a perl wrapper for feh which simplifies viewing webcams using keyed -bookmarks.  It helps manage viewing your favourite webcam sites with feh. -. -.Sh OPTIONS -.Bl -tag -width indent -.It Cm -a , --add Ar key url refresh -Add -.Ar url -as -.Ar key -to the bookmarks file; when viewing, reload it every -.Ar refresh -seconds -.It Cm -l , --list -List each url / key pair in the bookmarks file -.It Cm -f , --full-screen -Start feh in full-screen mode -.It Cm -k , --keep-images -Save each webcam image in the current directory -.It Cm -g , --geometry Ar width No x Ar height -Use window geometry -.Ar width No x Ar height -.It Cm -v , --verbose -Start feh in verbose mode -.El -. -.Sh FILES -The bookmarks are stored in -.Pa ~/.cam_bookmarks -.Sh SEE ALSO -.Xr feh 1 diff --git a/man/feh.pre b/man/feh.pre index 2587501..f59d082 100644 --- a/man/feh.pre +++ b/man/feh.pre @@ -32,28 +32,22 @@ $MAN_XINERAMA$, builtin EXIF support $MAN_EXIF$$MAN_DEBUG$  .Sh DESCRIPTION  .  .Nm -is a mode-based image viewer. -It is especially aimed at command line users who need a fast image viewer -without huge GUI dependencies, though it can also be started by -.Pq graphical -file managers to view an image. -By default -.Pq unless arguments or a filelist are specified , -.Nm -displays all files in the current directory. +is a light-weight, configurable and versatile image viewer. +It is aimed at command line users, but can also be started from graphical file +managers. +Apart from viewing images, it can compile text and thumbnail +listings, show (un)loadable files, set X11 backgrounds, and more.  .  .Pp  . +Features include filelists, various image sorting modes, custom action scripts, +and image captions.  .Nm -supports filelists, various image sorting modes, image captions, HTTP and more. -It can be controlled by configurable keyboard and mouse shortcuts, terminal +can be controlled by configurable keyboard and mouse shortcuts, terminal  input and signals. -. -.Pp -. -In many desktop environments, +When no file arguments or filelists are specified,  .Nm -can also be used as wallpaper setter. +displays all files in the current directory.  .  .Pp  . @@ -96,7 +90,7 @@ and its size can be limited by height, width or both.  .  Index mode forms an index print from the filelist.  Image thumbnails are shown along with the filename, -filesize and pixel size, printed using a truetype +size and dimensions, printed using a truetype  font of your choice.  The resulting image can be viewed or saved, and its size  can be limited by height, width or both. @@ -148,7 +142,7 @@ also supports RAW files provided by cameras and will display the embedded  thumbnails.  Use  .Cm --conversion-timeout Ar num -with a non-negative value to enable it. +with a non-negative value to enable support for these formats.  .  .  .Sh OPTIONS @@ -260,6 +254,22 @@ and viewing image  the caption will be looked for in  .Qq images/captions/foo.jpg.txt .  . +.It Cm --conversion-timeout Ar timeout +. +.Nm +can use ImageMagick to try converting unloadable files into a supportad +file format. +As this can take a long time, it is disabled by default. +Set +.Ar timeout +to a non-negative value to enable it. +A positive value +specifies after how many seconds conversion attempts should be aborted, +zero causes +.Nm +to try indefinitely. +Negative values restore the default by disabling conversion altogether. +.  .It Cm -L , --customlist Ar format  .  Don't display images, print image info according to @@ -289,6 +299,12 @@ Show overlay texts  .Pq as created by Cm --draw-filename No et al  on a semi-transparent background to improve their readability  . +.It Cm --edit +. +Enable basic editing of files. This makes rotation and mirroring +.Pq bound to Qo < Qc , Qo > Qc , Qo | Qc , and Qo _ Qc by default +change the underlying file and not just its displayed content. +.  .It Cm -f , --filelist Ar file  .  This option is similar to the playlists used by music software. @@ -370,14 +386,13 @@ to get a progress bar.  .  Make the window fullscreen.  Note that in this mode, large images will always be scaled down to fit the -screen, +screen, and  .Cm --zoom Ar zoom  only affects smaller images and never scales larger than necessary to fit the  screen size.  The only exception is a  .Ar zoom -of 100, in which case images will always be shown at 100% zoom, no matter -their dimensions. +of 100, in which case images will always be shown at 100% zoom.  .  .Pp  . @@ -388,17 +403,17 @@ The thumbnail list itself will still be windowed.  .  .It Cm -g , --geometry Ar width Cm x Ar height | Cm + Ar x Cm + Ar y | Ar width Cm x Ar height Cm + Ar x Cm + Ar y  . -Limit (and don't change) the window size. -Takes an X-style geometry -.Ar string -like 640x480 with optional +x+y window offset. -Use +Use a fixed window size as specified in the X-style geometry +.Ar string , +e.g. 640x480. +An optional +x+y window offset can be specified. +Combine with  .Cm --scale-down  to scale down larger images like in fullscreen mode.  . -Also note that this option does not enforce the geometry, changing it by a tiling +Note that this option does not enforce the window size; changing it by a tiling  WM or manually is still possible. -After each resize, the resulting window size is used as the new size limit. +However, auto-resize remains disabled.  .  .It Cm -Y , --hide-pointer  . @@ -415,8 +430,9 @@ Accepted values: default, checks, or an XColor  .  In windowed mode, the default is checks  .Pq a checkered background so transparent image parts are easy to see . -In fullscreen and background setting mode, checks is not accepted and the -default is black. +In fullscreen and background setting mode, +.Cm checks +is not accepted and the default is black.  .  .It Cm -i , --index  . @@ -445,6 +461,12 @@ is set to  the output will not be displayed by default, but has to be enabled by the  toggle_info key.  . +.It Cm --insecure +. +When viewing files with HTTPS, this option disables all certificate checks.  It +allows images on sites with self-signed or expired certificates to be opened, +but is no more secure than plain HTTP. +.  .It Cm -k , --keep-http  .  When viewing files using HTTP, @@ -455,13 +477,6 @@ specified by  .Cm --output-dir ,  or in the current working directory.  . -.It Cm --insecure -. -When viewing files with HTTPS, this option disables strict hostname and peer -checking. -This allows images on sites with self-signed certificates to be opened, but is -no more secure than plain HTTP. -.  .It Cm --keep-zoom-vp  .  When switching images, keep zoom and viewport settings @@ -481,16 +496,6 @@ Don't display images.  Just print out their names if imlib2 can successfully load them.  Returns false if at least one image failed to load.  . -.It Cm --conversion-timeout Ar timeout -. -Stop trying to convert unloadable files after -.Ar timeout -seconds. -Negative values disable conversion altogether, zero causes -.Nm -to try indefinitely. -By default, conversion is disabled. -.  .It Cm --max-dimension Ar width No x Ar height  .  Only show images with width <= @@ -623,8 +628,9 @@ to the content of those directories, all the way down to the bottom level.  .  .It Cm --no-recursive  . -Don't recursively expand any directories (enabled by default). -Useful to override theme options. +Don't recursively expand any directories. +This is the default, but this option is useful to override themes containing +.Cm --recursive .  .  .It Cm -R , --reload Ar int  . @@ -632,7 +638,7 @@ Reload filelist and current image after  .Ar int  seconds.  Useful for viewing HTTP webcams or frequently changing directories. -.Pq Note that the filelist reloading is still experimental. +.Pq Note that filelist reloading is still experimental.  .  .Pp  . @@ -668,10 +674,10 @@ In tiling environments, this also causes the image to be centered in the window.  Scroll  .Ar count  pixels whenever scroll_up, scroll_down, scroll_left or scroll_right is pressed. -Note that this option accepts negative numbers in case you need to inverse the -scroll direction; see +Note that this option accepts negative numbers in case you need to reverse the +scroll direction. See  .Sx KEYS CONFIG SYNTAX -to change it permanently. +for how to reverse it permanently.  Default: 20  .  .It Cm -D , --slideshow-delay Ar float @@ -688,16 +694,33 @@ in paused mode.  .  .It Cm -S , --sort Ar sort_type  . -The file list may be sorted according to image parameters. +Sort file list according to image parameters.  Allowed sort types are: name, filename, dirname, mtime, width, height, pixels,  size, format. -For sort modes other than name, filename, dirname, or mtime, a preload run will -be necessary, causing a delay proportional to the number of images in the list. +For sort modes other than name, filename, dirname, or mtime, a preload run is +necessary, causing a delay proportional to the number of images in the list. +. +.Pp +. +.Cm mtime +starts with the most recently modified image, +.Cm width , height , pixels +and +.Cm size +start with the smallest. +Use +.Cm --reverse +to sort by oldest or largest first.  .  .Pp  . -The mtime sort mode sorts images by most recently modified. -To sort by oldest first, reverse the filelist with --reverse. +For +.Cm name , filename , +and +.Cm dirname , +you can use +.Cm --version-sort +to sort numbers naturally, so that e.g. 10.jpg comes after 2.jpg.  .  .It Cm -| , --start-at Ar filename  . @@ -781,11 +804,17 @@ output version information and exit.  .It Cm --version-sort  .  .Pq optional feature, $MAN_VERSCMP$ in this build -Use natural sorting for file and directory names. +When combined with +.Cm --sort name , --sort filename , +or +.Cm --sort dirname : +use natural sorting for file and directory names.  In this mode, filenames are sorted as an ordinary human would expect, e.g.  .Qq 2.jpg  comes before  .Qq 10.jpg . +Note that this option only has an effect when a sort mode is set using +.Cm --sort .  .  .It Cm --xinerama-index Ar screen  . @@ -966,20 +995,14 @@ be printed.  .  Redraw thumbnail window every  .Ar n -images. -In -.Nm -<= 1.5, the thumbnail image used to be redrawn after every computed thumbnail -.Pq so, it updated immediately . -However, since the redrawing takes quite long -.Pq especially for thumbnail mode on a large filelist , -this turned out to be a major performance penalty. -As a workaround, the thumbnail image is redrawn every 10th image now by default. +images while generating thumbnails. +Redrawing takes quite long, so the default is 10.  Set  .Ar n No = 1 -to get the old behaviour, -.Ar n No = 0 -will only redraw once all thumbnails are loaded. +to update the thumbnail window immediately. +With +.Ar n No = 0 , +there will only be one redraw once all thumbnails are loaded.  .  .El  . @@ -1215,7 +1238,7 @@ If the files are not found in that directory, it will also try  All config files treat lines starting with a  .Qq #  character as comments. -Note that mid-line comments are not supported. +Comments at the end of a line are not supported.  .  .  .Sh THEMES CONFIG SYNTAX @@ -1408,10 +1431,9 @@ Toggle filename display  .Pq optional feature, $MAN_EXIF$ in this build  Toggle EXIF tag display  . -.It f Bq save_filelist +.It f Bq toggle_fullscreen  . -Save the current filelist as -.Qq feh_PID_ID_filelist +Toggle fullscreen  .  .It g Bq toggle_fixed_geometry  . @@ -1435,10 +1457,15 @@ When enabled,  .Nm  will keep zoom and X, Y offset when switching images.  . +.It L Bq save_filelist +. +Save the current filelist as +.Qq feh_PID_ID_filelist +.  .It m Bq toggle_menu  .  Show menu. -Use the arrow keys and return to select items, +Use the arrow keys and return to select items, and  .Aq escape  to close the menu.  . @@ -1471,10 +1498,6 @@ Useful for webcams  Save the current image as  .Qq feh_PID_ID_FILENAME  . -.It v Bq toggle_fullscreen -. -Toggle fullscreen -.  .It w Bq size_to_image  .  Change window size to fit current image size @@ -1502,8 +1525,14 @@ are grouped together.  .  .It < , > Bq orient_3 , orient_1  . -In place editing - rotate the image 90 degrees (counter)clockwise. -The rotation is lossless, but may create artifacts in some image corners when +rotate the image 90 degrees (counter)clockwise. +. +.Pp +. +When +.Cm --edit +is used, this also rotates the image in the underlying file. +Rotation is lossless, but may create artifacts in some image corners when  used with JPEG images.  Rotating in the reverse direction will make them go away.  See @@ -1523,11 +1552,19 @@ for details on how to change this flag.  .  .It _ Bq flip  . -In place editing - vertical flip +Vertically flip image. +When +.Cm --edit +is used, this also flips the image in the underlying file +.Pq see above .  .  .It | Bq mirror  . -In place editing - horizontal flip +Horizontally flip image. +When +.Cm --edit +is used, this also flips the image in the underlying file +.Pq see above .  .  .It 0 .. 9 Bq action_0 .. action_9  . @@ -1586,7 +1623,7 @@ Scroll up  .It Ao keypad Down Ac , Ao Ctrl+Down Ac Bq scroll_down  .  Scroll down. -Note that the scroll keys work without anti-aliasing for performance reasons, +Note that the scroll keys work without anti-aliasing for performance reasons;  hit the render key after scrolling to antialias the image.  .  .It Aq Alt+Left Bq scroll_left_page @@ -1820,7 +1857,7 @@ Switch to previous image  .  Here are some examples of useful option combinations.  See also: -.Aq http://feh.finalrewind.org/examples/ +.Aq https://feh.finalrewind.org/examples/  .  .Bl -tag -width indent  . @@ -1892,7 +1929,7 @@ Same as above  .  Show some EXIF information, extracted by exifprobe/exifgrep  . -.It feh --action 'rm %F' -rl --max-dim 1000x800 +.It feh --action 'rm %F' -rl --max-dimension 1000x800  .  Recursively remove all images with dimensions below or equal to 1000x800 pixels  from the current directory. @@ -1902,23 +1939,24 @@ from the current directory.  .  .Sh DEPENDENCIES  . +When +.Cm --edit +is used,  .Nm -requires the +needs the  .Cm jpegtran  and  .Cm jpegexiforient  binaries  .Pq usually distributed in Qo libjpeg-progs Qc or similar -for lossless rotation. +for lossless JPEG rotation.  .  .Pp  . -To view images from URLs such as http://, you need +To view images from URLs such as http://,  .Nm -compiled with libcurl support (enabled by default). -See the -.Sx VERSION -section. +must be compiled with libcurl support. +It is $MAN_CURL$ in this build  .  .  .Sh BUGS @@ -2025,4 +2063,4 @@ Tom Gilbert  .Pp  .  See also: -http://feh.finalrewind.org +https://feh.finalrewind.org diff --git a/man/gen-cam-menu.pre b/man/gen-cam-menu.pre deleted file mode 100644 index 18064f1..0000000 --- a/man/gen-cam-menu.pre +++ /dev/null @@ -1,33 +0,0 @@ -.Dd $DATE$ -.Dt GEN-CAM-MENU 1 -.Os -. -.Sh NAME -.Nm gen-cam-menu -.Nd utility for updating Enlightenment user menus for feh-cam -.Sh SYNOPSIS -.Nm -. -.Sh VERSION -This manual documents gen-cam-menu, shipped with feh version $VERSION$ -. -.Sh DEPRECATION WARNING -. -This tool will be removed from the feh distribution by 2013. -. -.Pp -. -If you still use it, please contact me at -.Aq derf@finalrewind.org -. -.Sh DESCRIPTION -.Nm -is a shell script which creates Enlightenment user menu entries for the -bookmarks stored by -.Xr feh-cam 1 -in -.Pa ~/.enlightenment/ . -. -.Sh SEE ALSO -.Xr feh 1 , -.Xr feh-cam 1 diff --git a/share/images/menubg_aluminium.png b/share/images/menubg_aluminium.pngBinary files differ deleted file mode 100644 index eed00f1..0000000 --- a/share/images/menubg_aluminium.png +++ /dev/null diff --git a/share/images/menubg_aqua.png b/share/images/menubg_aqua.pngBinary files differ deleted file mode 100644 index 3a72590..0000000 --- a/share/images/menubg_aqua.png +++ /dev/null diff --git a/share/images/menubg_black.png b/share/images/menubg_black.pngBinary files differ deleted file mode 100644 index 08b4c2b..0000000 --- a/share/images/menubg_black.png +++ /dev/null diff --git a/share/images/menubg_brushed.png b/share/images/menubg_brushed.pngBinary files differ deleted file mode 100644 index 32fad47..0000000 --- a/share/images/menubg_brushed.png +++ /dev/null diff --git a/share/images/menubg_sky.png b/share/images/menubg_sky.pngBinary files differ deleted file mode 100644 index e0be8ca..0000000 --- a/share/images/menubg_sky.png +++ /dev/null diff --git a/src/Makefile b/src/Makefile index 8a9f97e..ac4d2fe 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,7 +1,6 @@  include ../config.mk  TARGETS = \ -	collage.c \  	events.c \  	feh_png.c \  	filelist.c \ diff --git a/src/collage.c b/src/collage.c deleted file mode 100644 index 2a4d9f9..0000000 --- a/src/collage.c +++ /dev/null @@ -1,208 +0,0 @@ -/* collage.c - -Copyright (C) 1999-2003 Tom Gilbert. -Copyright (C) 2010-2018 Daniel Friesel. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies of the Software and its documentation and acknowledgment shall be -given in the documentation and software packages that this Software was -used. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -*/ - -#include "feh.h" -#include "winwidget.h" -#include "filelist.h" -#include "options.h" - -void init_collage_mode(void) -{ -	Imlib_Image im_main; -	Imlib_Image im_temp; -	int ww, hh, www, hhh, xxx, yyy; -	int w = 800, h = 600; -	int bg_w = 0, bg_h = 0; -	winwidget winwid = NULL; -	Imlib_Image bg_im = NULL, im_thumb = NULL; -	feh_file *file = NULL; -	unsigned char trans_bg = 0; -	gib_list *l, *last = NULL; - -	mode = "collage"; - -	weprintf("the --collage option (aka collage mode) is deprecated\n" -			"and will be removed soon\n"); - -	/* Use bg image dimensions for default size */ -	if (opt.bg && opt.bg_file) { -		if (!strcmp(opt.bg_file, "trans")) -			trans_bg = 1; -		else { - -			D(("Time to apply a background to blend onto\n")); -			if (feh_load_image_char(&bg_im, opt.bg_file) != 0) { -				bg_w = gib_imlib_image_get_width(bg_im); -				bg_h = gib_imlib_image_get_height(bg_im); -			} -		} -	} - -	if (!opt.limit_w || !opt.limit_h) { -		if (bg_im) { -			if (opt.verbose) -				fputs(PACKAGE -					": No size restriction specified for collage.\n" -					" You did specify a background however, so the\n" -					" collage size has defaulted to the size of the image\n", -					stderr); -			opt.limit_w = bg_w; -			opt.limit_h = bg_h; -		} else { -			if (opt.verbose) -				fputs(PACKAGE -					": No size restriction specified for collage.\n" -					" - For collage mode, you need to specify width and height.\n" -					" Using defaults (width 800, height 600)\n", -					stderr); -			opt.limit_w = 800; -			opt.limit_h = 600; -		} -	} - -	w = opt.limit_w; -	h = opt.limit_h; -	D(("Limiting width to %d and height to %d\n", w, h)); - -	im_main = imlib_create_image(w, h); - -	if (!im_main) -		eprintf("Imlib error creating image"); - -	if (bg_im) -		gib_imlib_blend_image_onto_image(im_main, bg_im, -				gib_imlib_image_has_alpha(bg_im), 0, 0, -				bg_w, bg_h, 0, 0, w, h, 1, 0, 0); -	else if (trans_bg) { -		gib_imlib_image_fill_rectangle(im_main, 0, 0, w, h, 0, 0, 0, 0); -		gib_imlib_image_set_has_alpha(im_main, 1); -	} else { -		/* Colour the background */ -		gib_imlib_image_fill_rectangle(im_main, 0, 0, w, h, 0, 0, 0, 255); -	} - -	if (opt.display) { -		winwid = winwidget_create_from_image(im_main, WIN_TYPE_SINGLE); -		winwidget_rename(winwid, PACKAGE " [collage mode]"); -		winwidget_show(winwid); -	} - -	for (l = filelist; l; l = l->next) { -		file = FEH_FILE(l->data); -		if (last) { -			filelist = feh_file_remove_from_list(filelist, last); -			last = NULL; -		} -		D(("About to load image %s\n", file->filename)); -		if (feh_load_image(&im_temp, file) != 0) { -			D(("Successfully loaded %s\n", file->filename)); -			if (opt.verbose) -				feh_display_status('.'); -			www = opt.thumb_w; -			hhh = opt.thumb_h; -			ww = gib_imlib_image_get_width(im_temp); -			hh = gib_imlib_image_get_height(im_temp); - -			if (opt.aspect) { -				double ratio = 0.0; - -				/* Keep the aspect ratio for the thumbnail */ -				ratio = ((double) ww / hh) / ((double) www / hhh); - -				if (ratio > 1.0) -					hhh = opt.thumb_h / ratio; -				else if (ratio != 1.0) -					www = opt.thumb_w * ratio; -			} - -			if ((!opt.stretch) && ((www > ww) || (hhh > hh))) { -				/* Don't make the image larger unless stretch is specified */ -				www = ww; -				hhh = hh; -			} - -			/* pick random coords for thumbnail */ -			xxx = ((w - www) * ((double) rand() / RAND_MAX)); -			yyy = ((h - hhh) * ((double) rand() / RAND_MAX)); -			D(("image going on at x=%d, y=%d\n", xxx, yyy)); - -			im_thumb = gib_imlib_create_cropped_scaled_image(im_temp, -					0, 0, ww, hh, www, hhh, 1); -			gib_imlib_free_image_and_decache(im_temp); - -			if (opt.alpha) { -				DATA8 atab[256]; - -				D(("Applying alpha options\n")); -				gib_imlib_image_set_has_alpha(im_thumb, 1); -				memset(atab, opt.alpha_level, sizeof(atab)); -				gib_imlib_apply_color_modifier_to_rectangle(im_thumb, -						0, 0, www, hhh, NULL, NULL, NULL, atab); -			} -			gib_imlib_blend_image_onto_image(im_main, im_thumb, -					gib_imlib_image_has_alpha(im_thumb), 0, 0, www, hhh, xxx, -					yyy,www, hhh, 1, gib_imlib_image_has_alpha(im_thumb), 0); -			gib_imlib_free_image_and_decache(im_thumb); -		} else { -			last = l; -			if (opt.verbose) -				feh_display_status('x'); -		} -		if (opt.display) { -			winwidget_render_image(winwid, 0, 0); -			if (!feh_main_iteration(0)) -				exit(0); -		} -	} -	if (opt.verbose) -		fputs("\n", stderr); - -	if (opt.output && opt.output_file) { -		char output_buf[1024]; -		if (opt.output_dir) -			snprintf(output_buf, 1024, "%s/%s", opt.output_dir, opt.output_file); -		else { -			strncpy(output_buf, opt.output_file, 1023); -			output_buf[1023] = '\0'; -		} -		gib_imlib_save_image(im_main, output_buf); -		if (opt.verbose) { -			int tw, th; - -			tw = gib_imlib_image_get_width(im_main); -			th = gib_imlib_image_get_height(im_main); -			fprintf(stderr, PACKAGE ": File saved as %s\n", output_buf); -			fprintf(stderr, -				"    - Image is %dx%d pixels and contains %d thumbnails\n", -				tw, th, (tw / opt.thumb_w) * (th / opt.thumb_h)); -		} -	} - -	if (!opt.display) -		gib_imlib_free_image_and_decache(im_main); - -	return; -} @@ -132,7 +132,6 @@ void init_xinerama(void);  #endif				/* HAVE_LIBXINERAMA */  void init_multiwindow_mode(void);  void init_thumbnail_mode(void); -void init_collage_mode(void);  void init_index_mode(void);  void init_slideshow_mode(void);  void init_list_mode(void); diff --git a/src/filelist.c b/src/filelist.c index fc9fa35..3f3c96d 100644 --- a/src/filelist.c +++ b/src/filelist.c @@ -491,7 +491,7 @@ void feh_prepare_filelist(void)  	 * we can create a properly sized thumbnail list.  	 */  	if (opt.list || opt.preload || opt.customlist || (opt.sort > SORT_MTIME) -			|| (opt.filter_by_dimensions && (opt.index || opt.collage || opt.thumbs || opt.bgmode))) { +			|| (opt.filter_by_dimensions && (opt.index || opt.thumbs || opt.bgmode))) {  		/* For these sort options, we have to preload images */  		filelist = feh_file_info_preload(filelist);  		if (!gib_list_length(filelist)) diff --git a/src/gib_imlib.c b/src/gib_imlib.c index 8f401aa..7858cb7 100644 --- a/src/gib_imlib.c +++ b/src/gib_imlib.c @@ -717,3 +717,15 @@ void gib_imlib_image_orientate(Imlib_Image im, int orientation)    imlib_context_set_image(im);    imlib_image_orientate(orientation);  } + +void gib_imlib_image_flip_horizontal(Imlib_Image im) +{ +  imlib_context_set_image(im); +  imlib_image_flip_horizontal(); +} + +void gib_imlib_image_flip_vertical(Imlib_Image im) +{ +  imlib_context_set_image(im); +  imlib_image_flip_vertical(); +} diff --git a/src/gib_imlib.h b/src/gib_imlib.h index 6a16a0c..07daabe 100644 --- a/src/gib_imlib.h +++ b/src/gib_imlib.h @@ -181,6 +181,8 @@ void gib_imlib_parse_color(char *col, int *r, int *g, int *b, int *a);  void gib_imlib_parse_fontpath(char *path);  Imlib_Font gib_imlib_load_font(char *name);  void gib_imlib_image_orientate(Imlib_Image im, int orientation); +void gib_imlib_image_flip_horizontal(Imlib_Image im); +void gib_imlib_image_flip_vertical(Imlib_Image im);  #ifdef __cplusplus  } diff --git a/src/gib_list.c b/src/gib_list.c index 5384d98..a8ba1dd 100644 --- a/src/gib_list.c +++ b/src/gib_list.c @@ -362,7 +362,7 @@ gib_list_randomize(gib_list * list)     }     for (i = 0; i < len - 1; i++)     { -      r = i + rand() / (RAND_MAX / (len - i) + 1 ); +      r = i + random() / (RAND_MAX / (len - i) + 1 );        t = farray[r];        farray[r] = farray[i];        farray[i] = t; diff --git a/src/help.raw b/src/help.raw index c8de3d7..ca7c85c 100644 --- a/src/help.raw +++ b/src/help.raw @@ -35,6 +35,7 @@ OPTIONS   -d, --draw-filename       Show the filename in the image window       --draw-tinted         Show overlay texts on semi-transparent background       --draw-exif           Show some Exif information (if compiled with exif=1) +     --edit                Make flip/rotation keys flip/rotate the underlying file       --auto-rotate         Rotate images according to Exif info (if compiled with exif=1)   -^, --title TITLE         Set window title (see FORMAT SPECIFIERS)   -D, --slideshow-delay NUM Set delay between automatically changing slides @@ -87,6 +88,7 @@ OPTIONS   -M, --menu-font FONT      Use FONT for the font in menus.   -B, --image-bg STYLE      Set background for transparent images and the like.                             Accepted values: default, checks, or a XColor (eg. #428bdd) +     --xinerama-index I    Assumee that I is the active xinerama screen   -N, --no-menus            Don't load or show any menus.       --no-xinerama         Disable Xinerama support       --no-screen-clip      Do not limit window size to screen size @@ -123,13 +125,14 @@ INDEX MODE OPTIONS  FORMAT SPECIFIERS   %f     image path/filename   %F     image path/filename (shell-escaped) + %g     window dimensions (\"width,height\") in pixels   %h     image height   %l     total number of files in the filelist   %L     path to temporary copy of filelist   %m     current mode (slideshow, multiwindow...)   %n     image name   %N     image name (shell-escaped) - %o     x,y offset of top-left image corner to window in pixels + %o     offset of top-left image corner to window (\"x,y\") in pixels   %p     image pixel size   %P     image pixel size in kilo-/megapixels   %r     image rotation. half right turn == 3.1415 (pi) @@ -140,34 +143,39 @@ FORMAT SPECIFIERS   %w     image width   %v     " PACKAGE " version   %V     process ID - %z     current image zoom + %z     current image zoom, rounded to two decimal places + %Z     current image zoom, high precision   %%     %   \\n     newline -KEYS +DEFAULT KEYS   a                       Toggle action display (--draw-actions)   A                       Toggle anti-aliasing   c                       Enable caption entry mode   d                       Toggle filename display (--draw-filename)   e                       Toggle exif tag display (if compiled with exif=1) - f                       Save current filelist to unique filename + f                       Toggle fullscreen + g                       Toggle fixed geometry mode   h                       pause/continue slideshow   i                       Toggle --info display   k                       Toggle zoom/viewport freeze when switching images - m                       Show menu + L                       Save current filelist to unique filename + m                       Show/hide menu   n, <SPACE>, <RIGHT>     Go to next image   o                       Toggle pointer visibility   p, <BACKSPACE>, <LEFT>  Go to previous image   q, <ESCAPE>             Quit   r                       Reload image + R                       Render/anti-alias image   s                       Save current image to unique filename - v                       Toggle fullscreen   w                       Resize window to current image dimensions   x                       Close current window   z                       Jump to a random position in the current filelist - <, >                    In place editing, rotate 90 degrees right/left - _                       In place editing, vertical flip - |                       In place editing, horizontal flip + Z                       Toggle auto-zoom + [, ]                    Jump to previous/next directory + <, >                    Rotate 90 degrees right/left + _                       Vertical flip + |                       Horizontal flip   0, <ENTER>              Run action specified by --action option   1-9                     Run action 1-9 specified by --action[1-9] options   <HOME>                  Go to first slide @@ -191,7 +199,7 @@ KEYS  This program is free software, see the file COPYING for licensing info.  Copyright Tom Gilbert (and various contributors) 1999-2003. -Copyright Daniel Friesel (and various contributors) 2010-2016. +Copyright Daniel Friesel (and various contributors) 2010-2018.  Homepage: http://feh.finalrewind.org  Report bugs to <derf+feh@finalrewind.org> or #feh on irc.oftc.net. diff --git a/src/imlib.c b/src/imlib.c index f41cdcd..4270c4a 100644 --- a/src/imlib.c +++ b/src/imlib.c @@ -294,10 +294,22 @@ int feh_load_image(Imlib_Image * im, feh_file * file)  	}  	file->ed = exifData; -	if (orientation == 3) +	if (orientation == 2) +		gib_imlib_image_flip_horizontal(*im); +	else if (orientation == 3)  		gib_imlib_image_orientate(*im, 2); +	else if (orientation == 4) +		gib_imlib_image_flip_vertical(*im); +	else if (orientation == 5) { +		gib_imlib_image_orientate(*im, 3); +		gib_imlib_image_flip_vertical(*im); +	}  	else if (orientation == 6)  		gib_imlib_image_orientate(*im, 1); +	else if (orientation == 7) { +		gib_imlib_image_orientate(*im, 3); +		gib_imlib_image_flip_horizontal(*im); +	}  	else if (orientation == 8)  		gib_imlib_image_orientate(*im, 3);  #endif @@ -1192,6 +1204,26 @@ void feh_edit_inplace(winwidget w, int op)  	if (!w->file || !w->file->data || !FEH_FILE(w->file->data)->filename)  		return; +	if (!opt.edit) { +		imlib_context_set_image(w->im); +		if (op == INPLACE_EDIT_FLIP) +			imlib_image_flip_vertical(); +		else if (op == INPLACE_EDIT_MIRROR) +			imlib_image_flip_horizontal(); +		else { +			imlib_image_orientate(op); +			tmp = w->im_w; +			w->im_w = w->im_h; +			w->im_h = tmp; +			if (FEH_FILE(w->file->data)->info) { +				FEH_FILE(w->file->data)->info->width = w->im_w; +				FEH_FILE(w->file->data)->info->height = w->im_h; +			} +		} +		winwidget_render_image(w, 1, 0); +		return; +	} +  	if (!strcmp(gib_imlib_image_format(w->im), "jpeg") &&  			!path_is_url(FEH_FILE(w->file->data)->filename)) {  		feh_edit_inplace_lossless(w, op); @@ -1229,8 +1261,12 @@ void feh_edit_inplace(winwidget w, int op)  		else {  			imlib_image_orientate(op);  			tmp = w->im_w; -			FEH_FILE(w->file->data)->info->width = w->im_w = w->im_h; -			FEH_FILE(w->file->data)->info->height = w->im_h = tmp; +			w->im_w = w->im_h; +			w->im_h = tmp; +			if (FEH_FILE(w->file->data)->info) { +				FEH_FILE(w->file->data)->info->width = w->im_w; +				FEH_FILE(w->file->data)->info->height = w->im_h; +			}  		}  		im_weprintf(w, "unable to edit in place. Changes have not been saved.");  		winwidget_render_image(w, 1, 0); diff --git a/src/keyevents.c b/src/keyevents.c index 689aebd..6c2f06e 100644 --- a/src/keyevents.c +++ b/src/keyevents.c @@ -195,10 +195,10 @@ void init_keyevents(void) {  	feh_set_kb("toggle_caption" , 0, XK_c, 0, 0, 0, 0);  	feh_set_kb("toggle_pause" , 0, XK_h, 0, 0, 0, 0);  	feh_set_kb("toggle_menu" , 0, XK_m, 0, 0, 0, 0); -	feh_set_kb("toggle_fullscreen" , 0, XK_v, 0, 0, 0, 0); +	feh_set_kb("toggle_fullscreen" , 0, XK_f, 0, 0, 0, 0);  	feh_set_kb("reload_image" , 0, XK_r, 0, 0, 0, 0);  	feh_set_kb("save_image" , 0, XK_s, 0, 0, 0, 0); -	feh_set_kb("save_filelist" , 0, XK_f, 0, 0, 0, 0); +	feh_set_kb("save_filelist" , 0, XK_L, 0, 0, 0, 0);  	feh_set_kb("orient_1" , 0, XK_greater, 0, 0, 0, 0);  	feh_set_kb("orient_3" , 0, XK_less, 0, 0, 0, 0);  	feh_set_kb("flip" , 0, XK_underscore, 0, 0, 0, 0); @@ -686,7 +686,7 @@ void feh_event_handle_generic(winwidget winwid, unsigned int state, KeySym keysy  	}  	else if (feh_is_kp(EVENT_jump_random, state, keysym, button)) {  		if (winwid->type == WIN_TYPE_THUMBNAIL) -			feh_thumbnail_select_next(winwid, rand() % (filelist_len - 1)); +			feh_thumbnail_select_next(winwid, random() % (filelist_len - 1));  		else  			slideshow_change_image(winwid, SLIDE_RAND, 1);  	} @@ -42,7 +42,7 @@ int main(int argc, char **argv)  {  	atexit(feh_clean_exit); -	srand(getpid() * time(NULL) % ((unsigned int) -1)); +	srandom(getpid() * time(NULL) % ((unsigned int) -1));  	setup_signal_handlers();  	init_parse_options(argc, argv); @@ -59,8 +59,6 @@ int main(int argc, char **argv)  	if (opt.index)  		init_index_mode(); -	else if (opt.collage) -		init_collage_mode();  	else if (opt.multiwindow)  		init_multiwindow_mode();  	else if (opt.list || opt.customlist) @@ -218,7 +216,6 @@ void feh_clean_exit(void)  {  	delete_rm_files(); -	free(opt.menu_bg);  	free(opt.menu_font);  	if(disp) @@ -134,7 +134,7 @@ feh_menu *feh_menu_new(void)  	menus = l;  	if (!bg) { -		feh_load_image_char(&bg, opt.menu_bg); +		feh_load_image_char(&bg, PREFIX "/share/feh/images/menubg_default.png");  		if (bg) {  			border.left = border.right = border.top = border.bottom  				= 4; diff --git a/src/options.c b/src/options.c index 38d2568..894e29f 100644 --- a/src/options.c +++ b/src/options.c @@ -62,7 +62,6 @@ void init_parse_options(int argc, char **argv)  	opt.scroll_step = 20;  	opt.menu_font = estrdup(DEFAULT_MENU_FONT);  	opt.font = NULL; -	opt.menu_bg = estrdup(PREFIX "/share/feh/images/menubg_default.png");  	opt.max_height = opt.max_width = UINT_MAX;  	opt.start_list_at = NULL; @@ -314,12 +313,11 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)  {  	int discard;  	static char stropts[] = -		"a:A:b:B:cC:dD:e:E:f:Fg:GhH:iIj:J:kK:lL:mM:nNo:O:pPqrR:sS:tT:uUvVwW:xXy:YzZ" -		".@:^:~:):|:+:<:>:"; +		"a:A:b:B:C:dD:e:E:f:Fg:GhH:iIj:J:kK:lL:mM:nNo:O:pPqrR:sS:tT:uUvVwW:xXy:YzZ" +		".@:^:~:|:+:<:>:";  	/* (*name, has_arg, *flag, val) See: struct option in getopts.h */  	static struct option lopts[] = { -		{"menu-bg"       , 1, 0, ')'},  		{"debug"         , 0, 0, '+'},  		{"scale-down"    , 0, 0, '.'},  		{"max-dimension" , 1, 0, '<'}, @@ -354,7 +352,6 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)  		{"title"         , 1, 0, '^'},  		{"alpha"         , 1, 0, 'a'},  		{"bg"            , 1, 0, 'b'}, -		{"collage"       , 0, 0, 'c'},  		{"draw-filename" , 0, 0, 'd'},  		{"font"          , 1, 0, 'e'},  		{"filelist"      , 1, 0, 'f'}, @@ -399,11 +396,11 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)  		{"bg-fill"       , 0, 0, 218},  		{"bg-max"        , 0, 0, 219},  		{"no-jump-on-resort", 0, 0, 220}, +		{"edit"          , 0, 0, 221},  #ifdef HAVE_LIBEXIF  		{"draw-exif"     , 0, 0, 223},  		{"auto-rotate"   , 0, 0, 242},  #endif -		{"cycle-once"    , 0, 0, 224},  		{"no-xinerama"   , 0, 0, 225},  		{"draw-tinted"   , 0, 0, 229},  		{"info"          , 1, 0, 234}, @@ -428,11 +425,6 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)  		switch (optch) {  		case 0:  			break; -		case ')': -			free(opt.menu_bg); -			opt.menu_bg = estrdup(optarg); -			weprintf("The --menu-bg option is deprecated and will be removed by 2012"); -			break;  		case '+':  			opt.debug = 1;  			break; @@ -578,9 +570,6 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)  			opt.bg = 1;  			opt.bg_file = estrdup(optarg);  			break; -		case 'c': -			opt.collage = 1; -			break;  		case 'd':  			opt.draw_filename = 1;  			break; @@ -734,6 +723,9 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)  		case 220:  			opt.jump_on_resort = 0;  			break; +		case 221: +			opt.edit = 1; +			break;  #ifdef HAVE_LIBEXIF  		case 223:  			opt.draw_exif = 1; @@ -742,10 +734,6 @@ static void feh_parse_option_array(int argc, char **argv, int finalrun)  			opt.auto_rotate = 1;  			break;  #endif -		case 224: -			weprintf("--cycle-once is deprecated, please use --on-last-slide=quit instead"); -			opt.on_last_slide = ON_LAST_SLIDE_QUIT; -			break;  		case 225:  			opt.xinerama = 0;  			break; @@ -853,17 +841,11 @@ static void check_options(void)  		}  	} -	if ((opt.index + opt.collage) > 1) { -		weprintf("you can't use collage mode and index mode together.\n" -				"   I'm going with index"); -		opt.collage = 0; -	} -  	if (opt.full_screen && opt.multiwindow) {  		eprintf("You cannot combine --fullscreen with --multiwindow");  	} -	if (opt.list && (opt.multiwindow || opt.index || opt.collage)) { +	if (opt.list && (opt.multiwindow || opt.index)) {  		eprintf("You cannot combine --list with other modes");  	} @@ -899,6 +881,10 @@ static void show_version(void)  		"stat64 "  #endif +#ifdef HAVE_VERSCMP +		"verscmp " +#endif +  #ifdef HAVE_LIBXINERAMA  		"xinerama "  #endif diff --git a/src/options.h b/src/options.h index 606b8e6..7f8fe9c 100644 --- a/src/options.h +++ b/src/options.h @@ -36,7 +36,6 @@ enum on_last_slide_action {  struct __fehoptions {  	unsigned char multiwindow;  	unsigned char montage; -	unsigned char collage;  	unsigned char index;  	unsigned char thumbs;  	unsigned char slideshow; @@ -81,6 +80,7 @@ struct __fehoptions {  	unsigned char keep_zoom_vp;  	unsigned char insecure_ssl;  	unsigned char filter_by_dimensions; +	unsigned char edit;  	char *output_file;  	char *output_dir; @@ -96,7 +96,6 @@ struct __fehoptions {  	char *filelistfile;  	char *menu_font;  	char *customlist; -	char *menu_bg;  	char *caption_path;  	char *start_list_at;  	char *info_cmd; diff --git a/src/slideshow.c b/src/slideshow.c index 63c0a11..19aeaee 100644 --- a/src/slideshow.c +++ b/src/slideshow.c @@ -258,7 +258,7 @@ void slideshow_change_image(winwidget winwid, int change, int render)  		case SLIDE_RAND:  			if (filelist_len > 1) {  				current_file = feh_list_jump(filelist, current_file, FORWARD, -					(rand() % (filelist_len - 1)) + 1); +					(random() % (filelist_len - 1)) + 1);  				change = SLIDE_NEXT;  			}  			break; diff --git a/src/wallpaper.c b/src/wallpaper.c index db14a8c..ef7ecca 100644 --- a/src/wallpaper.c +++ b/src/wallpaper.c @@ -252,7 +252,7 @@ void feh_wm_set_bg(char *fil, Imlib_Image im, int centered, int scaled,  	XGCValues gcval;  	GC gc;  	char bgname[20]; -	int num = (int) rand(); +	int num = (int) random();  	char bgfil[4096];  	char sendbuf[4096]; diff --git a/test/feh-i.t b/test/feh-i.t index ff247a2..24775e3 100755 --- a/test/feh-i.t +++ b/test/feh-i.t @@ -138,28 +138,28 @@ SendKeys('{RIG}');  test_win_title( $win, 'feh slideshow 2/3 jpg' );  feh_stop(); -feh_start( '--cycle-once', 'test/ok/png test/ok/jpg' ); +feh_start( '--on-last-slide=quit', 'test/ok/png test/ok/jpg' );  for ( 1 .. 2 ) {  	SendKeys('{RIG}');  } -test_no_win("--cycle-once -> window closed"); +test_no_win("--on-last-slide=quit -> window closed");  feh_start( -	'--cycle-once --slideshow-delay 0.5', +	'--on-last-slide=quit --slideshow-delay 0.5',  	'test/ok/png test/ok/jpg test/ok/gif'  );  sleep(1.5); -test_no_win('cycle-once + slideshow-delay -> window closed'); +test_no_win('on-last-slide=quit + slideshow-delay -> window closed');  $win = feh_start( -	'--cycle-once --slideshow-delay -0.01', +	'--on-last-slide=quit --slideshow-delay -0.01',  	'test/ok/png test/ok/jpg test/ok/gif'  );  test_win_title( $win, 'feh [1 of 3] - test/ok/png [Paused]' );  SendKeys('h'); -test_no_win('cycle-once + negative delay + [h]'); +test_no_win('on-last-slide=quit + negative delay + [h]');  $win = feh_start( q{}, 'test/ok/png test/ok/gif test/ok/gif test/ok/jpg' );  for ( 1 .. 2 ) { diff --git a/test/mandoc.t b/test/mandoc.t index 638c5e9..9e7ffc3 100755 --- a/test/mandoc.t +++ b/test/mandoc.t @@ -3,7 +3,7 @@ use strict;  use warnings;  use 5.010; -use Test::More tests => 3; +use Test::More tests => 1;  SKIP: {  	my $mandoc_present = 0; @@ -17,10 +17,10 @@ SKIP: {  	if ( not $mandoc_present ) {  		diag('mandoc not installed, test skipped. This is NOT fatal.'); -		skip( 'mandoc not installed', 3 ); +		skip( 'mandoc not installed', 1 );  	} -	for my $file ( 'feh', 'feh-cam', 'gen-cam-menu' ) { +	for my $file ('feh') {  		qx{mandoc -Tlint -Werror man/${file}.1};  		is( $?, 0, "${file}.1: Valid mdoc syntax" );  	} diff --git a/test/status b/test/status index 2cda6d8..6db362e 100644 --- a/test/status +++ b/test/status @@ -76,15 +76,13 @@ Overall test status, what's covered / missing   [x] correct caption display ---collage -  --customlist   [x] correct output   [x] format specifiers ---cycle-once +--on-last-slide=quit   [x] closes feh window at end of slideshow   [x] combination with --slideshow-delay | 
