Giter Club home page Giter Club logo

kando's Introduction

Warning

This project is currently in a very early stage of development. Especially, Kando does not have a fully functional menu editor yet. If you want to use Kando already today, you will have to edit your menus in JSON files. You can read regular updates on the project on my Ko-fi page.

checks codeql downloads sponsors docs reuse

Kando will be a pie menu for the desktop. It will be highly customizable and will allow you to create your own menus and actions. For instance, you can use it to control your music player, to open your favorite websites or to simulate shortcuts. It will be available for Windows, Linux and macOS.

The Vision

I am the developer of Fly-Pie, which is a similar project but limited to the GNOME desktop. I have been working on Fly-Pie for more than 3 years now and I am very happy with the result. However, I have always wanted to create a similar application for the desktop in general. This is why I started this project.

Kando is very similar to Fly-Pie in terms of interaction and appearance. At the same time, there will be some major differences. You can read more in this blog post!

The prototype already features the same interaction methods as Fly-Pie (point-and-click, marking mode, and turbo mode).

Platform Support

Implementing a menu like Kando in a cross-platform manner is not exactly easy. Things like getting the mouse position before opening a window, simulating key presses, or getting the name of the currently focused application window has to be implemented differently on each platform.

For now, I have tested Kando on the following platforms:

Tested Environment Status Notes
 Windows ✔️ Tested on Windows 11.
 macOS ✔️ Tested on macOS 11.
 GNOME / X11 ✔️
 GNOME / Wayland ✔️ Requires adapter GNOME Shell extension which provides a DBus interface for Kando to communicate with.
 KDE / X11 ✔️
 KDE / Wayland ✔️ Uses the KWin Scripting API and the Remote-Desktop Portal to implement the required functionality. It works both on Plasma 5 and Plasma 6.
Hyprland ✔️ Uses some wlroots Wayland protocols, the hyprctl command line tool and the Hyprland Global Shortcuts protocol to implement the required functionality.
 XFCE ✔️
 MATE ✔️
 Budgie ✔️
 Cinnamon ✔️
 LXQt ✔️
 LXDE ✔️ Requires a compositor for the transparency to work.
 Openbox ✔️ Requires a compositor for the transparency to work.
 i3 ✔️ Requires a compositor for the transparency to work.

📦 Installation

You can either ⬇️ download a pre-built package from the releases page or 🚀 compile Kando yourself. With a pre-built package, you can just run the executable; no installation is required.

Important

If you are using GNOME under Wayland, you will also need to install the 🐚 adapter extension!

Manual compilation is only required if you want to test the latest development version of the prototype or if you want to contribute to the project.

🚀 Getting Started

For now, the prototype only comes with an example menu which does not do anything useful. However, if you want to get your hands dirty, you can already create custom menus and actions by editing the config files! This way, the prototype can do something useful already. You can read more about this in the 📝 documentation.

💞 I want to contribute!

kofi github paypal crypto

That's great! If you like the idea of Kando, you can help in many ways:

  • Discuss the idea! Tell me what you think about Kando and what features you would like to see. You can do this by opening a discussion.
  • Spread the word! Tell your friends about Kando and share the project on social media.
  • Contribute code! If you are a developer, you can help me with the implementation. I have never worked with Electron before, so I'm sure there is a lot of room for improvement. Please read the contributing guidelines for more information!

While direct contributions are the most awesome way to support the development, donations will encourage me to invest my spare time for developing free and open-source software.

These awesome people have already donated to the development of my open-source projects:

Sponsors List

Credits

This README uses icons from Simple Icons.

kando's People

Contributors

aliemresenel avatar d3vil0p3r avatar denis-roy avatar dependabot[bot] avatar hamishc0 avatar schneegans avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kando's Issues

