summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog25
-rw-r--r--Makefile17
-rw-r--r--README.md91
-rw-r--r--cam/ChangeLog14
-rw-r--r--cam/README45
-rw-r--r--cam/cam_bookmarks2
-rwxr-xr-xcam/feh-cam195
-rwxr-xr-xcam/gen-cam-menu44
-rw-r--r--config.mk1
-rw-r--r--examples/themes5
-rw-r--r--man/feh-cam.pre57
-rw-r--r--man/feh.pre228
-rw-r--r--man/gen-cam-menu.pre33
-rw-r--r--share/images/menubg_aluminium.pngbin1862 -> 0 bytes
-rw-r--r--share/images/menubg_aqua.pngbin5325 -> 0 bytes
-rw-r--r--share/images/menubg_black.pngbin1716 -> 0 bytes
-rw-r--r--share/images/menubg_brushed.pngbin8649 -> 0 bytes
-rw-r--r--share/images/menubg_sky.pngbin1928 -> 0 bytes
-rw-r--r--src/Makefile1
-rw-r--r--src/collage.c208
-rw-r--r--src/feh.h1
-rw-r--r--src/filelist.c2
-rw-r--r--src/gib_imlib.c12
-rw-r--r--src/gib_imlib.h2
-rw-r--r--src/gib_list.c2
-rw-r--r--src/help.raw28
-rw-r--r--src/imlib.c42
-rw-r--r--src/keyevents.c6
-rw-r--r--src/main.c5
-rw-r--r--src/menu.c2
-rw-r--r--src/options.c36
-rw-r--r--src/options.h3
-rw-r--r--src/slideshow.c2
-rw-r--r--src/wallpaper.c2
-rwxr-xr-xtest/feh-i.t12
-rwxr-xr-xtest/mandoc.t6
-rw-r--r--test/status4
37 files changed, 310 insertions, 823 deletions
diff --git a/ChangeLog b/ChangeLog
index 9788afb..5cd1d37 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/Makefile b/Makefile
index 925e3fb..552ae4d 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/README.md b/README.md
index 334e681..390f9ca 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,21 @@
[![build status](https://travis-ci.org/derf/feh.svg?branch=master)](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.";
diff --git a/config.mk b/config.mk
index 226c612..43cc394 100644
--- a/config.mk
+++ b/config.mk
@@ -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.png
deleted file mode 100644
index eed00f1..0000000
--- a/share/images/menubg_aluminium.png
+++ /dev/null
Binary files differ
diff --git a/share/images/menubg_aqua.png b/share/images/menubg_aqua.png
deleted file mode 100644
index 3a72590..0000000
--- a/share/images/menubg_aqua.png
+++ /dev/null
Binary files differ
diff --git a/share/images/menubg_black.png b/share/images/menubg_black.png
deleted file mode 100644
index 08b4c2b..0000000
--- a/share/images/menubg_black.png
+++ /dev/null
Binary files differ
diff --git a/share/images/menubg_brushed.png b/share/images/menubg_brushed.png
deleted file mode 100644
index 32fad47..0000000
--- a/share/images/menubg_brushed.png
+++ /dev/null
Binary files differ
diff --git a/share/images/menubg_sky.png b/share/images/menubg_sky.png
deleted file mode 100644
index e0be8ca..0000000
--- a/share/images/menubg_sky.png
+++ /dev/null
Binary files differ
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;
-}
diff --git a/src/feh.h b/src/feh.h
index 009f45b..1d5e918 100644
--- a/src/feh.h
+++ b/src/feh.h
@@ -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);
}
diff --git a/src/main.c b/src/main.c
index 1a76e2d..ded0b22 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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)
diff --git a/src/menu.c b/src/menu.c
index 2f8875d..fcbb490 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -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