Giter VIP home page Giter VIP logo

kupfer's Introduction

kupfer is a smart, quick launcher

Homepage

https://kupferlauncher.github.io/

Credits

Copyright 2007–2023 Ulrik Sverdrup and other Kupfer authors

Licence

GNU General Public License v3 (or any later version)

Kupfer is an interface for quick and convenient access to applications and their documents.

The most typical use is to find a specific application and launch it. We have tried to make Kupfer easy to extend with plugins so that this quick-access paradigm can be extended to many more objects than just applications.

Installing

This project is configured for the Waf build system, which is included. Run it using either ./waf or python3 waf (using your python.)

Installation follows the steps:

./waf configure
./waf

If configure does not find the right Python 3 executable, set PYTHON explicitly first.

then:

./waf install

or :

sudo ./waf install

You can use --prefix=$PREFIX when configuring to assign an installation spot. By default, Kupfer is installed for all users. Installing only for your user is possible, but the binary directory must be in your $PATH.

About Waf

Waf is included in both the distributable tarball and the repository (so that full source code is incuded. See the file waf for author and licensing information).

Waf was acquired through https://waf.io/, version 2.0.25. The following files extracted:

./waf-light -> ./waf
./waflib    -> ./waflib
./ChangeLog -> ./Waf.ChangeLog

