No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long. 2.4KB


Yet Another xdg-open.

It’s a file opener which replaces a well-known xdg-open script and extends its configuration capabilities. It was directly inspired by Rifle, a file opener for Ranger file manager.


  • qtbase5-dev (core QT5 library)
  • CMake
  • C++ compiler which supports C++14 features.


Yaxo uses CMake build system. The following commands will build and install its Release version in /usr/local:

$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ make
$ make install

You can change installation path like this:


Configuration file

Yaxo searches for configuration in e.g. ~/.config/yaxo/yaxorc. Each line of yaxorc contains a comma-separated list of conditions, followed by a colon, followed by a command executed when all of conditions are met. Following conditions are supported:

  • path <regex>: regular expression matching a full path/URL
  • ext <regex>: regular expression matching a file extension
  • mime <regex>: regular expression matching file’s mimetype
  • scheme <regex>: regular expression matching scheme of first passed argument (e.g. file or http or ftp, etc.)
  • if <property>: checking various settings of environment settings or passed arguments. The following properties can be checked:
    • terminal: set to true if yaxo is executed from a terminal
    • X: set to true if X server is running
    • exists: set to true if checked argument exists on a file system

if <property> can be negated by adding exclamation mark before a property name (so for example if !terminal assures that command is not executed inside a terminal).

Conditions are checked from top to bottom. First command which matches all conditions is executed.


ext txt, if terminal:  vim -- "$@"
ext txt, if X:         xterm -e vim -- "$@"

mime text/.*, if terminal:  vim -- "$@"
mime text/.*, if X: st -e vim -- "$@"

# Images from the internet
scheme https?, path .*\.(png|jpg), if X: feh -- "$@"

# Browser.
ext x?html?, if X: firefox -- "$@"
ext x?html?, if terminal: w3m -- "$@"

scheme https?, if X: firefox -- "$@"
scheme https?, if terminal: w3m -- "$@"

# default file manager
mime inode/directory: vifm -- "$@"

# catch-all rules
ext .*, if terminal:  vim -- "$@"
ext .*, if !terminal: st -e vim -- "$@"

Running tests

$ cmake -DTESTS=on ..
$ make
$ make test (or ./tests)