5 releases
new 0.8.5 | May 10, 2023 |
---|---|
0.8.4 | Mar 26, 2023 |
0.8.2 | Feb 20, 2023 |
0.7.1 | Apr 2, 2022 |
#101 in Unix APIs
28 downloads per month
47KB
1K
SLoC

handlr-regex
Manage your default applications with ease using handlr
! Now with the power of regular expressions!
Fork of the original handlr
Features
- Set default handler by extension or mime-type
- Set arbitrary commands as handlers based on regular expressions
- Intelligent mime type detection from files based on extension and content
- Open multiple files at once
- Set multiple handlers for mime/extension and use
rofi
/dmenu
to pick one - Wildcard support like
text/*
- Automatically removes invalid/wrong
.desktop
entries frommimeapps.list
- Helper commands like
launch
,get --json
,mime --json
for your scripting needs - Unnecessarily fast (written in Rust)
- Single compiled binary with no dependencies
Usage
# Open a file/URL
handlr open ~/.dotfiles/pacman/packages.txt
handlr open https://google.ca
# Set default handler for png files
handlr set .png feh.desktop
# Set wildcard handler for all text files
handlr set 'text/*' nvim.desktop
# Set default handler based on mime
handlr set application/pdf evince.desktop
# List default apps
handlr list
# Get the handler for a mime/extension
$ handlr get .png
feh.desktop
# Launch a handler with given path/URL
handlr launch x-scheme-handler/https -- https://google.ca
# Get the mimetypes of given paths/URLs
handlr mime https://duckduckgo.com . README.md
Compared to xdg-utils
- Can open multiple files/URLs at once
- Can have multiple handlers and use rofi/dmenu to pick one at runtime
- Far easier to use with simple commands like
get
,set
,list
- Can operate on extensions, no need to look up or remember mime types
- useful for common tasks like setting a handler for png/docx/etc files
- Superb autocomplete (currently fish, zsh and bash), including mimes, extensions, and
.desktop
files - Optional json output for scripting
- Properly supports
Terminal=true
entries
Setting default terminal
Unfortunately, there isn't an XDG spec and thus a standardized way for handlr
to get your default terminal emulator to run Terminal=true
desktop entries. There was a proposal floating around a few years ago to use x-scheme-handler/terminal
for this purpose. It seems to me the least worst option, compared to handling quirks of N+1 distros or using a handlr-specific config option.
Now if x-scheme-handler/terminal
is present, handlr
will use it.
Otherwise, handlr
will:
- Find an app with
TerminalEmulator
category - Set it as the default for
x-scheme-handler/terminal
- Send you a notification to let you know it guessed your terminal and provide instructions to change it if necessary
On the upside, Terminal=true
entries will now work outside of interactive terminals, unlike xdg-utils
.
Terminal emulator compatibility
handlr
should work with pretty much any terminal emulator.
However, some slight configuration may be necessary depending on what command line arguments your terminal emulator supports or required to directly run a command in it.
If it uses/supports -e
(i.e. xterm
, xfce4-terminal
, foot
, etc.) then you do not need to do anything.
If it requires something else, then set term_exec_args
in ~/.config/handlr/handlr.toml
to the necessary arguments like so:
// Replace 'run' with whatever arguments you need
term_exec_args = 'run'
If it does not require any arguments or if its arguments are already included in its .desktop file, but it does not use -e
, (i.e. wezterm
, kitty
, etc.) set term_exec_args
to ''
.
Feel free to open an issue or pull request if there's a better way to handle this.
Setting multiple handlers
-
Open
~/.config/handlr/handlr.toml
and setenable_selector = true
. Optionally, you can also tweak theselector
to your selector command (using e.g. rofi or dmenu). -
Add a second/third/whatever handler using
handlr add
, for example
handlr add x-scheme-handler/https firefox-developer-edition.desktop
- Now in this example when you open a URL, you will be prompted to select the desired application.
Setting regex handlers
Inspired by a similar feature in mimeo
Open ~/.config/handlr/handlr.toml
and add something like this:
[[handlers]]
exec = "freetube %u" # Uses desktop entry field codes
terminal = false # Set to true for terminal apps, false for GUI apps (optional; defaults to false)
regexes = ['(https://)?(www\.)?youtu(be\.com|\.be)/*.'] # Use single-quote literal strings
For more information:
Screenshots
![]() |
![]() |
Installation
Arch Linux
paru -S handlr-regex-bin
Optionally you can also install xdg-utils-handlr
to replace xdg-open
:
paru -S xdg-utils-handlr
Rust/Cargo
cargo install handlr-regex
Binaries
- Download the latest release binary and put it somewhere in
$PATH
- Download completions for fish:
curl https://raw.githubusercontent.com/Anomalocaridid/handlr/master/completions/handlr.fish --create-dirs -o ~/.config/fish/completions/handlr.fish
Attribution
Icons made by Eucalyp from www.flaticon.com
Cover photo by creativebloq.com
Dependencies
~8–15MB
~299K SLoC