Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/sonnyp/junction

Application/browser chooser
https://github.com/sonnyp/junction

desktop flatpak gjs gnome gtk gtk4 linux linux-app

Last synced: 1 day ago
JSON representation

Application/browser chooser

Awesome Lists containing this project

README

        

# Junction

Junction lets you choose the application to open files and links.

![screenshot](data/screenshot.png)

Download on Flathub

## Usage

Set Junction as the default application for a resource and let it do the rest. Junction will pop up and offer multiple options to handle it.

Set Junction as default browser

xdg-settings set default-web-browser re.sonny.Junction.desktop

Set Junction as default for all files

xdg-mime default re.sonny.Junction.desktop x-scheme-handler/file

Please note that this may not be respected by all applications but the command `xdg-open` will.

Set Junction as default for png

xdg-mime default re.sonny.Junction.desktop image/png

Set Junction as default email composer

xdg-settings set default-url-scheme-handler mailto re.sonny.Junction.desktop

Set Junction as default folder opener

xdg-mime default re.sonny.Junction.desktop inode/directory

API

Junction has a very simple API that doesn't require any programming. To open any resource with Junction, even if it's not configured as the default application, simply use the following URI format `x-junction://$RESOURCE`. For examples

- `x-junction://https://github.com`
- `x-junction://~`
- `x-junction://file:///etc/os-release`
- `x-junction:///etc/os-release`

You can use this in web pages, the terminal, native applications and anything that is able to open URIs.

If Junction is installed - you can test this in the terminal with `xdg-open "x-junction://file:///etc/os-release"` and in the browser with `Test Junction URI`.

## Tips and tricks

Keyboard navigation

Use the menu or `?` to learn about Keyboard usage. You can navigate the UI with the arrow keys too.

Open with multiple applications

Use Middle-click, Ctrl+Click, Ctrl+Enter or Ctrl+Space to keep Junction open - allowing you to open the resource in multiple applications.

Make Junction appear in the center of the screen

On GNOME you can make all new windows open in the center using

```sh
gsettings set org.gnome.mutter center-new-windows true
```

See https://gitlab.gnome.org/GNOME/mutter/-/issues/246

Use Junction from the terminal

Create a permant alias, for example `alias open="flatpak run re.sonny.Junction"`.

Then you can use `open my-file`.

