X11 clipboard history and management using spmenu
Go to file
Chris Down f22fce7f04 Use a single line cache file
In c7c894a0, a per-selection line-cache was introduced in order to
overcome some of the limitations of clipmenu at the time (for example,
missing duplicate detection). However, now we have all the features we
need to have a single line cache again, and having multiple line caches
has caused more trouble than it is worth.

For example, maintaining CM_MAX_CLIPS globally is extremely cumbersome,
so we don't do it, and CM_MAX_CLIPS is actually acted on per-selection.
We also have had bugs where we perform actions on cache files without
properly consulting other line caches, and while those can be fixed, the
simplest thing to do now is just to go back to having a single line
cache.
2020-03-23 13:00:14 +00:00
init systemd: Use 500ms RestartSec 2019-02-13 16:34:32 +00:00
tests Use a single line cache file 2020-03-23 13:00:14 +00:00
.travis.yml Use a single line cache file 2020-03-23 13:00:14 +00:00
clipdel Use a single line cache file 2020-03-23 13:00:14 +00:00
clipfsck Use a single line cache file 2020-03-23 13:00:14 +00:00
clipmenu Use a single line cache file 2020-03-23 13:00:14 +00:00
clipmenud Use a single line cache file 2020-03-23 13:00:14 +00:00
LICENSE License as public domain 2015-10-26 11:10:54 +00:00
README.md readme: Add installation section 2018-08-21 15:45:44 -04:00

Tests

clipmenu is a simple clipboard manager using dmenu (or rofi with CM_LAUNCHER=rofi) and xsel.

Demo

Demo

Usage

Start clipmenud, then run clipmenu to select something to put on the clipboard.

A systemd user service for starting clipmenud is included at init/clipmenud.service.

All args passed to clipmenu are transparently dispatched to dmenu. That is, if you usually call dmenu with args to set colours and other properties, you can invoke clipmenu in exactly the same way to get the same effect, like so:

clipmenu -i -fn Terminus:size=8 -nb '#002b36' -nf '#839496' -sb '#073642' -sf '#93a1a1'

You can remove clips with the clipdel utility, see clipdel --help.

Installation

Several distributions, including Arch and Nix, provide clipmenu as an official package called clipmenu.

If your distribution doesn't provide a package, you can run the scripts standalone (or better yet, package them!).

How does it work?

The code is fairly simple and easy to follow, you may find it easier to read there, but it basically works like this:

clipmenud

  1. clipmenud uses clipnotify to wait for new clipboard events. If clipnotify is not present on the system, we poll every 0.5 seconds (or another interval as configured with the CM_SLEEP environment variable).

    You can also bind your copy key binding to also issue CM_ONESHOT=1 clipmenud. However, there's no generic way to do this, since any keys or mouse buttons could be bound to do this action in a number of ways.

  2. If clipmenud detects changes to the clipboard contents, it writes them out to the cache directory.

clipmenu

  1. clipmenu reads the cache directory to find all available clips.
  2. dmenu is executed to allow the user to select a clip.
  3. After selection, the clip is put onto the PRIMARY and CLIPBOARD X selections.