Round 318: Cgroups ext, Cgroupfs ext, Systemd-cgtop ext, Systemd-run ext, Nsenter ext (20 commands)

ober

384d04849ba6466cd91410f510e21f63fe379054

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 1d42ecc..f119f2e 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 318 — Cgroups ext, Cgroupfs ext, Systemd-cgtop ext, Systemd-run ext, Nsenter ext
+
+| Feature | Status | Notes |
+|---------|--------|-------|
+| `cgroup-delete` | :orange_circle: | Delete cgroup |
+| `cgroup-freeze` | :orange_circle: | Freeze cgroup |
+| `cgroup-thaw` | :orange_circle: | Thaw cgroup |
+| `cgroup-stat` | :orange_circle: | Show cgroup stats |
+| `cgroupfs-mount` | :orange_circle: | Mount cgroup filesystem |
+| `cgroupfs-umount` | :orange_circle: | Unmount cgroup filesystem |
+| `cgroupfs-list` | :orange_circle: | List cgroup controllers |
+| `cgroupfs-info` | :orange_circle: | Show controller info |
+| `systemd-cgtop-show` | :orange_circle: | Show control group top |
+| `systemd-cgtop-depth` | :orange_circle: | Set cgtop depth |
+| `systemd-cgtop-sort` | :orange_circle: | Sort cgtop output |
+| `systemd-cgtop-batch` | :orange_circle: | Cgtop batch mode |
+| `systemd-run-transient` | :orange_circle: | Run transient unit |
+| `systemd-run-scope` | :orange_circle: | Run in scope |
+| `systemd-run-slice` | :orange_circle: | Run in slice |
+| `systemd-run-shell` | :orange_circle: | Launch shell in unit |
+| `nsenter-pid` | :orange_circle: | Enter PID namespace |
+| `nsenter-mount` | :orange_circle: | Enter mount namespace |
+| `nsenter-net` | :orange_circle: | Enter network namespace |
+| `nsenter-user` | :orange_circle: | Enter user namespace |
+
 ### Round 317 — Ipmitool ext, Lm-sensors ext, Turbostat ext, Cpupower ext, Numactl ext
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index b1b412d..47cba98 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -23879,4 +23879,62 @@
   (let* ((echo (app-state-echo app)))
     (echo-read-string echo "Nodes: "
       (lambda (nodes)
-        (echo-message! echo (str "Numactl: interleaving across " nodes))))))
\ No newline at end of file
+        (echo-message! echo (str "Numactl: interleaving across " nodes))))))
+
+;;; Round 318 — Systemd-cgtop ext, Systemd-run ext, Nsenter ext (batch 2)
+
+(def (cmd-systemd-cgtop-sort app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Sort by (cpu/memory/io): "
+      (lambda (key)
+        (echo-message! echo (str "Systemd-cgtop: sorting by " key))))))
+
+(def (cmd-systemd-cgtop-batch app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Systemd-cgtop: batch mode output")))
+
+(def (cmd-systemd-run-transient app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Systemd-run: transient unit for " cmd))))))
+
+(def (cmd-systemd-run-scope app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Command: "
+      (lambda (cmd)
+        (echo-message! echo (str "Systemd-run: scope for " cmd))))))
+
+(def (cmd-systemd-run-slice app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Slice name: "
+      (lambda (slice)
+        (echo-message! echo (str "Systemd-run: in slice " slice))))))
+
+(def (cmd-systemd-run-shell app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Systemd-run: launching shell in transient unit")))
+
+(def (cmd-nsenter-pid app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PID: "
+      (lambda (pid)
+        (echo-message! echo (str "Nsenter: entering PID namespace of " pid))))))
+
+(def (cmd-nsenter-mount app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PID: "
+      (lambda (pid)
+        (echo-message! echo (str "Nsenter: entering mount namespace of " pid))))))
+
+(def (cmd-nsenter-net app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PID: "
+      (lambda (pid)
+        (echo-message! echo (str "Nsenter: entering net namespace of " pid))))))
+
+(def (cmd-nsenter-user app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PID: "
+      (lambda (pid)
+        (echo-message! echo (str "Nsenter: entering user namespace of " pid))))))
\ 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 c4db0e8..10ad40f 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -24584,3 +24584,57 @@
       (lambda (sec)
         (echo-message! echo (str "Turbostat: monitoring every " sec "s"))))))
 