Kando menu rarely opens in KDE Wayland 5.27, and Keyboard remote portal does not work (it's fine in X11)

OS: Fedora 39 KDE Spin
KDE Version: 5.27.10
Kando version: 0.4.0 (also tested 0.3.0)

Hello, thanks for your awesome work on this project.

I've been using Kando since version 0.3.0 in KDE Plasma X11 and it works amazingly well.

Unfortunately under Plasma Wayland it has a couple of issues for me:

  • The keyboard shortcut to open the menu does not work, despite clicking on "OK" when the Remote desktop portal prompt pops up to authorize Kando for keyboard input

  • Right clicking on the Kando icon in the tray to open the menu works 25% of the time: if I try to open the Kando menu twice in a row nothing happens, I have to wait 30 seconds or more to have it open again, and sometimes not even that works.

I tried to use the "kando --menu "Prototype Menu"" command to open it, but it works reliably only if I run it in an open terminal window; if I try to run it as an application shortcut command (or if I put it in a shell script file and try to run it without a terminal open) it exhibits the same erratic behaviour as right-clicking on the icon.

It seems to open more reliably when a window is open on the desktop.

The current workaround I use in Wayland is to run the Kando command in a shell script from a desktop shortcut with the option "Terminal=true". This way I have a terminal window appearing briefly before the menu, but it opens every time.

If you need any log or other kinds of debug output I will be happy to provide them.

Thanks!

Windows key won't send

win10
kando 0.4 just testing prelease build

trying to use the "Tile Left/Right" items in the demo menu is failing. config file shows its trying to send Meta+LeftArrow, i tried changing it to Super and also Win but none of them work to send

pressing Win+Left on my keyboard does in fact tile left

same problem occurs with "Toggle Maximize", ie Win+Up, tried all combinations

Opening kando on hyprland does nothing.

So I tried kando in three ways, firstly from the releases tab where trying to open kando by double clicking or just using ./kando command works but does nothing (not saying that the menu does nothing, but the menu or anything else doesn't appear).
Nor is there any error.

Secondly I tried the npm install then npm start and same result.

Lastly tried AUR and again using the command did nothing and the menu didn't appear after ctrl + space.

image

(TBH, I feel like this might be a some dumb mistake I did or I probably forgot some dependency so sorry in advance)

Run/Execute Commands

Hi, friend!
Do I understand correctly that at the moment, even if I configure a radial menu via menus.json, it will not be able to launch/execute the necessary commands?
Because now, I only see the appearance setting.

Fails to run, no backend found, under i3WM on X11

Running on Linux (undefined on tty).
This is an unsupported combination! Kando will not work here :(
[728119:1125/202833.161654:ERROR:object_proxy.cc(590)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/portal/desktop: org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.FileChooser”
[728119:1125/202833.161979:ERROR:select_file_dialog_linux_portal.cc(274)] Failed to read portal version property
Failed to initialize Kando: Error: No backend found.
[728119:1125/202833.227255:ERROR:object_proxy.cc(590)] Failed to call method: org.freedesktop.portal.Settings.Read: object_path= /org/freedesktop/portal/desktop: org.freedesktop.DBus.Error.UnknownMethod: No such interface “org.freedesktop.portal.Settings” on object at path /org/freedesktop/portal/desktop

Does kando work only on Wayland ?

Add Fly-Pie-like Hover Mode

would be cool if we have modes to (un)check on an individual basis, e.g. i mastered my media pie-menu, so i don't have to think much about selecting it... although the key to access that menu is the same i use to do backup/power operations (they are in different sub-menus) and those aren't mastered to the point that i could use it with the "hover mode"

as a bonus, maybe the more user uses a menu, the app can suggest at some point a lower threshold or even activating the "hover mode"? ¶ modifying anything should reset the variable...

Test stylus support

This should be done for the minimal working prototype. On Wayland, this also includes multi-cursor support.

  • Ubuntu GNOME (X11)
  • Ubuntu GNOME (Wayland)
  • KDE Neon (X11)
  • KDE Neon (Wayland)
  • Windows 11

Why isn't this working?

I get this error, I don't understand why, I'm using X11. Is there something I'm missing?

Running on Linux (undefined on tty).
This is an unsupported combination! Kando will not work here :(
Failed to initialize Kando: Error: No backend found.

Not installing on Windows 11

I am trying to install Kando on Windows 11. The launch screen starts, animates for a couple of seconds and then closes.

Update: I managed to install it now, after trying a couple of times. But when I start it I get the following message:

Kando failed to start.
Please check the console for more info

I'm unsure how to find the console message however.

Does not work in Hyprland

'''Running on Linux (Hyprland on wayland).
This is an unsupported combination! Kando will not work here :(
[19606:1114/144924.714607:ERROR:object_proxy.cc(590)] Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/portal/desktop: org.freedesktop.DBus.Error.InvalidArgs: No such interface “org.freedesktop.portal.FileChooser”
[19606:1114/144924.714640:ERROR:select_file_dialog_linux_portal.cc(274)] Failed to read portal version property
Failed to initialize Kando: Error: No backend found.
[2023-11-14 14:49:24.757] [MANGOHUD] [error] [overlay_params.cpp:816] Unknown option 'io_stats'
'''
I am on arch

Some problems when working with hyprland

This is quite an impressive project and I really love this😊. Now I am trying this out on my laptop with hyprland. There seems to be some problems.
Here is the screenshot to show the problem.
image
First, I am using an external monitor(4K) together with the one build-in (2.8K). When I call the menu out on my external monitor, it seems that it just takes up part of the area of the screen, not the full screen.

Second, it seems that the panel of the menu just look through anything behind it straightly to the wallpaper rather than floating over the windows behind it. (I am not sure whether the transparency is something do to with my hyprland config, anyway I just wonder how to change this)

By the way, I am wondering if there is a way to close the menu just through the mouse, like the right button or something? I have already bind the trigger to the side bar of it and I want everything to be done with my mouse.

Cannot run on Gnome/Wayland: "unsupported combination" error

Hello, first of all well done for this amazing work! I strongly believe that the future of the Linux world lies in the development of desktop environment-agnostic software, and your work serves as a true inspiration.

I was trying to run kando on Ubuntu 23.04 and Gnome on Wayland. Unfortunately I get the following error when executing npm start:

$ npm start

> [email protected] start
> electron-forge start

✔ Checking your system
✔ Locating application
✔ Loading configuration
✔ Preparing native dependencies [0.7s]
✔ Running generateAssets hook
✔ [plugin-webpack] Compiling main process code [2s]
✔ [plugin-webpack] Launching dev servers for renderer process code [1s]
  › Output Available: http://localhost:9000

Running on Linux (Unity on wayland).
This is an unsupported combination! Kando will not work here :(
Failed to initialize Kando: Error: No backend found.

Am I missing something? These are some information that you may find useful:

  1. The XDG_CURRENT_DESKTOP environment variable is set as ubuntu:GNOME
  2. I have installed the gnome extension (GNOME Shell Integration for Kando), then restarted Gnome and enabled the extension. It correctly shows as enabled

If you need any other information I'll be glad to provide them to you.
Thank you!

5 videos decoded...

Hello, each I run the app there's info circle with 5 videos inside even though nothing is visible (I mean nothing from kando at all) they are all played and decoded!

kando 2023

And this is without gpu accel on 8 core cpu
kando 2023 3

address already in use

Unaware of an option to change the port number.

stack trace

An unhandled exception has occurred inside Forge:
listen EADDRINUSE: address already in use :::9000
Error: listen EADDRINUSE: address already in use :::9000
    at Server.setupListenHandle [as _listen2] (node:net:1872:16)
    at listenInCluster (node:net:1920:12)
    at Server.listen (node:net:2008:7)
    at Function.serverListen [as listen] (/home/nehrbash/src/kando/node_modules/express-ws/lib/index.js:42:40)
    at /home/nehrbash/src/kando/node_modules/@electron-forge/web-multi-logger/src/Logger.ts:54:30
    at new Promise (<anonymous>)
    at Logger.start (/home/nehrbash/src/kando/node_modules/@electron-forge/web-multi-logger/src/Logger.ts:53:12)
    at WebpackPlugin.startLogic (/home/nehrbash/src/kando/node_modules/@electron-forge/plugin-webpack/src/WebpackPlugin.ts:441:18)
    at async PluginInterface.overrideStartLogic (/home/nehrbash/src/kando/node_modules/@electron-forge/core/src/util/plugin-interface.ts:154:22)
    at async forgeSpawn (/home/nehrbash/src/kando/node_modules/@electron-forge/core/src/api/start.ts:120:32)
    at async forgeSpawnWrapper (/home/nehrbash/src/kando/node_modules/@electron-forge/core/src/api/start.ts:192:23)
    at async /home/nehrbash/src/kando/node_modules/@electron-forge/core/src/api/start.ts:227:21
    at async /home/nehrbash/src/kando/node_modules/@electron-forge/core/node_modules/@electron-forge/tracer/src/index.ts:51:14
    at async /home/nehrbash/src/kando/node_modules/@electron-forge/cli/src/electron-forge-start.ts:61:19

Add a tutorial

There should be a quick visual introduction in the sidebar.

Does not build for musl

After npm run package, the binary I get does not run due to SIGSEV (segmentation fault). This generally means the binary is built for glibc. I'm on Void Linux musl edition so I need it to build for musl.

Docs about the customization of Kando nodes

Is there a docs that explains how to customize Kando nodes with images on each circle and the commands triggered by clicking on each one of them?

Furthermore, in the future there will be the chance to import in Kando the exported configuration of FlyPie?

Scale font in the center node to make text fit

Hello, currently if the text set as "name" for a node is too long it can extend past the center node circle.
Will there be a way to change the font size of the text for these cases ?

Keyboard based navigation

It would be awesome if it would be possible to control kando fully using only keyboad and no mouse involved. It can be useful in coding and other activities where one dosen't want to interact with mouse.

rofi like applications can be used but the versatile nature of kando, its looks, its animation, really hope it wold be possible.

From user side i can only think of this , one key to activate kando, 8-keys for directional navigation, 2-keys to go to previous/forwad in pie menu.

Simulate a keystroke

This is required for a minimal working prototype. There should be a button in the menu which simulates for instance Ctrl+C.

  • Ubuntu GNOME (X11)
  • Ubuntu GNOME (Wayland) - works with gnome-shell-integration
  • KDE Neon (X11)
  • KDE Neon (Wayland)
  • Windows 11

Missing menu

Hi, it's me again! I am now binding a new button to call out specific menu upon specific apps, along with another button to call out the global menu, which is really cool.
Now I want to use the GUI to adjust the new menu, but I can't find it anywhere in the GUI. So this is still unimplemented or I am missing something?
Still Hyprland, btw.

Consider cursor distance from centre as confirmation

Have an option to make it so that moving mouse cursor certain distance away from the centre is automatically considered a confirmation of selected option.
So that we can move through the menu hierarchy without clicking.
Of course have the option where user can define this auto-confirm distance.

Disregard, this is already implemented as Turbo Mode (achieved by keeping Ctrl pressed while moving the cursor)

Add host system checks

For the minimal working prototype, we need to check the host OS, whether we are on Wayland or X11 and the desktop environment.

  • Ubuntu GNOME (X11)
  • Ubuntu GNOME (Wayland)
  • KDE Neon (X11)
  • KDE Neon (Wayland)
  • Windows 11

Running Kando as service instead of executable

Hey @Schneegans
currently I see that, for starting Kando, the user needs to run an executable that start a NodeJS server.

Instead of this, what do you think if Kando is used as service by running it using systemd or init? Because having a running NodeJS could be heavier than running Kando only as service. In this case the user needs only to run:

sudo systemctl enable kando

and at each reboot, kando is automatically run without the call of the executable (and could it prevent the usage of NodeJS?).

Let me know ^^

Test touch support

This should be done for the minimal working prototype.

  • Ubuntu GNOME (X11)
  • Ubuntu GNOME (Wayland)
  • KDE Neon (X11)
  • KDE Neon (Wayland)
  • Windows 11

hotkeys dont work on windows?

just downloaded this to test, also downloaded your demo menu from youtube, none of the hotkey shortcuts work. am i doing something wrong? also tried running the menu as administrator and that didnt work either

Support for application-title dependent menus

I know that there are plans to implement application dependent menus, but I think it would also be nice to add support for application-title dependent menus. That is to say different menus depending on the title of the focused program window. For example, this would be helpful for having different menus depending on the current website you are on(such as google, youtube, gmail, etc.)

If implemented, the title detection could have different options where the text you configure has to either match exactly, show at the start, or show at the end of the focused window's title.

Kando hotkey not working in Hyprland

Hey,

I've followed the instructions to download Kando, specifically downloading a release and executing the kando binary. However upon binding kando:prototype_trigger to alt + space in my Hyprland config, the radial menu does not appear.

If I manually execute ./kando --menu "Prototype Menu" then the menu is rendered and functions as expected [1]. Looking at the Hyprland logs, I can confirm it is picking up on my keybinds because it outputs Keybind triggered, calling dispatcher (8, , 32) when I press alt + space.

Therefore I'm inclined to think this is some type of issue within Kando that isn't properly observing my keybinds, is there some way to enable verbose logging at the Kando level? Which I suspect might help narrow it down (I'm happy to build from source if required).

--

OS: Debian GNU/Linux rodete x86_64
Hyprland Version: v0.34.0 (latest version)
Dotfiles: https://github.com/o-y/dotfiles

1: https://gist.github.com/o-y/6ad3575d82cd0b6c57600b0526ea6d0c

Add support for wlroots

A custom backend for wlroots would add support for compositors such as Hyprland. Implementing such a backend will be not exactly easy, but it should be possible. If you have some JavaScript and C++ knowledge, I would greatly appreciate a contribution here!

Here are some pointers:

  • First, a new class implementing the Backend interface must be created. It could be in src/main/backends/linux/wlroots. The X11 backend could provide some inspiration. In the beginning, most methods can use some kind of dummy implementation.
  • Then, the new backend must be instantiated in this file. For instance, if the compositor is Hyprland.
  • Finally, all the methods of the backend need to be implemented. As wlroots implements a lot of cool wayland protocols, this should be possible.
  • I once tried using a wayland protocol for KDE in Kando. It turned out to be not necessary, but I kept the code around for future reference. I think that this could be implemented in a similar fashion.

README improvements

Hi, thousand thanks for your great Fly-Pie extension. I tested it yesterday in a Qemu hosted Ubuntu and would love to see it available for my KDE desktop!

I just cloned this repo and tried to follow the introduction. It did'nt work work out of the box as the following packages were missing on Kubuntu 23.04, X11:

libx11-dev libxss-dev xdotool

With these installed it worked flawlessly ❤️ maybe you could update the README to inform the user about potentially missing packages. Thanks!

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.