./waflib/Tools/*  some files excluded
./waflib/extras/* some files excluded

Build Requirements

  • Python 3.9+
  • intltool
  • optionally: rst2man (python-docutils) to install the manpage
  • optionally: itstool to install mallard help pages

Runtime Requirements

Kupfer requires Python 3.9 or later, and the following important libraries:

Because the port to Python 3 and Gtk 3 is new, I don't know what the lower boundaries of dependencies are. I've given the versions where it is known to work.

  • Gtk-3.0 version 3.22
  • libkeybinder-3.0 version 0.3.1
  • python gir1.2
  • dbus python bindings
  • python-xdg

Opportunistic dependencies

  • If available, 'setproctitle' is used to set the process name
  • If available, you can use AppIndicator3. On debian the package name needed for the dependency is gir1.2-appindicator3-0.1 (g-i bindings).

Recommended dependencies

  • Wnck-3.0 version 3.20 (Without this you can't focus already running applications)
  • Yelp, the help browser

Some plugins will require additional python modules!

Spawning

The program is installed as kupfer into $PREFIX/bin. Only one instance can be active for one user at a given time. Normal use of kupfer requires an active dbus session bus.

Keybinder Module

Keybinder is a library for global keyboard shortcuts.

You can use kupfer without the keybinder module, for example by assigning a window manager keybinding to the kupfer binary.

If Keybinder gi bindings are installed, the library is used. If you must disable it without uninstalling them then see the man page.

Documentation

The user’s guide is installed as Mallard help pages, available under the “Kupfer Help” object in the program itself; it is also on the web page. Kupfer will use the help browser if there is a handler for the help: URI scheme. The user’s guide’s source is under help/, and it is translatable.

Please read Documentation/ and Documentation/Manpage.rst for technical and contributor documentation.

kupfer's People

Contributors

andrejz avatar annoab avatar bluss avatar chuchiperriman avatar dasj19 avatar dmustieles avatar dnoway avatar dnschneid avatar frandieguez avatar gajdusek avatar haaninjo avatar harsh04081997 avatar jordimas avatar karolbedkowski avatar krullborg avatar leoen25demayo avatar lleites avatar mariobl avatar marv-cz avatar nashamri avatar nordstern avatar nyucel avatar piotrdrag avatar pmkovar avatar pstuifzand avatar sanskritfritz avatar stas avatar thomas-mc-work avatar tuxcanfly avatar wfriesen 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  avatar  avatar  avatar  avatar  avatar

kupfer's Issues

Kupfer crashes when closing Text window

Environment

Kupfer Version: 316
Window Manager: kwin
Desktop Environment: Plasma5
Linux Distribution: archlinux

"Show text" displays a window with the text. Closing the window causes Kupfer to crash.

(kupfer.py:8858): Gdk-ERROR **: The program 'kupfer.py' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadWindow (invalid Window parameter)'.
  (Details: serial 10875 error_code 3 request_code 20 (core protocol) minor_code 0)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the GDK_SYNCHRONIZE environment
   variable to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)
fish: “kupfer” terminated by signal SIGTRAP (Trace or breakpoint trap)

Cannot open preferences window

Another v300 issue:

Traceback (most recent call last):
  File "/usr/share/kupfer/kupfer/ui/browser.py", line 1973, in mitem_handler
    callback(ui_ctx)
  File "/usr/share/kupfer/kupfer/kupferui.py", line 62, in show_preferences
    win = preferences.GetPreferencesWindowController()
  File "/usr/share/kupfer/kupfer/ui/preferences.py", line 911, in GetPreferencesWindowController
    _preferences_window = PreferencesWindowController()
  File "/usr/share/kupfer/kupfer/ui/preferences.py", line 170, in __init__
    key= lambda rec: rec["localized_name"])
  File "/usr/share/kupfer/kupfer/utils.py", line 79, in locale_sort
    seq = seq if isinstance(seq, list) else list(seq)
  File "/usr/share/kupfer/kupfer/core/plugins.py", line 62, in get_plugin_info
    plugin = import_plugin_any(plugin_name)
  File "/usr/share/kupfer/kupfer/core/plugins.py", line 275, in import_plugin_any
    return _staged_import(name, _import_hook_fake)
  File "/usr/share/kupfer/kupfer/core/plugins.py", line 252, in _staged_import
    plugin = import_hook(_plugin_path(name))
  File "/usr/share/kupfer/kupfer/core/plugins.py", line 206, in _import_hook_fake
    return _import_plugin_fake(modpath)
  File "/usr/share/kupfer/kupfer/core/plugins.py", line 195, in _import_plugin_fake
    code = _truncate_code(code, info_attributes)
  File "/usr/share/kupfer/kupfer/core/plugins.py", line 159, in _truncate_code
    global_name = code.co_names[num]
IndexError: tuple index out of range

Provide icons for some objects

We should ship icons for some objects that are not covered by the standard icon naming spec

  • Window(s)
  • Workspace(s)

Environment

Kupfer Version: 315

Allow to use dark version of the GTK theme

Environment

Kupfer Version: git March 3 (v314)
Window Manager: Mutter
Desktop Environment: GNOME 3.22
Linux Distribution: Fedora 25

Actual Behaviour

Kupfer uses the normal version of the current GTK theme.

Expected Behaviour

An option in settings to activate the dark version of the current select theme. Dark themes make it look nicer and improve contrast with the mostly white webpages/app backgrounds and bright/colorful icon themes, which seem to be the norm these days. Attached is a screenshot of Kupfer using Adwaita-Dark,
activated through GTK+ Inspector.

image

Editing the launcher command to start in the dark theme using the environment variables is possible, but makes every program/window Kupfer spawns black as well.

Port RhythmBox plugin

Nice to see some activity after after long. Please port Rhythmbox plugin.

Thanks.

While openning a note, Kupfer should not throw libnotify notification when Gnote is not running

Actual Behaviour

While trying to open a note using kupfer:
When the app is not running, dbus-interface is unavailable and it shows an error notification. Running it second time opens the note (as interface becomes available by then)

Expected Behaviour

Instead it should try to open the note and should not throw libnotify notification. Or may be show a different notification like "Openning note...."

Environment

Kupfer Version: git+master
Window Manager: Compiz/Unity
Desktop Environment: Unity-7
Linux Distribution: Ubuntu 17.04

Resilience to errors and exceptions in plugins

This is a bit of an unwieldy issue in Python, exceptions can bubble up everywhere. When we're using lazy iterators and generators, even long outside the method calls on plugin objects.

  • Guard exceptions in content decoration 0316441
  • xyz

Crashes after a few hours

Kupfer v303 crashes after a few hours of usage in Ubuntu 16.10. Edit: From what I can tell, this looks like it's caused by the clipboard plugin, when using the Shutter application (screenshot tool), which copies newly created screenshots to the clipboard (as images).

Here's the log:

D [kupfer.plugin.clipboard] ClipboardSource: Loaded items
D [kupfer.plugin.documents] RecentsSource: Loaded items
D [kupfer.desktop_launch]: Launched [b'terminix'] kupfer.py-9685-andrei-desktop-terminix-1_TIME20767995 pid: 10983
GLib-CRITICAL **: Source ID 3555 was not found when attempting to remove it at /usr/share/perl5/Shutter/App/ShutterNotification.pm line 186.
GLib-CRITICAL **: Source ID 4544 was not found when attempting to remove it at /usr/bin/shutter line 7249.
Argument "rectangle" isn't numeric in numeric eq (==) at /usr/share/perl5/Shutter/Draw/DrawingTool.pm line 2366.
GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' failed at /usr/share/perl5/Shutter/Draw/DrawingTool.pm line 1342.
GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' failed at /usr/share/perl5/Shutter/Draw/DrawingTool.pm line 1342.
GLib-CRITICAL **: Source ID 6424 was not found when attempting to remove it at /usr/bin/shutter line 7249.
Traceback (most recent call last):
  File "/usr/share/kupfer/kupfer/weaklib.py", line 27, in __call__
    attr(*args, **kwargs)
  File "/usr/share/kupfer/kupfer/plugin/clipboard.py", line 132, in _clipboard_changed
    is_selection = (event.selection == Gdk.SELECTION_PRIMARY)
RecursionError: maximum recursion depth exceeded while calling a Python object
Fatal Python error: Cannot recover from stack overflow.

Current thread 0x00007f7a66990700 (most recent call first):
  File "/usr/share/kupfer/kupfer/plugin/clipboard.py", line 132 in _clipboard_changed
  ...
Aborted

Port AppIndicator code to pygi

The Kupfer AppIndicator/tray is not working in Ubuntu (with Unity). Tested in Ubuntu 16.10 and 17.04 with Kupfer v303. The Kupfer v208 AppIndicator does show up in Ubuntu 16.10 (I didn't test the old version in Ubuntu 17.04).

Unfortunately there doesn't seem to be anything in the indicate what is causing this:

D [kupfer.ui.preferences] PreferencesWindowController: Standard Plugins: 40
D [kupfer.core.settings] SettingsController: Set Kupfer showstatusicon to False
[kupfer.core.sources] PeriodicRescanner: Starting new campaign, interval 3 s
D [kupfer.plugin.documents] RecentsSource: Loaded 606 items
D [kupfer.core.settings] SettingsController: Set Kupfer showstatusicon to True
D [kupfer.plugin.clipboard] ClipboardSource: Loaded 10 items
D [kupfer.plugin.notes] NotesSource: Loaded 0 items

Kupfer can not search Rhythmbox songs until Rhythmbox starts

Actual Behavior

  1. Set include songs on top level from plugin-preference

  2. Quit Rhythmbox. Quit Kupfer and restart.

  3. Wait kupfer to load SongsSource....for me it is giving something like

D [kupfer.plugin.rhythmbox] RhythmboxSongsSource: Loaded items
D [kupfer.plugin.rhythmbox] RhythmboxSource: Loaded 4 items
  1. Try search by songs names. It won't work. Navigate to Rhythbox->Songs..It's empty

Expected Behavior

  1. Kupfer should able to load previously stored song names from cache even when Rhythmbox is not running in the background.

  2. Pressing enter on song-object Kupfer should open Rhythmbox (only if it is not running) and starts playing the song.

Environment

Kupfer Version: 317
Window Manager: Compiz (Unity)
Desktop Environment: Unity
Linux Distribution: Ubuntu 17.04

Making small fixes in the docs?

I found some errors in the documentation (specifically in PluginAPI.rst the plugin path should be share/kupfer/plugin). May I directly edit the document thus creating a new commit or do you prefer to fix it yourself either through a pull request or based on this report?

WAF: ./waf configure raise UnicodeDecodeError

In my system ./waf configure raise UnicodeDecodeError.

Info:

  • System: ArchLinux 4.9.7-1
  • Env: LANG=en_US.UTF-8, GDM_LANG=en_US.utf8
  • Python: 3.6.0

Stacktrace:

Traceback (most recent call last):
  File "/home/hugosenari/codes/kupfer/waflib/Scripting.py", line 138, in waf_entry_point
    run_commands()
  File "/home/hugosenari/codes/kupfer/waflib/Scripting.py", line 225, in run_commands
    parse_options()
  File "/home/hugosenari/codes/kupfer/waflib/Scripting.py", line 186, in parse_options
    Context.create_context('options').execute()
  File "/home/hugosenari/codes/kupfer/waflib/Options.py", line 250, in execute
    super(OptionsContext, self).execute()
  File "/home/hugosenari/codes/kupfer/waflib/Context.py", line 213, in execute
    self.recurse([os.path.dirname(g_module.root_path)])
  File "/home/hugosenari/codes/kupfer/waflib/Context.py", line 291, in recurse
    user_function(self)
  File "/home/hugosenari/codes/kupfer/wscript", line 115, in options
    opt.recurse(config_subdirs)
  File "/home/hugosenari/codes/kupfer/waflib/Context.py", line 285, in recurse
    wscript_module = load_module(node.abspath())
  File "/home/hugosenari/codes/kupfer/waflib/extras/compat15.py", line 111, in load_module
    ret = rev(path)
  File "/home/hugosenari/codes/kupfer/waflib/Context.py", line 539, in load_module
    code = Utils.readf(path, m='rU')
  File "/home/hugosenari/codes/kupfer/waflib/Utils.py", line 137, in readf
    return f.read()
  File "/usr/lib/python3.6/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 207: ordinal not in range(128)

Workaround:

  • Add fallback to read as utf8
def readf(fname, m='r'):
    try:
        f = open(fname, m)
        txt = f.read()
    except UnicodeDecodeError:
        f.close()
        f = open(fname, m, encoding='utf-8')
        txt = f.read()
    finally:
        f.close()
    return txt

Add session manager connection for KDE

This message shows up for anywhere we don't support the session manager.

[kupfer.ui.session] SessionClient: Warning: Not able to connect to current desktop session, please Quit before logout to save kupfer's data.

It may be needed to exit cleanly on session exit (logout, reboot). Kupfer saves data on SIGTERM as well, so if it gets that signal and some time, that's fine too.

Idea: Actions in the Primary Pane

One idea that is at the back of my mind is to allow certain actions to be found in the primary pane. When an action is selected in the primary pane, the action pane is hidden and the third (indirect object) pane is shown to select object to act upon.

One example of a sensible action to “reverse” in this way would be Write Email To → (Contact)

Notification upon successful disk unmount

Environment

Kupfer Version: git as of 3.03.20 (v314)
Window Manager: Mutter
Desktop Environment: GNOME 3.22 w/ GNOME Shell
Linux Distribution: Fedora 25

Actual Behaviour

Using the "Volumes and Disks" plugins, whenever I unmount a volume, no feedback is provided.

Expected Behaviour

After am unmount operation, a notification should be shown providing feedback (either positive or negative) about the operation and whether the disk can be safely removed.

Extra

Thanks for bringing Kupfer back from the dead. I was a GNOME Do user and it was one of the most satisfying computing experiences of my life. Kupfer is bringing that back. So productive now!

Main window appears and vanishes immediately

I tried kupfer and I like it (when it works) but I'm having a debilitating issue.

Environment

Kupfer Version: 310
Window Manager: Mutter
Desktop Environment: Gnome 3.22
Linux Distribution: Arch Linux

Actual Behaviour

Many times, on pressing ctrl +space I get the kupfer window for an instant and then it vanishes. This is especially true when there's some program running (Chromium, Libreoffice)

Expected Behaviour

The main window should remain open until Enter is pressed of some search result clicked.

CLI Errors

[kupfer.ui.browser] WindowController: Trying to register space to spawn kupfer.. success
Error [kupfer.ui.session] SessionClient: org.gnome.SessionManager.AlreadyRegistered: Unable to register client
[kupfer.ui.session] SessionClient: Warning: Not able to connect to current desktop session, please Quit before logout to save kupfer's data.

(Python-3) Port GTG Plugin

On Ubuntu (16.xx, 17.xx) and on Debian strech, stable version of GTG is 3.1 which work wonderfully well with old kupfer plugin. It's nothing more than a dbus-implementation of gtg. It should also work with python-3.

Thanks.

Trash plugin crashes in Kupfer

Kupfer Version: v311
Window Manager: kwin
Desktop Environment: Plasma desktop 5.8.5
Linux Distribution: Arch Linux

There is no traces of Trash in the menu, only when I search for a file, then there is "Move to Trash" but it doesn't do anything.

Shell output:

Traceback (most recent call last):
  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.6/threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/share/kupfer/kupfer/core/sources.py", line 77, in rescan_source
    list(source.get_leaves(force_update=force_update))
  File "/usr/share/kupfer/kupfer/obj/base.py", line 426, in get_leaves
    self.cached_items = aslist(sort_func(self.get_items_forced()))
  File "/usr/share/kupfer/kupfer/obj/base.py", line 158, in aslist
    seq = list(seq)
  File "/usr/share/kupfer/kupfer/plugin/trash.py", line 201, in get_items
    yield Trash(TRASH_URI)
  File "/usr/share/kupfer/kupfer/plugin/trash.py", line 165, in __init__
    SpecialLocation.__init__(self, trash_uri, name=name)
  File "/usr/share/kupfer/kupfer/plugin/trash.py", line 148, in __init__
    Gio.FileQueryInfoFlags.NONE, None)
GLib.GError: g-io-error-quark: Operation not supported (15)```

Kuper terribly confused in multi-monitor setup with different resolutions

I have a dual-screen setup that seems to confused Kupfer to no end about where the launcher should appear, and what size it should be. In particular, I have two screens: one 1920x1080, and one 1200x1920. The second one is rotated, and placed to the right of the 1920x1080 screen, and is marked as my Primary.

As I'm told pictures are worth thousands of words, take a look at the different kupfer invocations I end up with depending on a) which screen my mouse is on, b) which screen has the active virtual desktop, c) whether kupfer has recently been restarted, and d) the phase of the moon.:

confused-kupfer
confused-kupfer
confused-kupfer
confused-kupfer
confused-kupfer
confused-kupfer

Environment

Kupfer Version: v317
Window Manager: xmonad
Desktop Environment: None
Linux Distribution: Arch Linux

Focus action pane by default in some cases

Let's consider focusing the action pane in a number of cases (instead of the primary object pane; the action pane is where actions appear, to the right of the primary object pane by default).

  • When an action returns a result
    • Copy To.. (File Actions plugin)
    • Select in Kupfer (Higher-order Actions plugin)
  • When files are posted
    • kupfer FILE ... from terminal or via dbus
    • Drop files on the kupfer starter icon
  • When text is posted
    • Currently this lets you edit the text. I don't think I want to change this

Help Wanted Tag: because user input is wanted.

Tangential issues: Accelerator key to select each pane (primary object, action, indirect object)? Alt + 1, 2, 3 would be natural.

Revive Empathy Plugin

In my test everything works. Only some minor indentation fix required.

Patch

--- a/oldplugins/empathy.py
+++ b/oldplugins/empathy.py
@@ -174,7 +174,7 @@
 
     def __init__(self, name=_('Empathy Contacts')):
         super(ContactsSource, self).__init__(name, "Contacts")
-        self._version = 2
+        self._version = 3
         self.unpickle_finish()
 
     def pickle_prepare(self):
@@ -216,25 +216,25 @@
                     self.output_info(ex)
                     contacts = None
                 if contacts:
-                        contacts = [c for c in contacts]
-                        contact_attributes = connection.Get(CONTACT_IFACE, "ContactAttributeInterfaces")
-                        contact_attributes = [str(a) for a in contact_attributes]
-                        contact_details = connection.GetContactAttributes(contacts, contact_attributes, False)
-                        for contact, details in contact_details.items():
-                                try:
-                                    status_code = details[_ATTRIBUTES.get("presence")][1]
-                                except KeyError as ex:
-                                    self.output_info('Presence could not be established with %s. Leaving unknown.' % ex)
-                                    status_code = 'unknown'
-                                if not show_offline and status_code == 'offline':
-                                    continue
-                                yield EmpathyContact(
-                                        details[_ATTRIBUTES.get("jid")],
-                                        details[_ATTRIBUTES.get("alias")],
-                                        _STATUSES.get(status_code),
-                                        '', # empathy does not provide resource here AFAIK
-                                        valid_account,
-                                        contact)
+                    contacts = [c for c in contacts]
+                    contact_attributes = connection.Get(CONTACT_IFACE, "ContactAttributeInterfaces")
+                    contact_attributes = [str(a) for a in contact_attributes]
+                    contact_details = connection.GetContactAttributes(contacts, contact_attributes, False)
+                    for contact, details in contact_details.items():
+                        try:
+                            status_code = details[_ATTRIBUTES.get("presence")][1]
+                        except KeyError as ex:
+                            self.output_info('Presence could not be established with %s. Leaving unknown.' % ex)
+                            status_code = 'unknown'
+                        if not show_offline and status_code == 'offline':
+                            continue
+                        yield EmpathyContact(
+                                details[_ATTRIBUTES.get("jid")],
+                                details[_ATTRIBUTES.get("alias")],
+                                _STATUSES.get(status_code),
+                                '', # empathy does not provide resource here AFAIK
+                                valid_account,
+                                contact)
 
     def get_icon_name(self):
         return 'empathy'

Environment

Kupfer Version: git+master
Window Manager: Compiz
Desktop Environment: Unity
Linux Distribution: Ubuntu 17.04

Tracker Integration

Tracker indexes files and file content. How to best connect with this in Kupfer?

Tracker can tell us:

  • Titles of documents like PDFs and Word documents
  • Tags of objects

Future Proof Global Keybindings

In the era of wayland, we need a different way than keybinder to allow global keyboard shortcuts.

  • Allow using Kupfer without keybinder installed (since v311)
  • Allow to summon kupfer from window manager shortcuts (Just use kupfer exectuable)
  • Generalize global keybinding code for primary Ctrl + Space shortcut
  • Generalize so that triggers can use it too (Arbitrary amount of keybindings needed)

Show with Selection doesn't work here

Kupfer Version: 311 or older
Window Manager: kwin
Desktop Environment: KDE Plasma 5
Linux Distribution: archlinux
I have set Show with Selection shortcut, but kupfer simply appears as if the normal shorcut were pressed.
All I get in the terminal is this:

[kupfer.ui.browser] WindowController: Trying to register <Alt>F2 to spawn kupfer.. success
[kupfer.ui.session] SessionClient: Warning: Not able to connect to current desktop session, please Quit before logout to save kupfer's data.

The window doesn't appear in window center

Environment

Kupfer Version: 314 and git version
Window Manager: Mutter
Desktop Environment: Gnome Shell
Linux Distribution: Arch Linux

Actual Behaviour

When I invoke kupfer, it appears in upper left corner.

Expected Behaviour

It should appears in center.

$ kupfer --debug
D [kupfer.main]: Version: kupfer v314
D [kupfer.ui.keybindings]: Keybinder disabled
D [kupfer.scheduler] Scheduler: Loading
D [kupfer.core.settings] SettingsController: Using None
D [kupfer.core.plugins]: Loading kupfer.plugin.applications
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/applications.py
D [kupfer.core.sources]: Add <kupfer.plugin.applications.OpenWith>
D [kupfer.core.sources]: Add <kupfer.plugin.applications.SetDefaultApplication>
D [kupfer.core.sources]: Add <kupfer.plugin.applications.ResetAssociations>
D [kupfer.core.sources] SourcePickler: Loading Aplicaciones from kb9665413a9742a6ec77cc473359a2157-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.applications.AppSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.archiveinside
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/archiveinside.py
D [kupfer.core.sources]: Add <class 'kupfer.plugin.archiveinside.ArchiveContent'>
D [kupfer.core.plugins]: Loading kupfer.plugin.archivemanager
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/archivemanager.py
D [kupfer.core.sources]: Add <kupfer.plugin.archivemanager.UnpackHere>
D [kupfer.core.sources]: Add <kupfer.plugin.archivemanager.CreateArchive>
D [kupfer.core.sources]: Add <kupfer.plugin.archivemanager.CreateArchiveIn>
D [kupfer.core.plugins]: Loading kupfer.plugin.calculator
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/calculator.py
D [kupfer.core.sources]: Add <kupfer.plugin.calculator.Calculate>
D [kupfer.core.plugins]: Loading kupfer.plugin.commands
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/commands.py
D [kupfer.core.sources]: Add <kupfer.plugin.commands.CommandTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.PassToCommand>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.FilterThroughCommand>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.WriteToCommand>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.PassToCommand>
D [kupfer.icons]: Loading icon kupfer-object at 24 for core
D [kupfer.icons]: Loading icon kupfer-object at 128 for core
D [kupfer.icons]: Loading icon kupfer-object-multiple at 24 for core
D [kupfer.icons]: Loading icon kupfer-object-multiple at 128 for core
D [kupfer.core.plugins]: Loading kupfer.plugin.core
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/core/__init__.py
D [kupfer.plugin_support]: Registered alternative icon_renderer: kupfer.plugin.core.gtk
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.gnome-terminal
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.xfce4-terminal
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.lxterminal
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.xterm
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.urxvt
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.konsole
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.BasicTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.PathTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.URLTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.SearchInside>
D [kupfer.core.sources]: Add <kupfer.plugin.core.CopyToClipboard>
D [kupfer.core.sources]: Add <kupfer.plugin.core.debug.DebugInfo>
D [kupfer.core.sources]: Add <kupfer.plugin.core.debug.Forget>
D [kupfer.core.sources]: Add <kupfer.plugin.core.Rescan>
D [kupfer.core.sources]: Add <kupfer.plugin.core.Rescan>
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.OpenTextUrl>
D [kupfer.core.sources]: Add <kupfer.plugin.core.commands.SaveToFile>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.core.contents.KupferSource'>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.core.debug.ComposedSource'>
D [kupfer.core.sources]: Add <kupfer.plugin.core.internal.CommandResults>
D [kupfer.core.sources]: Add <kupfer.plugin.core.contents.KupferSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.internal.KupferInterals>
D [kupfer.core.plugins]: Loading kupfer.plugin.custom_terminal
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/custom_terminal.py
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.custom_terminal.custom1
D [kupfer.core.plugins]: Loading kupfer.plugin.documents
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/documents.py
D [kupfer.core.sources]: Add <class 'kupfer.plugin.documents.ApplicationRecentsSource'>
D [kupfer.core.sources] SourcePickler: Loading Lugares from k1f0af4f3ea12f6293832abbde9f17a49-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.documents.PlacesSource>
D [kupfer.core.sources] SourcePickler: Loading Elementos recientes from kcd126db585869371afc4ba3eb2b41488-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.documents.RecentsSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.favorites
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/favorites.py
D [kupfer.core.sources]: Add <kupfer.plugin.favorites.AddFavorite>
D [kupfer.core.sources]: Add <kupfer.plugin.favorites.RemoveFavorite>
D [kupfer.core.sources] SourceDataPickler: Loaded configuration from config-kupfer.plugin.favorites-v2.pickle
D [kupfer.core.sources]: Add <kupfer.plugin.favorites.FavoritesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.firefox
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/firefox.py
D [kupfer.core.sources]: Add <class 'kupfer.plugin.firefox.BookmarksSource'>
D [kupfer.core.sources] SourcePickler: Loading Marcadores de Firefox from kf234b126a79622d2753d88bf3d90a9fb-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.firefox.BookmarksSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.locate
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/locate.py
D [kupfer.core.sources]: Add <kupfer.plugin.locate.Locate>
D [kupfer.core.plugins]: Loading kupfer.plugin.notes
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/notes.py
D [kupfer.core.sources]: Add <kupfer.plugin.notes.AppendToNote>
D [kupfer.core.sources]: Add <kupfer.plugin.notes.CreateNote>
D [kupfer.core.sources]: Add <kupfer.plugin.notes.GetNoteSearchResults>
D [kupfer.core.sources]: Add <kupfer.plugin.notes.AppendTextToNote>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.notes.NotesSource'>
D [kupfer.core.sources] SourcePickler: Loading Notas from k32b58b482ef82f7d3468d417a314b6c7-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.notes.NotesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.templates
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/templates.py
D [kupfer.core.sources]: Add <kupfer.plugin.templates.CreateNewDocument>
D [kupfer.core.sources] SourcePickler: Loading Plantillas de documentos from k254e7a970db87e8d2d8c9808fd7c23b4-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.templates.TemplatesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.tracker1
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/tracker1.py
D [kupfer.core.sources]: Add <kupfer.plugin.tracker1.TrackerFulltext>
D [kupfer.core.sources]: Add <kupfer.plugin.tracker1.TrackerSearch>
D [kupfer.core.sources]: Add <kupfer.plugin.tracker1.TrackerSearchHere>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.tracker1.TrackerQuerySource'>
D [kupfer.core.plugins]: Loading kupfer.plugin.volumes
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/volumes.py
D [kupfer.core.sources]: Add <kupfer.plugin.volumes.VolumesSource>
D [kupfer.core.sources] SourcePickler: Loading juan from k7456e6c5d67267b23fd2694ccb4ee267-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Loading juan from k3fe5f2c026937739b2c06fa9dfe33dbd-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Loading Documentos from kb06bb883f655fd9310a7a8c2308900ab-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Loading dunehd from kde18d244b13b3ea9895b2713fd0e4bea-v5.pickle.gz
D [kupfer.plugin.templates]: /home/juan/Plantillas
D [kupfer.core.sources] PeriodicRescanner: Registering new campaign, in 10 s
D [kupfer.plugin.volumes] VolumesSource: Loaded items
D [kupfer.obj.sources] SourcesSource: Loaded items
D [kupfer.plugin.favorites] FavoritesSource: Loaded items
D [kupfer.core.learn]: Reading from /home/juan/.config/kupfer/mnemonics.pickle
D [kupfer.scheduler] Scheduler: Loaded
D [kupfer.scheduler] Scheduler: Display
D [kupfer.core.data] DataController: Reloading source root
D [kupfer.ui.browser]: Scale factor 1

(kupfer.py:1098): Gdk-CRITICAL **: gdk_window_get_effective_toplevel: assertion 'GDK_IS_WINDOW (window)' failed

(kupfer.py:1098): Gdk-WARNING **: Couldn't map as window 0x10f9320 as popup because it doesn't have a parent
D [kupfer.scheduler] Scheduler: After Display
D [kupfer.ui.browser] WindowController: in lazy_setup
Kupfer: Un lanzador de aplicaciones libre (GPLv3+)
   Copyright © 2007–2017 Ulrik Sverdrup with others
   https://kupferlauncher.github.io/

[kupfer.ui.browser] WindowController: Trying to register <Ctrl>space to spawn kupfer.. failed
D [kupfer.ui.session] SessionClient: Connected to session as client /org/gnome/SessionManager/Client15 
D [kupfer.ui.browser] Interface: Finished lazy_setup
D [kupfer.ui.browser] WindowController: finished lazy_setup
^@^C[kupfer.ui.browser] WindowController: Caught signal 2 exiting..
[kupfer.core.data] DataController: Saving data...
D [kupfer.core.learn]: Saving to /home/juan/.config/kupfer/mnemonics.pickle
D [kupfer.core.sources] SourceDataPickler: Storing configuration for Favoritos as config-kupfer.plugin.favorites-v2.pickle
[kupfer.core.data] DataController: Saving cache...
D [kupfer.core.sources] SourcePickler: Storing Marcadores de Firefox as kf234b126a79622d2753d88bf3d90a9fb-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Notas as k32b58b482ef82f7d3468d417a314b6c7-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Documentos as kb06bb883f655fd9310a7a8c2308900ab-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing dunehd as kde18d244b13b3ea9895b2713fd0e4bea-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Lugares as k1f0af4f3ea12f6293832abbde9f17a49-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing juan as k7456e6c5d67267b23fd2694ccb4ee267-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing juan as k3fe5f2c026937739b2c06fa9dfe33dbd-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Elementos recientes as kcd126db585869371afc4ba3eb2b41488-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Plantillas de documentos as k254e7a970db87e8d2d8c9808fd7c23b4-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Aplicaciones as kb9665413a9742a6ec77cc473359a2157-v5.pickle.gz
D [kupfer.ui.browser] Interface: Finished save_config

v306 no longer builds in Ubuntu 16.10, requires newer dependency to build documentation

The latest Kupfer v306 requires a newer dependency to build documentation, so I can't build it in my Kupfer PPA any more (one solution would be to skip building documentation, or patch Kupfer, but I'd prefer not to do that). This is what I get when building Kupfer v306 in a Launchpad PPA for Ubuntu 16.10:

make[2]: Entering directory '/<<BUILDDIR>>/kupfer-0+v306/Documentation'
rst2html5 Contributing.rst > Contributing.html
/bin/sh: 1: rst2html5: not found
Makefile:9: recipe for target 'Contributing.html' failed
make[2]: *** [Contributing.html] Error 127

A complete log can be found here: https://launchpadlibrarian.net/306362742/buildlog_ubuntu-yakkety-amd64.kupfer_0+v306-1~webupd8~yakkety0_BUILDING.txt.gz

Looking at the log, it seems python3-docutils from Ubuntu 16.10 doesn't provide rst2html5, but only rst2html:

Setting up python3-docutils (0.12+dfsg-1) ...
update-alternatives: using /usr/share/docutils/scripts/python3/rst-buildhtml to provide /usr/bin/rst-buildhtml (rst-buildhtml) in auto mode
update-alternatives: using /usr/share/docutils/scripts/python3/rst2html to provide /usr/bin/rst2html (rst2html) in auto mode
update-alternatives: using /usr/share/docutils/scripts/python3/rst2latex to provide /usr/bin/rst2latex (rst2latex) in auto mode
update-alternatives: using /usr/share/docutils/scripts/python3/rst2man to provide /usr/bin/rst2man (rst2man) in auto mode
update-alternatives: using /usr/share/docutils/scripts/python3/rst2odt to provide /usr/bin/rst2odt (rst2odt) in auto mode
update-alternatives: using /usr/share/docutils/scripts/python3/rst2odt_prepstyles to provide /usr/bin/rst2odt_prepstyles (rst2odt_prepstyles) in auto mode
update-alternatives: using /usr/share/docutils/scripts/python3/rst2pseudoxml to provide /usr/bin/rst2pseudoxml (rst2pseudoxml) in auto mode
update-alternatives: using /usr/share/docutils/scripts/python3/rst2s5 to provide /usr/bin/rst2s5 (rst2s5) in auto mode
update-alternatives: using /usr/share/docutils/scripts/python3/rst2xetex to provide /usr/bin/rst2xetex (rst2xetex) in auto mode
update-alternatives: using /usr/share/docutils/scripts/python3/rst2xml to provide /usr/bin/rst2xml (rst2xml) in auto mode
update-alternatives: using /usr/share/docutils/scripts/python3/rstpep2html to provide /usr/bin/rstpep2html (rstpep2html) in auto mode

python3-docutils is installed so I guess Kupfer now needs a version newer than the one available in Ubuntu 16.10 (0.12). Can this be changed back to rst2html? If not, I'll patch the PPA package to use rst2html.

Can't build in Ubuntu

When trying to build Kupfer in Ubuntu, it checks /usr/bin/python, which is Python2 in Ubuntu. Maybe it should also check for /usr/bin/python3? Or maybe you know a way around this?

user report

Hello engla,

great project!!

I installed the latest git version and it works nicely. I am on archlinux i686 with python 2.6.2 and gnome 2.26

But I see some errors in the terminal related to firefox and maybe others.

Here is what I see, http://pastie.org/531261

Thanks a lot.

Suggestion: Easier way to find/install plugins

Define a method for plugin distribution. Create an interface based on this method. This will help spread new/third party plugins.

My solution uses python packages and PyPI as repository, so we can install plugin as any python package with pip.

Ie: pip install kupfer_plugin_marketplace (this plugin list PyPI packages that starts with kupfer_plugin and add action to install them)

The main hack at this is a custom setup.py that copy plugin file to userspace plugin directory.

The proper solution could have more integrated interface (maybe in preferences) and do things I don't know how to do (enable plugin after install, install in other thread...).

If we stay with PyPI/pip approach, there is also a cookiecutter that help with boring part of package creation.

[Feature request] inline editing of a textleaf inside kupfer

Glad to see development has resumed! I use kupfer every day and it's great to see it'll continue working for years to come.

There's a little feature I'd love to see available, though, which is the ability to edit lines of text inside Kupfer itself (say to fix a typo, change an argument, or slightly modify a clipboard line or the "selected text" content). Would this be possible?
I used to do a gross hack to achieve this (by using a plugin to activate a qdbus se.kaizer.kupfer /interface PutText "$1" & command), but it'd be great to have that functionality built-in.

No longer opens on active monitor (but on the monitor it shows up the first time) [Unity]

Kupfer no longer opens on the active monitor in my dual-monitor setup (Ubuntu 16.10; update: it occurs under Unity but not in GNOME Shell), but on the monitor it shows up the first time. I missed this bug somehow, and I'm not sure when it started, but it occurs for me with both Kupfer v308.1 and v307.

Here's the debug, though it doesn't seem to give any hints about this:

$ kupfer --debug
D [kupfer.main]: Version: kupfer v308.1
D [kupfer.scheduler] Scheduler: Loading
D [kupfer.core.plugins]: Loading kupfer.plugin.applications
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/applications.py
D [kupfer.core.sources]: Add <kupfer.plugin.applications.OpenWith>
D [kupfer.core.sources]: Add <kupfer.plugin.applications.SetDefaultApplication>
D [kupfer.core.sources] SourcePickler: Loading Applications from k3aa790ae0ab77a9888a349a397a02e4b-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.applications.AppSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.archivemanager
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/archivemanager.py
D [kupfer.core.sources]: Add <kupfer.plugin.archivemanager.UnpackHere>
D [kupfer.core.sources]: Add <kupfer.plugin.archivemanager.CreateArchive>
D [kupfer.core.sources]: Add <kupfer.plugin.archivemanager.CreateArchiveIn>
D [kupfer.core.plugins]: Loading kupfer.plugin.audacious
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/audacious.py
D [kupfer.core.sources]: Add <class 'kupfer.plugin.audacious.AudaciousSource'>
D [kupfer.core.sources] SourcePickler: Loading Audacious from ka110115853ddd35bc2715eb83a190557-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.audacious.AudaciousSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.calculator
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/calculator.py
D [kupfer.core.sources]: Add <kupfer.plugin.calculator.Calculate>
D [kupfer.core.plugins]: Loading kupfer.plugin.clipboard
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/clipboard.py
D [kupfer.core.sources]: Add <kupfer.plugin.clipboard.ClearClipboards>
D [kupfer.core.sources] SourcePickler: Loading Clipboards from k2c65a3b08d6cd573a4e3127f7df5ab7b-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.clipboard.ClipboardSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.commands
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/commands.py
D [kupfer.core.sources]: Add <kupfer.plugin.commands.CommandTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.PassToCommand>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.PassToCommand>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.FilterThroughCommand>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.WriteToCommand>
D [kupfer.icons]: Loading icon kupfer-object at 24 for core
D [kupfer.icons]: Loading icon kupfer-object at 128 for core
D [kupfer.icons]: Loading icon kupfer-object-multiple at 24 for core
D [kupfer.icons]: Loading icon kupfer-object-multiple at 128 for core
D [kupfer.core.plugins]: Loading kupfer.plugin.core
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/core/__init__.py
D [kupfer.plugin_support]: Registered alternative icon_renderer: kupfer.plugin.core.gtk
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.gnome-terminal
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.xfce4-terminal
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.lxterminal
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.xterm
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.urxvt
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.konsole
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.BasicTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.PathTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.URLTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.SearchInside>
D [kupfer.core.sources]: Add <kupfer.plugin.core.CopyToClipboard>
D [kupfer.core.sources]: Add <kupfer.plugin.core.debug.DebugInfo>
D [kupfer.core.sources]: Add <kupfer.plugin.core.debug.Forget>
D [kupfer.core.sources]: Add <kupfer.plugin.core.commands.SaveToFile>
D [kupfer.core.sources]: Add <kupfer.plugin.core.Rescan>
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.OpenTextUrl>
D [kupfer.core.sources]: Add <kupfer.plugin.core.Rescan>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.core.contents.KupferSource'>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.core.debug.ComposedSource'>
D [kupfer.core.sources]: Add <kupfer.plugin.core.internal.CommandResults>
D [kupfer.core.sources]: Add <kupfer.plugin.core.contents.KupferSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.internal.KupferInterals>
D [kupfer.core.plugins]: Loading kupfer.plugin.dictionary
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/dictionary.py
D [kupfer.core.sources]: Add <kupfer.plugin.dictionary.LookUp>
D [kupfer.core.plugins]: Loading kupfer.plugin.documents
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/documents.py
D [kupfer.core.sources]: Add <class 'kupfer.plugin.documents.ApplicationRecentsSource'>
D [kupfer.core.sources] SourcePickler: Loading Recent Items from k875b3cebdfd4b9ebcd0396de3828a5fc-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.documents.RecentsSource>
D [kupfer.core.sources] SourcePickler: Loading Places from k3b268c0468d6a50f151376a8d4319726-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.documents.PlacesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.favorites
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/favorites.py
D [kupfer.core.sources]: Add <kupfer.plugin.favorites.AddFavorite>
D [kupfer.core.sources]: Add <kupfer.plugin.favorites.RemoveFavorite>
D [kupfer.core.sources] SourceDataPickler: Loaded configuration from config-kupfer.plugin.favorites-v2.pickle
D [kupfer.core.sources]: Add <kupfer.plugin.favorites.FavoritesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.mediaplayers
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/mediaplayers.py
D [kupfer.core.sources]: Add <kupfer.plugin.mediaplayers.Players>
D [kupfer.core.plugins]: Loading kupfer.plugin.notes
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/notes.py
D [kupfer.core.sources]: Add <kupfer.plugin.notes.AppendToNote>
D [kupfer.core.sources]: Add <kupfer.plugin.notes.CreateNote>
D [kupfer.core.sources]: Add <kupfer.plugin.notes.GetNoteSearchResults>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.notes.NotesSource'>
D [kupfer.core.sources] SourcePickler: Loading Notes from kc2341bc9e33cc257352b62a2364163f0-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.notes.NotesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.session_gnome
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/session_gnome.py
D [kupfer.core.sources]: Add <kupfer.plugin.session_gnome.GnomeItemsSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.show_text
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/show_text.py
D [kupfer.core.sources]: Add <kupfer.plugin.show_text.ShowText>
D [kupfer.core.sources]: Add <kupfer.plugin.show_text.ShowNotification>
D [kupfer.core.plugins]: Loading kupfer.plugin.trash
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/trash.py
D [kupfer.core.sources]: Add <kupfer.plugin.trash.MoveToTrash>
D [kupfer.core.sources] SourcePickler: Loading Trash from k67725c30e6b5980bfcac436b0554cc10-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.trash.TrashSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.triggers
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/triggers.py
D [kupfer.core.sources]: Add <kupfer.plugin.triggers.AddTrigger>
D [kupfer.core.sources] SourceDataPickler: Loaded configuration from config-kupfer.plugin.triggers-v2.pickle
D [kupfer.core.sources]: Add <kupfer.plugin.triggers.Triggers>
D [kupfer.core.plugins]: Loading kupfer.plugin.urlactions
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/urlactions.py
D [kupfer.core.sources]: Add <kupfer.plugin.urlactions.DownloadAndOpen>
D [kupfer.core.sources]: Add <kupfer.plugin.urlactions.DownloadTo>
D [kupfer.core.plugins]: Loading kupfer.plugin.volumes
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/volumes.py
D [kupfer.core.sources]: Add <kupfer.plugin.volumes.VolumesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.wikipedia
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/wikipedia.py
D [kupfer.core.sources]: Add <kupfer.plugin.wikipedia.WikipediaSearch>
D [kupfer.core.sources] SourcePickler: Loading andrei from k4b9305cc9f71f1efc7968ecad8f62a30-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Loading Desktop from k328446105362e9a4b3f663bd88d0f689-v5.pickle.gz
D [kupfer.plugin.triggers] Triggers: Loaded triggers, count: 0
D [kupfer.core.sources] PeriodicRescanner: Registering new campaign, in 10 s
D [kupfer.plugin.mediaplayers] Players: Loaded items
D [kupfer.plugin.volumes] VolumesSource: Loaded items
D [kupfer.plugin.clipboard] ClipboardSource: Loaded items
D [kupfer.obj.sources] SourcesSource: Loaded items
D [kupfer.plugin.triggers] Triggers: Loaded items
D [kupfer.plugin.favorites] FavoritesSource: Loaded items
D [kupfer.core.learn]: Reading from /home/andrei/.config/kupfer/mnemonics.pickle
D [kupfer.scheduler] Scheduler: Loaded
D [kupfer.scheduler] Scheduler: Display
D [kupfer.core.data] DataController: Reloading source root
D [kupfer.ui.browser]: Scale factor 1
D [kupfer.scheduler] Scheduler: After Display
D [kupfer.ui.browser] WindowController: in lazy_setup
D [kupfer.ui.keybindings]: binding '<Ctrl>space'
Kupfer: A free software (GPLv3+) launcher
   Copyright © 2007–2017 Ulrik Sverdrup with others
   https://kupferlauncher.github.io/

[kupfer.ui.browser] WindowController: Trying to register <Ctrl>space to spawn kupfer.. success
D [kupfer.ui.session] SessionClient: Connected to session as client /org/gnome/SessionManager/Client8 
D [kupfer.ui.browser] WindowController: finished lazy_setup
[kupfer.core.sources] PeriodicRescanner: Starting new campaign, interval 3 s
D [kupfer.plugin.mediaplayers] Players: Loaded 0 items
D [kupfer.plugin.triggers] Triggers: Loaded 0 items
D [kupfer.obj.sources] DirectorySource: Loaded 30 items

It fails to execute some programs

Environment

Kupfer Version: git v314.r0.g3c78c181-1
Window Manager: Mutter
Desktop Environment: Gnome Shell 3.22
Linux Distribution: Arch Linux

Actual Behaviour

When I try to execute some applications it doesn't open it.
For example: gFTP, Keepassx2.
I think it fails with programs not ported to Wayland.

kupfer --debug
D [kupfer.main]: Version: kupfer v314
D [kupfer.ui.keybindings]: Keybinder disabled
D [kupfer.scheduler] Scheduler: Loading
D [kupfer.core.settings] SettingsController: Using None
D [kupfer.core.plugins]: Loading kupfer.plugin.applications
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/applications.py
D [kupfer.core.sources]: Add <kupfer.plugin.applications.OpenWith>
D [kupfer.core.sources]: Add <kupfer.plugin.applications.SetDefaultApplication>
D [kupfer.core.sources]: Add <kupfer.plugin.applications.ResetAssociations>
D [kupfer.core.sources] SourcePickler: Loading Aplicaciones from kb9665413a9742a6ec77cc473359a2157-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.applications.AppSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.archiveinside
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/archiveinside.py
D [kupfer.core.sources]: Add <class 'kupfer.plugin.archiveinside.ArchiveContent'>
D [kupfer.core.plugins]: Loading kupfer.plugin.archivemanager
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/archivemanager.py
D [kupfer.core.sources]: Add <kupfer.plugin.archivemanager.UnpackHere>
D [kupfer.core.sources]: Add <kupfer.plugin.archivemanager.CreateArchive>
D [kupfer.core.sources]: Add <kupfer.plugin.archivemanager.CreateArchiveIn>
D [kupfer.core.plugins]: Loading kupfer.plugin.calculator
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/calculator.py
D [kupfer.core.sources]: Add <kupfer.plugin.calculator.Calculate>
D [kupfer.core.plugins]: Loading kupfer.plugin.commands
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/commands.py
D [kupfer.core.sources]: Add <kupfer.plugin.commands.CommandTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.PassToCommand>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.FilterThroughCommand>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.WriteToCommand>
D [kupfer.core.sources]: Add <kupfer.plugin.commands.PassToCommand>
D [kupfer.icons]: Loading icon kupfer-object at 24 for core
D [kupfer.icons]: Loading icon kupfer-object at 128 for core
D [kupfer.icons]: Loading icon kupfer-object-multiple at 24 for core
D [kupfer.icons]: Loading icon kupfer-object-multiple at 128 for core
D [kupfer.core.plugins]: Loading kupfer.plugin.core
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/core/__init__.py
D [kupfer.plugin_support]: Registered alternative icon_renderer: kupfer.plugin.core.gtk
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.gnome-terminal
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.xfce4-terminal
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.lxterminal
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.xterm
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.urxvt
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.core.konsole
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.BasicTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.PathTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.URLTextSource>
D [kupfer.core.sources]: Add <kupfer.plugin.core.SearchInside>
D [kupfer.core.sources]: Add <kupfer.plugin.core.CopyToClipboard>
D [kupfer.core.sources]: Add <kupfer.plugin.core.debug.DebugInfo>
D [kupfer.core.sources]: Add <kupfer.plugin.core.debug.Forget>
D [kupfer.core.sources]: Add <kupfer.plugin.core.Rescan>
D [kupfer.core.sources]: Add <kupfer.plugin.core.Rescan>
D [kupfer.core.sources]: Add <kupfer.plugin.core.text.OpenTextUrl>
D [kupfer.core.sources]: Add <kupfer.plugin.core.commands.SaveToFile>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.core.contents.KupferSource'>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.core.debug.ComposedSource'>
D [kupfer.core.sources]: Add <kupfer.plugin.core.internal.KupferInterals>
D [kupfer.core.sources]: Add <kupfer.plugin.core.internal.CommandResults>
D [kupfer.core.sources]: Add <kupfer.plugin.core.contents.KupferSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.custom_terminal
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/custom_terminal.py
D [kupfer.plugin_support]: Registered alternative terminal: kupfer.plugin.custom_terminal.custom1
D [kupfer.core.plugins]: Loading kupfer.plugin.documents
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/documents.py
D [kupfer.core.sources]: Add <class 'kupfer.plugin.documents.ApplicationRecentsSource'>
D [kupfer.core.sources] SourcePickler: Loading Elementos recientes from kcd126db585869371afc4ba3eb2b41488-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.documents.RecentsSource>
D [kupfer.core.sources] SourcePickler: Loading Lugares from k1f0af4f3ea12f6293832abbde9f17a49-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.documents.PlacesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.favorites
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/favorites.py
D [kupfer.core.sources]: Add <kupfer.plugin.favorites.AddFavorite>
D [kupfer.core.sources]: Add <kupfer.plugin.favorites.RemoveFavorite>
D [kupfer.core.sources] SourceDataPickler: Loaded configuration from config-kupfer.plugin.favorites-v2.pickle
D [kupfer.core.sources]: Add <kupfer.plugin.favorites.FavoritesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.firefox
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/firefox.py
D [kupfer.core.sources]: Add <class 'kupfer.plugin.firefox.BookmarksSource'>
D [kupfer.core.sources] SourcePickler: Loading Marcadores de Firefox from kf234b126a79622d2753d88bf3d90a9fb-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.firefox.BookmarksSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.locate
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/locate.py
D [kupfer.core.sources]: Add <kupfer.plugin.locate.Locate>
D [kupfer.core.plugins]: Loading kupfer.plugin.notes
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/notes.py
D [kupfer.core.sources]: Add <kupfer.plugin.notes.AppendToNote>
D [kupfer.core.sources]: Add <kupfer.plugin.notes.CreateNote>
D [kupfer.core.sources]: Add <kupfer.plugin.notes.GetNoteSearchResults>
D [kupfer.core.sources]: Add <kupfer.plugin.notes.AppendTextToNote>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.notes.NotesSource'>
D [kupfer.core.sources] SourcePickler: Loading Notas from k32b58b482ef82f7d3468d417a314b6c7-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.notes.NotesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.templates
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/templates.py
D [kupfer.core.sources]: Add <kupfer.plugin.templates.CreateNewDocument>
D [kupfer.core.sources] SourcePickler: Loading Plantillas de documentos from k254e7a970db87e8d2d8c9808fd7c23b4-v5.pickle.gz
D [kupfer.core.sources]: Add <kupfer.plugin.templates.TemplatesSource>
D [kupfer.core.plugins]: Loading kupfer.plugin.tracker1
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/tracker1.py
D [kupfer.core.sources]: Add <kupfer.plugin.tracker1.TrackerFulltext>
D [kupfer.core.sources]: Add <kupfer.plugin.tracker1.TrackerSearch>
D [kupfer.core.sources]: Add <kupfer.plugin.tracker1.TrackerSearchHere>
D [kupfer.core.sources]: Add <class 'kupfer.plugin.tracker1.TrackerQuerySource'>
D [kupfer.core.plugins]: Loading kupfer.plugin.volumes
D [kupfer.core.plugins]:   from /usr/share/kupfer/kupfer/plugin/volumes.py
D [kupfer.core.sources]: Add <kupfer.plugin.volumes.VolumesSource>
D [kupfer.core.sources] SourcePickler: Loading dunehd from kde18d244b13b3ea9895b2713fd0e4bea-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Loading Documentos from kb06bb883f655fd9310a7a8c2308900ab-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Loading juan from k7456e6c5d67267b23fd2694ccb4ee267-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Loading juan from k3fe5f2c026937739b2c06fa9dfe33dbd-v5.pickle.gz
D [kupfer.plugin.templates]: /home/juan/Plantillas
D [kupfer.core.sources] PeriodicRescanner: Registering new campaign, in 10 s
D [kupfer.obj.sources] SourcesSource: Loaded items
D [kupfer.plugin.favorites] FavoritesSource: Loaded items
D [kupfer.plugin.volumes] VolumesSource: Loaded items
D [kupfer.core.learn]: Reading from /home/juan/.config/kupfer/mnemonics.pickle
D [kupfer.scheduler] Scheduler: Loaded
D [kupfer.scheduler] Scheduler: Display
D [kupfer.core.data] DataController: Reloading source root
D [kupfer.ui.browser]: Scale factor 1

(kupfer.py:8450): Gdk-CRITICAL **: gdk_window_get_effective_toplevel: assertion 'GDK_IS_WINDOW (window)' failed

(kupfer.py:8450): Gdk-WARNING **: Couldn't map as window 0x1d3a320 as popup because it doesn't have a parent
D [kupfer.scheduler] Scheduler: After Display
D [kupfer.ui.browser] WindowController: in lazy_setup
Kupfer: Un lanzador de aplicaciones libre (GPLv3+)
   Copyright © 2007–2017 Ulrik Sverdrup with others
   https://kupferlauncher.github.io/

[kupfer.ui.browser] WindowController: Trying to register <Ctrl>space to spawn kupfer.. failed
D [kupfer.ui.session] SessionClient: Connected to session as client /org/gnome/SessionManager/Client33 
D [kupfer.ui.browser] Interface: Finished lazy_setup
D [kupfer.ui.browser] WindowController: finished lazy_setup
/usr/share/kupfer/kupfer/ui/browser.py:2698: Warning: g_value_get_int: assertion 'G_VALUE_HOLDS_INT (value)' failed
  Gtk.main()

(kupfer.py:8450): Wnck-WARNING **: libwnck is designed to work in X11 only, no valid display found
D [kupfer.launch] ApplicationsMatcherService: Reading from /home/juan/.cache/kupfer/application_identification_v2.pickle
D [kupfer.launch] ApplicationsMatcherService: Learned the following applications
D [kupfer.launch] ApplicationsMatcherService: 
{
  evince                         : Document Viewer
  file-roller                    : File Roller
  gnome-keyring-manager          : Keyring Manager
  nautilus-browser               : File Manager
  rhythmbox                      : Rhythmbox Music Player
  org.gnome.Nautilus             : nautilus
  mkvtoolnix-gui                 : MKVToolNix GUI v9.8.0 ('Kuglblids') 64bit
  griffith                       : griffith
  simplescreenrecorder           : SimpleScreenRecorder
  google-chrome                  : Google Chrome
  sublime_text_3                 : Sublime Text
  gnome-tweak-tool               : Herramienta de retoques de GNOME
  org.gnome.gedit                : gedit
  gnote                          : gnote
  simple-scan                    : simple-scan
  nact                           : Nautilus-Actions Configuration Tool
  ca.desrt.dconf-editor          : Editor de dconf
  jdownloader                    : JDownloader 2
  Data Crow-1488024168802        : terminix
  menulibre                      : menulibre
  org.gnome.DiskUtility          : gnome-disks
  org.gnome.Documents            : Documentos
  astroid                        : astroid
  emacs                          : emacs
  typora                         : Typora
  yad-icon-browser               : yad-icon-browser
  firefox                        : Firefox
}
D [kupfer.core.data]: ranked in 0.009358 s

(kupfer.py:8450): Wnck-WARNING **: libwnck is designed to work in X11 only, no valid display found
D [kupfer.core.data]: ranked in 0.002066 s

(kupfer.py:8450): Wnck-WARNING **: libwnck is designed to work in X11 only, no valid display found
D [kupfer.core.data]: ranked in 0.000543 s
D [kupfer.core.data]: ranked in 0.000389 s
D [kupfer.core.commandexec] ActionExecutionContext: <builtin.AppLeaf gftp> <builtin.Launch> None <GUIEnvironmentContext time=5217581 screen=<__gi__.GdkWaylandScreen object at 0x7f911fad4f30 (GdkWaylandScreen at 0x1d388b0)>>

(kupfer.py:8450): Wnck-WARNING **: libwnck is designed to work in X11 only, no valid display found
D [kupfer.desktop_launch]: Launched [b'gftp'] None pid: 8457

(gftp-gtk:8457): Gtk-WARNING **: cannot open display: wayland-0

(kupfer.py:8450): Wnck-WARNING **: libwnck is designed to work in X11 only, no valid display found

(kupfer.py:8450): Wnck-WARNING **: libwnck is designed to work in X11 only, no valid display found
^C[kupfer.ui.browser] WindowController: Caught signal 2 exiting..
[kupfer.core.sources] PeriodicRescanner: Starting new campaign, interval 3 s

(kupfer.py:8450): Wnck-WARNING **: libwnck is designed to work in X11 only, no valid display found
[kupfer.core.data] DataController: Saving data...
D [kupfer.core.learn]: Saving to /home/juan/.config/kupfer/mnemonics.pickle
D [kupfer.core.sources] SourceDataPickler: Storing configuration for Favoritos as config-kupfer.plugin.favorites-v2.pickle
[kupfer.core.data] DataController: Saving cache...
D [kupfer.core.sources] SourcePickler: Storing dunehd as kde18d244b13b3ea9895b2713fd0e4bea-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Notas as k32b58b482ef82f7d3468d417a314b6c7-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing juan as k3fe5f2c026937739b2c06fa9dfe33dbd-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Elementos recientes as kcd126db585869371afc4ba3eb2b41488-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Documentos as kb06bb883f655fd9310a7a8c2308900ab-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Lugares as k1f0af4f3ea12f6293832abbde9f17a49-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Aplicaciones as kb9665413a9742a6ec77cc473359a2157-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Plantillas de documentos as k254e7a970db87e8d2d8c9808fd7c23b4-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing Marcadores de Firefox as kf234b126a79622d2753d88bf3d90a9fb-v5.pickle.gz
D [kupfer.core.sources] SourcePickler: Storing juan as k7456e6c5d67267b23fd2694ccb4ee267-v5.pickle.gz
D [kupfer.launch] ApplicationsMatcherService: Saving to /home/juan/.cache/kupfer/application_identification_v2.pickle
D [kupfer.ui.browser] Interface: Finished save_config

[Feature Request] Access to Evolution-DataServer (contacts, calendars) through GObject

Evolution Data Server can be accessed with Python using gobject introspection. On Ubuntu they the libraries are gir1.x-ebookcontacts-1.x, gir1.x-ebook-1.x. So it is possible to search contact names and open it with respective application. i.e gnome-contacts or evolution (both uses eds as backend). Old kupfer had a evolution plugin which could do the same.

Thanks.

Pressing down on a manually-selected catalog won't display the item list

This one is a bit hard to explain, so I'll list the steps to reproduce this issue, instead:

  1. Open Kupfer's main view (no text selected, default "blank slate" view)
  2. Press the down key to list available catalogs
  3. Press right to select the topmost "Applications" catalog
  4. Press down to navigate the catalog. The list of entries won't show unless I press tab once (or twice, depending on the actions) to focus on it again.

I think that in this case the list should open when pressing down. This seems to be a legacy issue that I can reproduce in both 2xx and 308.1.

Fix deprecations

How to solve:

  • Run /usr/bin/python3 -Wd kupfer.py from the source directory to enable deprecation warnings
  • Look in GTK docs for reason for deprecation and find a replacement
  • Fix things one by one

text/uri-list from clipboard become default select

When marking files in a file manager for copying (Ctrl-C), it creates multi-part mime type (text/uri-list and text/plain). It would be great if there were an option that any files in text/uri-list would become the default selection when launching kupfer.

The use of it is to mark a couple of files for copying and then pipe them into an action in kupfer. Tke a look here at 1:05 https://www.youtube.com/watch?v=xfJHYX7venM

Steps:

  1. open thunar
  2. select a file
  3. press Ctrl-C
  4. launch kupfer

Environment

Kupfer Version: kupfer v311-4-gd8a469d4
Window Manager: i3
Desktop Environment: none
Linux Distribution: archlinux

Actual Behaviour

kupfer launched as normal

Expected Behaviour

kupfer launched with the files select and the focus is on the action box.

AttributeError: 'gi.repository.Gdk' object has no attribute 'display_get_default'

Hey,

I'm the maintainer of the kupfer package on AUR. I've updated the package to v300, but when I start kupfer, I get the following error on the console. Kupfer itself is displayed and seems to work fine, but the stack trace says "please file a bug report", so here it is.

Error [kupfer.core.pluginload]: Loading multihead raised an exception:
Traceback (most recent call last):
  File "/usr/share/kupfer/kupfer/core/pluginload.py", line 60, in exception_guard
    yield
  File "/usr/share/kupfer/kupfer/core/data.py", line 577, in _load_plugin
    plugin = pluginload.load_plugin(plugin_id)
  File "/usr/share/kupfer/kupfer/core/pluginload.py", line 31, in load_plugin
    initialize_plugin(item)
  File "/usr/share/kupfer/kupfer/core/plugins.py", line 374, in initialize_plugin
    initialize(plugin_name)
  File "/usr/share/kupfer/kupfer/plugin/multihead.py", line 23, in initialize_plugin
    display = gtk.gdk.display_get_default()
  File "/usr/lib/python3.6/site-packages/gi/overrides/__init__.py", line 39, in __getattr__
    return getattr(self._introspection_module, name)
  File "/usr/lib/python3.6/site-packages/gi/module.py", line 139, in __getattr__
    self.__name__, name))
AttributeError: 'gi.repository.Gdk' object has no attribute 'display_get_default'
Error [kupfer.core.pluginload]: This error is probably a bug in multihead
Error [kupfer.core.pluginload]: Please file a bug report
Kupfer: A free software (GPLv3+) launcher
   Copyright © 2007–2017 Ulrik Sverdrup with others
   https://kupferlauncher.github.io/


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.