+;;; Round 318 — Cgroups ext, Cgroupfs ext, Systemd-cgtop ext, Systemd-run ext, Nsenter ext (batch 1)
+
+(def (cmd-cgroup-delete app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cgroup path: "
+      (lambda (path)
+        (echo-message! echo (str "Cgroup: deleting " path))))))
+
+(def (cmd-cgroup-freeze app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cgroup to freeze: "
+      (lambda (cg)
+        (echo-message! echo (str "Cgroup: freezing " cg))))))
+
+(def (cmd-cgroup-thaw app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cgroup to thaw: "
+      (lambda (cg)
+        (echo-message! echo (str "Cgroup: thawing " cg))))))
+
+(def (cmd-cgroup-stat app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cgroup path: "
+      (lambda (cg)
+        (echo-message! echo (str "Cgroup: showing stats for " cg))))))
+
+(def (cmd-cgroupfs-mount app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Cgroupfs: mounting cgroup filesystem")))
+
+(def (cmd-cgroupfs-umount app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Cgroupfs: unmounting cgroup filesystem")))
+
+(def (cmd-cgroupfs-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Cgroupfs: listing controllers")))
+
+(def (cmd-cgroupfs-info app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Controller: "
+      (lambda (ctrl)
+        (echo-message! echo (str "Cgroupfs: showing info for " ctrl))))))
+
+(def (cmd-systemd-cgtop-show app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Systemd-cgtop: showing control group top")))
+
+(def (cmd-systemd-cgtop-depth app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Depth: "
+      (lambda (d)
+        (echo-message! echo (str "Systemd-cgtop: depth " d))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index a960d80..e7827d3 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -8095,4 +8095,25 @@
   (register-command! 'numactl-hardware cmd-numactl-hardware)
   (register-command! 'numactl-bind cmd-numactl-bind)
   (register-command! 'numactl-interleave cmd-numactl-interleave)
+  ;; Round 318
+  (register-command! 'cgroup-delete cmd-cgroup-delete)
+  (register-command! 'cgroup-freeze cmd-cgroup-freeze)
+  (register-command! 'cgroup-thaw cmd-cgroup-thaw)
+  (register-command! 'cgroup-stat cmd-cgroup-stat)
+  (register-command! 'cgroupfs-mount cmd-cgroupfs-mount)
+  (register-command! 'cgroupfs-umount cmd-cgroupfs-umount)
+  (register-command! 'cgroupfs-list cmd-cgroupfs-list)
+  (register-command! 'cgroupfs-info cmd-cgroupfs-info)
+  (register-command! 'systemd-cgtop-show cmd-systemd-cgtop-show)
+  (register-command! 'systemd-cgtop-depth cmd-systemd-cgtop-depth)
+  (register-command! 'systemd-cgtop-sort cmd-systemd-cgtop-sort)
+  (register-command! 'systemd-cgtop-batch cmd-systemd-cgtop-batch)
+  (register-command! 'systemd-run-transient cmd-systemd-run-transient)
+  (register-command! 'systemd-run-scope cmd-systemd-run-scope)
+  (register-command! 'systemd-run-slice cmd-systemd-run-slice)
+  (register-command! 'systemd-run-shell cmd-systemd-run-shell)
+  (register-command! 'nsenter-pid cmd-nsenter-pid)
+  (register-command! 'nsenter-mount cmd-nsenter-mount)
+  (register-command! 'nsenter-net cmd-nsenter-net)
+  (register-command! 'nsenter-user cmd-nsenter-user)
 )