This allows avoiding having to delete after the fact for things like issues #57 and #98. Why have this over just stopping clipmenud? Well: 1. Stopping clipmenud should usually be an init system action, but we are init-system agnostic. If we just exit, we don't have a way of reliably starting again. 2. Even if we *do* do it using the init system, we don't want some things (like a lingering xsel which owns the selection for CM_OWN_CLIPBOARD) being killed as well. 3. This is a nicer interface for things like password managers to stop clipmenu rather than stopping clipmenu entirely.
3.5 KiB
clipmenu is a simple clipboard manager using dmenu (or rofi with
CM_LAUNCHER=rofi
) and xsel.
Demo
Usage
Start clipmenud
, then run clipmenu
to select something to put on the
clipboard.
A systemd user service for starting clipmenud is installed as part of the project.
If you want to start clipmenud
immediately via systemd and have it be started when you login, run:
systemctl --user enable --now clipmenud
You may wish to bind a shortcut in your window manager to launch clipmenu
.
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'
If you prefer to collect clips on demand rather than running clipmenud as a daemon, you can bind a key to the following command for one-off collection:
CM_ONESHOT=1 clipmenud
For a full list of environment variables that clipmenud can take, please see
clipmenud --help
.
Installation
Several distributions, including Arch and Nix, provide clipmenu as an official
package called clipmenu
.
Installation - Manual
If your distribution doesn't provide a package, you can run the following
the commands to install this. (Or better yet, create package for your distribution!).
You'll first need to install xsel
and clipnotify
. If you'll also need dmenu
unless
you plan to set CM_LAUNCHER
to a different value, like rofi
.
git clone https://github.com/cdown/clipmenu.git
cd clipmenu
sudo make install
How does it work?
clipmenud is less than 200 lines, and clipmenu is less than 100, so hopefully it should be fairly self-explanatory. However, at the most basic level:
clipmenud
clipmenud
uses clipnotify to wait for new clipboard events.- If
clipmenud
detects changes to the clipboard contents, it writes them out to the cache directory and an index using a hash as the filename.
Features of clipmenud
The behavior of clipmenud
can be customized through environment variables. Features include:
- Customizing max number of clips (Default: 1000)
- Choosing which selections to manage
- Disabling clip collection temporarily with
clipctl disable
, reenabling withclipctl enable
- Ignoring certain windows, like password managers
- Enabling debugging
- Customizing the cache dir location
- Disable looping
- Option to "own" the clipboard
Check the online help to view the details:
clipmenud --help
If you managing clipmenud
with systemd
, you can override the defaults by using this command to generate an override file:
systemctl --user edit clipmenud
Then add a new section sets your environment variables. For example:
[Service]
Environment="CM_MAX_CLIPS=30"
Environment="CM_SELECTIONS=clipboard"
clipmenu
clipmenu
reads the index to find all available clips.dmenu
is executed to allow the user to select a clip.- After selection, the clip is put onto the PRIMARY and CLIPBOARD X selections.