Round 302: COPR ext, DNF ext, Zypper ext, Emerge ext, Portage ext (20 commands)

ober

776a7bc58b5ba869b35813c716ced77bdda92a35

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 707fbab..43bb38b 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 302 — COPR ext, DNF ext, Zypper ext, Emerge ext, Portage ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| copr-enable | :orange_circle: | Enable COPR repo |
+| copr-disable | :orange_circle: | Disable COPR repo |
+| copr-list | :orange_circle: | List COPR repos |
+| copr-search | :orange_circle: | Search COPR |
+| dnf-install | :orange_circle: | Install DNF package |
+| dnf-remove | :orange_circle: | Remove DNF package |
+| dnf-update | :orange_circle: | Update all packages |
+| dnf-search | :orange_circle: | Search DNF packages |
+| zypper-install | :orange_circle: | Install zypper package |
+| zypper-remove | :orange_circle: | Remove zypper package |
+| zypper-search | :orange_circle: | Search zypper packages |
+| zypper-info | :orange_circle: | Show zypper info |
+| emerge-install | :orange_circle: | Install emerge package |
+| emerge-remove | :orange_circle: | Remove emerge package |
+| emerge-search | :orange_circle: | Search emerge packages |
+| emerge-info | :orange_circle: | Show emerge info |
+| portage-sync | :orange_circle: | Sync portage tree |
+| portage-world | :orange_circle: | Update world set |
+| portage-depclean | :orange_circle: | Clean dependencies |
+| portage-info | :orange_circle: | Show portage info |
+
 ### Round 301 — Snap ext, Flatpak ext, AppImage ext, Nix ext, Brew ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index bd56094..90ba48d 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -23031,4 +23031,58 @@
   (let* ((echo (app-state-echo app)))
     (echo-read-string echo "Formula: "
       (lambda (formula)
-        (echo-message! echo (str "Brew: info for " formula))))))
\ No newline at end of file
+        (echo-message! echo (str "Brew: info for " formula))))))
+
+;;; Round 302 — Zypper ext, Emerge ext, Portage ext (batch 2)
+
+(def (cmd-zypper-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Query: "
+      (lambda (q)
+        (echo-message! echo (str "Zypper: searching " q))))))
+
+(def (cmd-zypper-info app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Package: "
+      (lambda (pkg)
+        (echo-message! echo (str "Zypper: info for " pkg))))))
+
+(def (cmd-emerge-install app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Package: "
+      (lambda (pkg)
+        (echo-message! echo (str "Emerge: installing " pkg))))))
+
+(def (cmd-emerge-remove app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Package: "
+      (lambda (pkg)
+        (echo-message! echo (str "Emerge: removing " pkg))))))
+
+(def (cmd-emerge-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Query: "
+      (lambda (q)
+        (echo-message! echo (str "Emerge: searching " q))))))
+
+(def (cmd-emerge-info app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Package: "
+      (lambda (pkg)
+        (echo-message! echo (str "Emerge: info for " pkg))))))
+
+(def (cmd-portage-sync app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Portage: syncing tree")))
+
+(def (cmd-portage-world app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Portage: updating world")))
+
+(def (cmd-portage-depclean app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Portage: cleaning dependencies")))
+
+(def (cmd-portage-info app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Portage: showing system info")))
\ No newline at end of file
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 265f039..e917da8 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -23752,3 +23752,61 @@
       (lambda (file)
         (echo-message! echo (str "AppImage: extracting " file))))))
 
+;;; Round 302 — COPR ext, DNF ext, Zypper ext (batch 1)
+
+(def (cmd-copr-enable app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "COPR repo: "
+      (lambda (repo)
+        (echo-message! echo (str "COPR: enabling " repo))))))
+
+(def (cmd-copr-disable app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "COPR repo: "
+      (lambda (repo)
+        (echo-message! echo (str "COPR: disabling " repo))))))
+
+(def (cmd-copr-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "COPR: listing enabled repos")))
+
+(def (cmd-copr-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Query: "
+      (lambda (q)
+        (echo-message! echo (str "COPR: searching " q))))))
+
+(def (cmd-dnf-install app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Package: "
+      (lambda (pkg)
+        (echo-message! echo (str "DNF: installing " pkg))))))
+
+(def (cmd-dnf-remove app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Package: "
+      (lambda (pkg)
+        (echo-message! echo (str "DNF: removing " pkg))))))
+
+(def (cmd-dnf-update app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "DNF: updating all packages")))
+
+(def (cmd-dnf-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Query: "
+      (lambda (q)
+        (echo-message! echo (str "DNF: searching " q))))))
+
+(def (cmd-zypper-install app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Package: "
+      (lambda (pkg)
+        (echo-message! echo (str "Zypper: installing " pkg))))))
+
+(def (cmd-zypper-remove app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Package: "
+      (lambda (pkg)
+        (echo-message! echo (str "Zypper: removing " pkg))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 57f84a7..e4cef60 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -7759,4 +7759,25 @@
   (register-command! 'brew-install cmd-brew-install)
   (register-command! 'brew-remove cmd-brew-remove)
   (register-command! 'brew-info cmd-brew-info)
+  ;; Round 302
+  (register-command! 'copr-enable cmd-copr-enable)
+  (register-command! 'copr-disable cmd-copr-disable)
+  (register-command! 'copr-list cmd-copr-list)
+  (register-command! 'copr-search cmd-copr-search)
+  (register-command! 'dnf-install cmd-dnf-install)
+  (register-command! 'dnf-remove cmd-dnf-remove)
+  (register-command! 'dnf-update cmd-dnf-update)
+  (register-command! 'dnf-search cmd-dnf-search)
+  (register-command! 'zypper-install cmd-zypper-install)
+  (register-command! 'zypper-remove cmd-zypper-remove)
+  (register-command! 'zypper-search cmd-zypper-search)
+  (register-command! 'zypper-info cmd-zypper-info)
+  (register-command! 'emerge-install cmd-emerge-install)
+  (register-command! 'emerge-remove cmd-emerge-remove)
+  (register-command! 'emerge-search cmd-emerge-search)
+  (register-command! 'emerge-info cmd-emerge-info)
+  (register-command! 'portage-sync cmd-portage-sync)
+  (register-command! 'portage-world cmd-portage-world)
+  (register-command! 'portage-depclean cmd-portage-depclean)
+  (register-command! 'portage-info cmd-portage-info)
 )