diff mbox series

[bug#53222] gnu: Add autokey.

Message ID Kubuvj_ZYaawCDW6qu7U-Z-q_Sj1s_8I8hNmJo1u-hkGHByPRsJ_y6joxVtJiJnezoX01VMS1538BIBPlkhDKYxnu0uwEA3nZzb_YRDbszE=@protonmail.com
State New
Headers show
Series [bug#53222] gnu: Add autokey. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

John Kehayias Jan. 12, 2022, 9:03 p.m. UTC
Hello,

Here is a patch for autokey, a python based program for things like keyboard shortcuts and text expansion. I find it invaluable for having emacs-like keys everywhere.

It includes both a gtk and qt frontend; after discussion on IRC I decided against trying to split them. Since it is one package and it is built together, it is a bit tricky I think to disentangle the code and paths needed for each. In my first attempts it didn't reduce the closure and needed a lot of manual work. Possibly it could work with more effort, but since this is used as a GUI tool primarily, the GTK/QT packages shouldn't be adding anything new.

John

Comments

Nicolas Goaziou Jan. 12, 2022, 9:22 p.m. UTC | #1
Hello,

John Kehayias via Guix-patches via <guix-patches@gnu.org> writes:

> Here is a patch for autokey, a python based program for things like
> keyboard shortcuts and text expansion. I find it invaluable for having
> emacs-like keys everywhere.

Applied. Thank you.

Regards,
Maxime Devos Jan. 12, 2022, 9:26 p.m. UTC | #2
Hi,

John Kehayias via Guix-patches via schreef op wo 12-01-2022 om 21:03
[+0000]:
> +      #:tests? #f ; Tests are deprecated/broken until next version.

How can a test be deprecated?
What tests are broken?
Are the tests broken, or do they fail because of a real issue?

> +                   (wrap-program program
> +                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-
> path))))

Do we need to include the GI_TYPELIB_PATH from the environment?
If not, I recommend '=' instead of 'prefix' to avoid potential trouble.

> +                 (map (lambda (name)
> +                        (string-append #$output "/bin/" name))
> +                      '("autokey-gtk"
> +                        "autokey-shell")))))))))
> +    (inputs
> +     (list bash-minimal ; for wrap-program
> +           gtksourceview-3
> +           libappindicator
> +           libnotify
> +           wmctrl
> +           zenity))
> +    (propagated-inputs
> +     (list python-dbus
> +           python-pygobject
> +           python-pyinotify
> +           python-pyqt+qscintilla

If you add "GUIX_PYTHONPATH"  to the wrap-program,
then probably the propagated inputs can be moved to the regular inputs
(since 'autokey' appeas to be used as a few binaries and not
as a python _library_).

Greetings,
Maxime.
John Kehayias Jan. 12, 2022, 9:55 p.m. UTC | #3
Hi Maxime and Nicolas,

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐

On Wednesday, January 12th, 2022 at 4:26 PM, Maxime Devos wrote:

> > +      #:tests? #f ; Tests are deprecated/broken until next version.
>
> How can a test be deprecated?
> What tests are broken?
> Are the tests broken, or do they fail because of a real issue?
>
Sort of both? They relied on python2 and had not been updated, so they didn't work (at all from what I see) and were therefore due for replacement in the new version (forthcoming).

See https://github.com/autokey/autokey/issues/327 where they say "The current tests are deprecated and won’t work." That's why I said it that way in the comment, sorry if that wasn't clear. The new version that seems due soon has a new test framework (tox).

> > +                   (wrap-program program
> > +                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-
> > path))))
>
> Do we need to include the GI_TYPELIB_PATH from the environment?
> If not, I recommend '=' instead of 'prefix' to avoid potential trouble.
>

I'm not sure, I was following the examples I saw. For whatever reason, nearly all of them do it that way (I think I only saw one or two as '=', in my quick look). Anyway, I think you are right that it shouldn't be needed, probably the same for a lot of other packages? I think it works with '=' instead, in my quick test.

>
> If you add "GUIX_PYTHONPATH"  to the wrap-program,
> then probably the propagated inputs can be moved to the regular inputs
> (since 'autokey' appeas to be used as a few binaries and not
> as a python library).
>

I'm confused on this as these are already wrapped with GUIX_PYTHONPATH (the bin outputs are python scripts) without adding it explicitly. Trying with the propagated-inputs being regular inputs seems to work fine too.

Although I haven't used it this way, there is also scripting with autokey. One of the included programs is autokey-shell which is a python shell of sorts. I'm not sure if that would make a difference and I don't have anything offhand to test with.

I can submit a patch to change the wrap and inputs if that would be cleaner.

Thanks!
John
Maxime Devos Jan. 13, 2022, 7:34 a.m. UTC | #4
John Kehayias schreef op wo 12-01-2022 om 21:55 [+0000]:
> Hi Maxime and Nicolas,
> 
> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> 
> On Wednesday, January 12th, 2022 at 4:26 PM, Maxime Devos wrote:
> 
> > > +      #:tests? #f ; Tests are deprecated/broken until next version.
> > 
> > How can a test be deprecated?
> > What tests are broken?
> > Are the tests broken, or do they fail because of a real issue?
> > 
> Sort of both? They relied on python2 and had not been updated, so they didn't work (at all from what I see) and were therefore due for replacement in the new version (forthcoming).
> 
> See https://github.com/autokey/autokey/issues/327 where they say "The current tests are deprecated and won’t work." That's why I said it that way in the comment, sorry if that wasn't clear. The new version that seems due soon has a new test framework (tox).

