[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/sweeprolog 6d8659a1ff 03/12: ADDED: sweep Top-level Menu f
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/sweeprolog 6d8659a1ff 03/12: ADDED: sweep Top-level Menu for listing Prolog top-levels |
Date: |
Thu, 6 Oct 2022 02:59:33 -0400 (EDT) |
branch: elpa/sweeprolog
commit 6d8659a1ff85a10d15cf0411131080706fb019f1
Author: Eshel Yaron <me@eshelyaron.com>
Commit: Eshel Yaron <me@eshelyaron.com>
ADDED: sweep Top-level Menu for listing Prolog top-levels
* sweep.pl
- sweep_top_level_threads/2: new predicate for querying
currently active Prolog top-level threads
* sweeprolog.el
- sweeprolog-top-level-menu--entries: new function, exposing
sweep_top_level_threads/2 to Elisp.
- sweeprolog-top-level-menu-mode: new major mode derived from
tabulated-list-mode
- sweeprolog-top-level-menu-go-to: new command, switches to the
top-level buffer of the Top-level Menu entry at point
- sweeprolog-top-level-menu-kill: new command, kills the top-level
buffer of the Top-level Menu entry at point
- sweeprolog-top-level-menu-new: new command, creates a new top-level
from the Top-level Menu
- sweeprolog-list-top-levels: new command, opens the Top-level Menu
---
sweep.pl | 10 ++++++++
sweeprolog.el | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 89 insertions(+)
diff --git a/sweep.pl b/sweep.pl
index 763bdd003b..b119f9c5ae 100644
--- a/sweep.pl
+++ b/sweep.pl
@@ -57,6 +57,7 @@
sweep_imenu_index/2,
sweep_module_path/2,
sweep_top_level_server/2,
+ sweep_top_level_threads/2,
sweep_accept_top_level_client/2,
write_sweep_module_location/0
]).
@@ -99,6 +100,15 @@ prolog:xref_open_source(Source, Stream) :-
prolog:xref_close_source(Source, Stream) :-
sweep_open(Source, Stream).
+sweep_top_level_threads(_, Ts) :-
+ findall([Id, Buffer, Status, Stack, CPUTime],
+ ( sweep_top_level_thread_buffer(Id, Buffer),
+ thread_property(Id, status(Status0)),
+ term_string(Status0, Status),
+ thread_statistics(Id, stack, Stack),
+ thread_statistics(Id, cputime, CPUTime)
+ ),
+ Ts).
sweep_current_prolog_flags(Sub, Flags) :-
findall([Flag|Value],
diff --git a/sweeprolog.el b/sweeprolog.el
index 993fd097cc..f9308c8630 100644
--- a/sweeprolog.el
+++ b/sweeprolog.el
@@ -2480,6 +2480,85 @@ variable at point, if any."
str
"\n\n*/\n\n"))
+(defun sweeprolog-top-level-menu--entries ()
+ (sweeprolog-open-query "user"
+ "sweep"
+ "sweep_top_level_threads"
+ nil)
+ (let ((sol (sweeprolog-next-solution)))
+ (sweeprolog-close-query)
+ (when (sweeprolog-true-p sol)
+ (mapcar (lambda (th)
+ (let ((id (nth 0 th))
+ (bn (nth 1 th))
+ (st (nth 2 th))
+ (sz (number-to-string (nth 3 th)))
+ (ct (number-to-string (nth 4 th))))
+ (list id (vector bn st sz ct))))
+ (cdr sol)))))
+
+(defun sweeprolog-top-level-menu--refresh ()
+ (tabulated-list-init-header)
+ (setq tabulated-list-entries (sweeprolog-top-level-menu--entries)))
+
+(defun sweeprolog-top-level-menu-new (name)
+ "Create and switch to a new Prolog top-level buffer named NAME."
+ (interactive (list
+ (read-string
+ "New top-level buffer name: "
+ nil nil
+ (generate-new-buffer-name "*sweeprolog-top-level*")))
+ sweeprolog-top-level-menu-mode)
+ (sweeprolog-top-level name))
+
+(defun sweeprolog-top-level-menu-kill ()
+ "Kill the buffer of to the `sweep' Top-level Menu entry at point."
+ (interactive "" sweeprolog-top-level-menu-mode)
+ (if-let ((vec (tabulated-list-get-entry)))
+ (let ((bn (seq-elt vec 0)))
+ (kill-buffer bn))
+ (user-error "No top-level menu entry here")))
+
+(defun sweeprolog-top-level-menu-go-to ()
+ "Go to the buffer of to the `sweep' Top-level Menu entry at point."
+ (interactive "" sweeprolog-top-level-menu-mode)
+ (if-let ((vec (tabulated-list-get-entry)))
+ (let* ((bn (seq-elt vec 0))
+ (buf (get-buffer bn)))
+ (if (buffer-live-p buf)
+ (pop-to-buffer buf sweeprolog-top-level-display-action)
+ (message "Buffer %s is no longer availabe." bn)))
+ (user-error "No top-level menu entry here")))
+
+(defvar-keymap sweeprolog-top-level-menu-mode-map
+ :doc "Local keymap for `sweeprolog-top-level-menu-mode' buffers."
+ "RET" #'sweeprolog-top-level-menu-go-to
+ "k" #'sweeprolog-top-level-menu-kill
+ "t" #'sweeprolog-top-level-menu-new)
+
+(define-derived-mode sweeprolog-top-level-menu-mode
+ tabulated-list-mode "sweep Top-level Menu"
+ "Major mode for browsing a list of active `sweep' top-levels."
+ (setq tabulated-list-format [("Buffer" 32 t)
+ ("Status" 32 t)
+ ("Stacks Size" 20 t)
+ ("CPU Time" 20 t)])
+ (setq tabulated-list-padding 2)
+ (setq tabulated-list-sort-key (cons "Buffer" nil))
+ (add-hook 'tabulated-list-revert-hook
+ #'sweeprolog-top-level-menu--refresh nil t)
+ (tabulated-list-init-header))
+
+(defun sweeprolog-list-top-levels ()
+ "Display a list of Prolog top-level threads."
+ (interactive)
+ (let ((buf (get-buffer-create "*sweep Top-levels*")))
+ (with-current-buffer buf
+ (sweeprolog-top-level-menu-mode)
+ (sweeprolog-top-level-menu--refresh)
+ (tabulated-list-print))
+ (pop-to-buffer-same-window buf)))
+
(provide 'sweeprolog)
;;; sweeprolog.el ends here
- [nongnu] elpa/sweeprolog updated (c1eac3d1ac -> 47cec7fd85), ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog 5fda5e16bd 02/12: NEWS.org: announce sweeprolog-document-predicate-at-point, ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog 6d8659a1ff 03/12: ADDED: sweep Top-level Menu for listing Prolog top-levels,
ELPA Syncer <=
- [nongnu] elpa/sweeprolog 5913f010b6 07/12: ADDED: new command for signaling the current top-level, ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog 77846f0441 05/12: ADDED: new command for signaling Prolog top-level threads, ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog c0d8189056 06/12: FIXED: top-level buffer to thread synchronization, ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog e82fd5ce12 01/12: README.org: fix typos, ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog 9773817648 11/12: Announce recent changes in NEWS.org, bump version to 0.5.0, ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog 47cec7fd85 12/12: DOC: add manual sections "Contributing" and "Things to do", ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog f40dcff155 04/12: FIXED: reverse args modes in sweeprolog-document-predicate-at-point, ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog 51139ad178 08/12: ADDED: new command for signaling a top-level from the Top-level Menu, ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog 39bab049b1 10/12: DOC: describe the Top-level Menu and signaling in the manual, ELPA Syncer, 2022/10/06
- [nongnu] elpa/sweeprolog 4754971669 09/12: ADDED: key and menu bindings for sweeprolog-list-top-levels, ELPA Syncer, 2022/10/06