[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/sesman cdb8e0973a 018/100: Port back from CIDER
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/sesman cdb8e0973a 018/100: Port back from CIDER |
Date: |
Tue, 28 Dec 2021 14:05:59 -0500 (EST) |
branch: elpa/sesman
commit cdb8e0973ac80b8924ca94e43ee39cdac59a1ac1
Author: Vitalie Spinu <spinuvit@gmail.com>
Commit: Vitalie Spinu <spinuvit@gmail.com>
Port back from CIDER
---
sesman.el | 76 ++++++++++++++++++++++++++++++++++++++++-----------------------
1 file changed, 48 insertions(+), 28 deletions(-)
diff --git a/sesman.el b/sesman.el
index 925236a0de..852db93938 100644
--- a/sesman.el
+++ b/sesman.el
@@ -32,13 +32,14 @@
;;; Commentary:
;;
;; Sesman provides facilities for session management and interactive session
-;; association with the current contexts (project, directory, buffers etc). See
+;; association with the current contexts (project, directory, buffers etc).
See
;; project's readme for more details.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Code:
+(require 'cl-generic)
(require 'project)
(require 'seq)
(require 'subr-x)
@@ -50,9 +51,9 @@
(defcustom sesman-disambiguate-by-relevance t
"If t choose most relevant session in ambiguous situations, otherwise ask.
-Ambiguity arises when multiple sessions are associated with current context. By
-default only projects could be associated with multiple sessions. See
-`sesman-single-link-contexts' in order to change that. Relevance is decided by
+Ambiguity arises when multiple sessions are associated with current context.
By
+default only projects could be associated with multiple sessions. See
+`sesman-single-link-contexts' in order to change that. Relevance is decided by
system's implementation, see `sesman-more-relevant-p'."
:group 'sesman
:type 'boolean)
@@ -108,14 +109,16 @@ Can be either a symbol, or a function returning a
symbol.")
(defun sesman--link-session (system session &optional cxt-type)
(let* ((ses-name (or (car-safe session)
(error "SESSION must be a headed list")))
- (cxt-val (or (if cxt-type
- (sesman-context cxt-type)
- (seq-some (lambda (ctype)
- (let ((val (sesman-context ctype)))
- (setq cxt-type ctype)
- val))
- (reverse (sesman-context-types system))))
- (user-error "No local context of type %s" cxt-type)))
+ (cxt-val (sesman--expand-path-maybe
+ (or (if cxt-type
+ (sesman-context cxt-type)
+ ;; use the lest specific context-type available
+ (seq-some (lambda (ctype)
+ (let ((val (sesman-context ctype)))
+ (setq cxt-type ctype)
+ val))
+ (reverse (sesman-context-types system))))
+ (user-error "No local context of type %s" cxt-type))))
(key (cons system ses-name))
(link (list key cxt-type cxt-val)))
(if (member cxt-type sesman-single-link-context-types)
@@ -146,6 +149,13 @@ Can be either a symbol, or a function returning a symbol.")
,(capitalize (symbol-name cxt-type))
system))))))
+(defun sesman--expand-path-maybe (obj)
+ (cond
+ ((stringp obj) (expand-file-name obj))
+ ((and (consp obj) (stringp (cdr obj)))
+ (cons (car obj) (expand-file-name (cdr obj))))
+ (t obj)))
+
;; FIXME: incorporate `sesman-abbreviate-paths'
(defun sesman--abbrev-path-maybe (obj)
(cond
@@ -181,7 +191,10 @@ Can be either a symbol, or a function returning a symbol.")
(lambda (el)
(and (or (null system) (eq (caar el) system))
(or (null ses-name) (equal (cdar el) ses-name))
- (or (null cxt-type) (eq (nth 1 el) cxt-type))
+ (or (null cxt-type)
+ (if (listp cxt-type)
+ (member (nth 1 el) cxt-type)
+ (eq (nth 1 el) cxt-type)))
(or (null cxt-val) (equal (nth 2 el) cxt-val))))))
(defun sesman--unlink (x)
@@ -304,7 +317,7 @@ sessions."
"Display links active in the current context."
(interactive)
(let* ((system (sesman--system))
- (links (sesman-links system)))
+ (links (sesman-current-links system)))
(if links
(message (mapconcat #'sesman--format-link links "\n"))
(message "No %s links in the current context" system))))
@@ -328,7 +341,7 @@ sessions."
"Break any of the previously created links."
(interactive)
(let* ((system (sesman--system))
- (links (or (sesman-links system)
+ (links (or (sesman-current-links system)
(user-error "No %s links found" system))))
(mapc #'sesman--unlink
(sesman--ask-for-link "Unlink: " links 'ask-all))))
@@ -495,7 +508,7 @@ list returned from `sesman-context-types'."
(sesman--clear-links)
(mapcar (lambda (assoc)
(gethash (car assoc) sesman-sessions-hashmap))
- (sesman-links system cxt-types))))
+ (sesman-current-links system cxt-types))))
(defun sesman-ensure-linked-session (system &optional prompt ask-new ask-all)
"Ensure that at least one SYSTEM session is linked to the current context.
@@ -509,7 +522,7 @@ nil, in which case ASK-NEW and ASK-ALL are passed directly
to
(cond
;; 0. No sessions; throw
((null sessions)
- (user-error "No linked %s sessions for current context" system))
+ (user-error "No linked %s sessions in current context" system))
;; 1. Single association, or auto-disambiguate; return first
((or sesman-disambiguate-by-relevance
(eq (length sessions) 1))
@@ -556,7 +569,12 @@ If AS-STRING is non-nil, return an equivalent string
representation."
" ")
out))))
-(defun sesman-links (system &optional cxt-types)
+(defun sesman-links (system &optional session-name cxt-types)
+ "Retrieve all links for SYSTEM, SESSION-NAME and CXT-TYPES."
+ (let ((lfn (sesman--link-lookup-fn system session-name cxt-types)))
+ (seq-filter lfn sesman-links-alist)))
+
+(defun sesman-current-links (system &optional cxt-types)
"Retrieve all active links in current context for SYSTEM.
CXT-TYPES is a list of context types to consider. Returned links
are a subset of `sesman-links-alist' sorted in order of relevance."
@@ -591,9 +609,9 @@ CXT-TYPES defaults to `sesman-context-types' for current
SYSTEM."
(defun sesman-register (system session)
"Register SESSION into `sesman-sessions-hashmap' and `sesman-links-alist'.
-SYSTEM defaults to current system. If a session with same name is already
+SYSTEM defaults to current system. If a session with same name is already
registered in `sesman-sessions-hashmap', change the name by appending \"#1\",
-\"#2\" ... to the name. This function should be called by system-specific
+\"#2\" ... to the name. This function should be called by system-specific
connection initializers (\"run-xyz\", \"xyz-jack-in\" etc.)."
(let* ((system (or system (sesman--system)))
(ses-name (car session))
@@ -631,11 +649,13 @@ session (list SESSION-NAME OBJECT)."
(defun sesman-remove-object (system session-name object &optional
auto-unregister no-error)
"Remove (destructively) OBJECT from session SESSION-NAME of SYSTEM.
-If SESSION-NAME is nil, retrieve the session with `sesman-session-for-object'.
-If OBJECT is the last object in sesman session, `sesman-unregister' the
session.
-If AUTO-UNREGISTER is non-nil unregister sessions of length 0. If NO-ERROR is
-non-nil, don't throw an error if OBJECT is not found in any session. This is
-useful if there are several \"concurrent\" parties which can remove the
object."
+If SESSION-NAME is nil, retrieve the session with
+`sesman-session-for-object'. If OBJECT is the last object in sesman
+session, `sesman-unregister' the session. If AUTO-UNREGISTER is non-nil
+unregister sessions of length 0 and remove all the links with the session.
+If NO-ERROR is non-nil, don't throw an error if OBJECT is not found in any
+session. This is useful if there are several \"concurrent\" parties which
+can remove the object."
(let* ((system (or system (sesman--system)))
(session (if session-name
(sesman-session system session-name)
@@ -705,12 +725,12 @@ buffers."
(cl-defmethod sesman-relevant-context-p ((_cxt-type (eql directory)) dir)
"Non-nil if DIR is the parent or equals the `default-directory'."
(when (and dir default-directory)
- (string-match-p (concat "^" dir) default-directory)))
+ (string-match-p (concat "^" dir) (expand-file-name default-directory))))
(cl-defmethod sesman-relevant-context-p ((_cxt-type (eql project)) proj)
"Non-nil if PROJ is the parent or equals the `default-directory'."
(when (and proj default-directory)
- (string-match-p (concat "^" (expand-file-name (cdr proj)))
- default-directory)))
+ (string-match-p (concat "^" (cdr proj))
+ (expand-file-name default-directory))))
(provide 'sesman)
- [nongnu] elpa/sesman 81a2136489 078/100: New SORT argument to sesman-current-links, (continued)
- [nongnu] elpa/sesman 81a2136489 078/100: New SORT argument to sesman-current-links, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 083cf73f3f 079/100: Version 0.3.2, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 1a6c5448cb 081/100: Don't use deleted sesman-connected-p, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 3a08e3e7de 085/100: Bump dev version, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 9c921699ce 090/100: Use elipsis instead of %%s for the common session name, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 90974f9fcf 092/100: Update README: sesman-kill* -> sesman-quit*, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 2a1a9a4ccf 087/100: Promote sesman-expand-path into public API, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman e8bfb0e379 091/100: Convert buffers to strings during formatting, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman fe92090cb6 099/100: Reformulate sesman-unlink docs, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 16fb6eca09 016/100: Fix package-lint issues, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman cdb8e0973a 018/100: Port back from CIDER,
ELPA Syncer <=
- [nongnu] elpa/sesman d8f293ff6e 024/100: Fix MELPA badge link, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman ea2e4fa0fe 039/100: Propagate system through `sesman-context`, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 47678331da 051/100: New semantics of sesman-session-info generic, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 5a11793697 054/100: Fix tests and checkdoc, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 34521cd5c2 049/100: Fix buffer lookup, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 3df33018f1 089/100: Strip trailing slash in `sesman-expand-path`, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 163984c60e 059/100: Better handling of overlays and sensor, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 6b0d6e318d 062/100: New UI and API functions sesman-link-with-least-specific and sesman-link-session, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 2b5135c00a 064/100: Version 0.2.1, ELPA Syncer, 2021/12/28
- [nongnu] elpa/sesman 209d9966e5 008/100: Renaming, refactoring ..., ELPA Syncer, 2021/12/28