Adding a link to <https://github.com/autokey/autokey/issues/327> in the
comment should be sufficient:

  ;; Tests are deprecated and broken until the next version, see
  ;; <https://github.com/autokey/autokey/issues/327>.
  #:tests? #false

> > > +                   (wrap-program program
> > > +                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-
> > > path))))
> > 
> > Do we need to include the GI_TYPELIB_PATH from the environment?
> > If not, I recommend '=' instead of 'prefix' to avoid potential trouble.
> > 
> 
> I'm not sure, I was following the examples I saw. For whatever reason, nearly all of them do it that way (I think I only saw one or two as '=', in my quick look). Anyway, I think you are right that it shouldn't be needed, probably the same for a lot of other packages? I think it works with '=' instead, in my quick test.

I think it isn't needed, but because it allows scripting in python
(and hence can benefit from any python libraries in the environment,
possibly including python libraries using GI_TYPELIB_PATH) ...

> > 
> > If you add "GUIX_PYTHONPATH"  to the wrap-program,
> > then probably the propagated inputs can be moved to the regular inputs
> > (since 'autokey' appeas to be used as a few binaries and not
> > as a python library).
> > 
> 
> I'm confused on this as these are already wrapped with GUIX_PYTHONPATH (the bin outputs are python scripts) without adding it explicitly. Trying with the propagated-inputs being regular inputs seems to work fine too.

(seems like this is done implicitely by 'wrap' in (guix build python-
build-system))

> Although I haven't used it this way, there is also scripting with autokey. One of the included programs is autokey-shell which is a python shell of sorts. I'm not sure if that would make a difference and I don't have anything offhand to test with.

it would be nice if the user could install additional python libraries
to use from their scripts, so I think 'prefix' would be better here.
(If I'm not mistaken about Python's loading order, locations early in
GUIX_PYTHONPATH have priority above later entries, so there shouldn't
be any problems unless autokey has undeclared dependencies).

> I can submit a patch to change the wrap and inputs if that would be cleaner.

* Maybe you make the GUIX_PYTHONPATH wrapping explicit (e.g. by
  removing the wrap phase, or moving the 'wrap-autokey' phase before
  the 'wrap', or letting it replace the 'wrap' phase), adding a comment

  ;; Use 'prefix' instead of '=' to allow the user to use additional
  ;; Python libraries from their autokey scripts.
* or maybe don't do that, but still add a similar comment to the 'wrap'
  phase.
* Could you make the comment next to #:tests? a bit more explicit?

Greetings,
Maxime.
diff mbox series

Patch

From 419a8587d6101b8ac48922ff06d75ecd405e16e9 Mon Sep 17 00:00:00 2001
From: John Kehayias <john.kehayias@protonmail.com>
Date: Wed, 12 Jan 2022 15:51:17 -0500
Subject: [PATCH] gnu: Add autokey.

* gnu/packages/python-xyz.scm (autokey): New variable.
---
 gnu/packages/python-xyz.scm | 62 +++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 4df794eb60..b85232f2b7 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -114,6 +114,7 @@ 
 ;;; Copyright © 2021 ZmnSCPxj <ZmnSCPxj@protonmail.com>
 ;;; Copyright © 2021 Filip Lajszczak <filip@lajszczak.dev>
 ;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -4180,6 +4181,67 @@  (define-public python-anytree
 structure for Python.")
     (license license:asl2.0)))
 
+(define-public autokey
+  (package
+    (name "autokey")
+    (version "0.95.10")
+    (source (origin
+             (method git-fetch)
+             (uri (git-reference
+                   (url "https://github.com/autokey/autokey")
+                   (commit (string-append "v" version))))
+             (file-name (git-file-name name version))
+             (sha256
+              (base32
+               "0f0cqfnb49wwdy7zl2f2ypcnd5pc8r8n7z7ssxkq20d4xfxlgamr"))))
+    (build-system python-build-system)
+    (arguments
+     (list
+      #:tests? #f ; Tests are deprecated/broken until next version.
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'fix-paths
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "lib/autokey/scripting.py"
+                (("\"wmctrl\"")
+                 (string-append "\"" (search-input-file inputs "bin/wmctrl") "\""))
+                (("\"zenity\"")
+                 (string-append "\"" (search-input-file inputs "bin/zenity") "\"")))))
+          (add-after 'install 'wrap-autokey
+            (lambda _
+              (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH")))
+                (for-each
+                 (lambda (program)
+                   (wrap-program program
+                     `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))
+                 (map (lambda (name)
+                        (string-append #$output "/bin/" name))
+                      '("autokey-gtk"
+                        "autokey-shell")))))))))
+    (inputs
+     (list bash-minimal ; for wrap-program
+           gtksourceview-3
+           libappindicator
+           libnotify
+           wmctrl
+           zenity))
+    (propagated-inputs
+     (list python-dbus
+           python-pygobject
+           python-pyinotify
+           python-pyqt+qscintilla
+           python-xlib))
+    (home-page "https://github.com/autokey/autokey")
+    (synopsis
+      "Keyboard and GUI automation utility")
+    (description
+      "AutoKey is a desktop automation utility for X11.  It allows the automation of
+virtually any task by responding to typed abbreviations and hotkeys.  It
+offers a full-featured GUI (GTK and QT versions) that makes it highly
+accessible for novices, as well as a scripting interface offering the full
+flexibility and power of the Python language.")
+    (license license:gpl3+)))
+
 (define-public python-docutils
   (package
     (name "python-docutils")
-- 
2.34.0