Giter Site home page Giter Site logo

handlr's Introduction


handlr

Manage your default applications with ease using handlr!

Features

  • Set default handler by extension or mime-type
  • 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 from mimeapps.list
  • Helper commands like launch, get --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

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:

  1. Find an app with TerminalEmulator category
  2. Set it as the default for x-scheme-handler/terminal
  3. 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.

Setting multiple handlers

  1. Open ~/.config/handlr/handlr.toml and set enable_selector = true. Optionally, you can also tweak the selector to your selector command (using e.g. rofi or dmenu).

  2. Add a second/third/whatever handler using handlr add, for example

handlr add x-scheme-handler/https firefox-developer-edition.desktop
  1. Now in this example when you open a URL, you will be prompted to select the desired application.

Screenshots

Installation

Arch Linux

yay -S handlr-bin

Optionally you can also install xdg-utils-handlr to replace xdg-open:

yay -S xdg-utils-handlr

Rust/Cargo

cargo install handlr

Binaries

  1. Download the latest release binary and put it somewhere in $PATH
  2. Download completions for fish:
curl https://raw.githubusercontent.com/chmln/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

handlr's People

Contributors

aetf avatar benmaddison avatar chmln avatar fishman avatar ftilde avatar larshaalck avatar leiserfg avatar michaeladler avatar timakro avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.