See [How To Create Permanent Aliases In Linux?](https://fossbytes.com/alias-in-linux-how-to-use-create-permanent-aliases/)

Add custom scripts to Junction

You can add your own script to Junction by creating a `.desktop` file for it in `~/.local/share/applications`.

See https://wiki.archlinux.org/title/desktop_entries (distro agnostic).

Browser integration

Create a bookmark with the following URL

```
javascript:window.location='x-junction://'+window.location
```

Multiple Firefox profiles

See [Profile Manager - Create, remove or switch Firefox profiles](https://support.mozilla.org/en-US/kb/profile-manager-create-remove-switch-firefox-profiles)

If you want to be able to choose the Firefox profile to open the resource with, you can make desktop files for your Firefox profiles in `~/.local/share/applications`.

Here is an example `~/.local/share/applications/firefox-work.desktop`

```ini
[Desktop Entry]
Version=1.0
Name=Firefox work
Exec=firefox -P work --class=firefox-work %u
Icon=firefox
Terminal=false
Type=Application
StartupWMClass=firefox-work
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;
StartupNotify=true
```

Save, run `update-desktop-database ~/.local/share/applications`, enjoy.

[Reference](https://github.com/sonnyp/Junction/issues/9)

Environment variables in desktop files

```
# Before
Exec=firefox %u
# After
Exec=env MOZ_USE_XINPUT2=1 firefox %u
```

## Troubleshooting

I can't distinguish between options with the same icon

Within Junction, you can toggle `Show names` in the menu or hover the application with the mouse to display a tooltip.

Otherwise, you can edit the desktop files to use distinctive icons, here are a some tools

- [MenuLibre](https://flathub.org/apps/details/org.bluesabre.MenuLibre) GUI
- [AppEditor](https://flathub.org/apps/details/com.github.donadigo.appeditor) GUI
- [ArchWiki](https://wiki.archlinux.org/title/desktop_entries) advanced

My app doesn't show up

If the application was installed via Flatpak, the package manager or an other conventional way, feel free to [open an issue](https://github.com/sonnyp/Junction/issues/new/choose).

Make sure the application desktop file has a `MimeType` key that matches the type of resource you want it to handle. For example if you want the application `~/.local/share/applications/my-custom-browser.desktop` to handle web content; add the following `MimeType=text/html;text/xml;application/xhtml+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;`.

The `[Desktop Entry]` of the `.desktop` file must be the first section as mandated by the specification.

The desktop filename should be unique. Junction can't display both `/usr/share/applicatins/firefox.desktop` and `~/.local/share/applications/firefox.desktop`. The second overrides the first.

Finally - make sure to run `update-desktop-database ~/.local/share/applications` after installing a desktop file.

Where are desktop files located ?

- System `/usr/share/applications/`
- User `~/.local/share/applications/`
- Flatpak system `/var/lib/flatpak/exports/share/applications/`
- Flatpak user `~/.local/share/flatpak/exports/share/applications/`
- Snap `/var/lib/snapd/desktop/applications/`

## In the media

[softpedia.com - Nifty and useful app switcher called Junction](https://linux.softpedia.com/get/Desktop-Environment/Gnome/Junction-104196.shtml) - 05/2022

[itsfoss.com](https://itsfoss.com/junction/) - 03/2022

[youtube.com - Junction 1.4 | Choose the application to open files and links](https://www.youtube.com/watch?v=rfVd9bhRWxs) - 12/2021

[linuxunplugged.com - Episode 433 The Lessons of Jellyfin](https://linuxunplugged.com/433?t=3183) - 11/2021

## Translation

If you'd like to help translating Junction into your language, please head over to [Weblate](https://hosted.weblate.org/engage/junction/).


Translation status

Thank you for your help!

## Development

```sh
git clone --recursive https://github.com/sonnyp/Junction.git
cd Junction
npm install
make dev
```

Make changes and press `Q` on the Junction window to restart it.

Use `I` to open the inspector.

To pass the tests you have to install a few dependencies

```sh
# Install development dependencies
sudo dnf install --assumeyes npm flatpak make desktop-file-utils gjs gtk4-devel libadwaita-devel
cd Junction
npm install
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install --user --assumeyes --noninteractive flathub org.freedesktop.appstream-glib

# Run tests
make test
```

## Maintainer

Bookmarks

- [Flathub](https://flathub.org/apps/re.sonny.Junction)
- [Flathub repo](https://github.com/flathub/re.sonny.Junction)
- [Flathub builds](https://flathub.org/builds/#/apps/re.sonny.Junction)
- [Flathub stats](https://klausenbusk.github.io/flathub-stats/#ref=re.sonny.Junction)
- [Flathub API](https://flathub.org/api/v1/apps/re.sonny.Junction)

i18n

```sh
# To update the pot file
# xgettext -f po/POTFILES -o po/re.sonny.Junction.pot --no-wrap -cTRANSLATORS --from-code=UTF-8
# sed -i "s/Project-Id-Version: PACKAGE VERSION/Project-Id-Version: re.sonny.Junction/" po/re.sonny.Junction.pot
meson compile re.sonny.Junction-pot -C build

# To create a translation
# msginit -i po/re.sonny.Junction.pot -o po/fr.po -l fr_FR.UTF-8
echo -n " fr" >> po/LINGUAS
meson compile re.sonny.Junction-update-po -C build

# To update translations
# msgmerge -U po/*.po po/re.sonny.Junction.pot
meson compile re.sonny.Junction-update-po -C build
```

See https://github.com/sonnyp/Commit/pull/14#issuecomment-894070878

Publish new version

- update metainfo and screenshot
- `meson compile re.sonny.Junction-pot -C build`
- `meson compile re.sonny.Junction-update-po -C build`
- Update version in `meson.build`
- git tag
- flathub

## Copyright

© 2021 [Sonny Piers](https://github.com/sonnyp)

## License

GPLv3. Please see [COPYING](COPYING) file.