Function: sesman-browser--insert-session

sesman-browser--insert-session is a byte-compiled function defined in sesman-browser.el.

Signature

(sesman-browser--insert-session SYSTEM SES I)

Source Code

;; Defined in ~/.emacs.d/elpa/sesman-20240417.1723/sesman-browser.el
(defun sesman-browser--insert-session (system ses i)
  (let ((ses-name (car ses))
        (head-template "%17s")
        beg end)
    (setq beg (point))

    ;; session header
    (insert (format "%3d: " i))
    (insert (propertize (car ses)
                        :sesman-stop ses-name
                        :sesman-vertical-stop t
                        :sesman-session-stop t
                        'face 'bold
                        'cursor-sensor-functions (list #'sesman-browser--sensor-function)
                        'mouse-face 'highlight)
            "\n")

    ;; links
    (insert (format head-template "linked-to: "))
    (let ((link-groups (sesman-grouped-links system ses))
          (vert-stop))
      (dolist (grp link-groups)
        (let* ((type (car grp)))
          (dolist (link (cdr grp))
            (when (> (current-column) fill-column)
              (insert "\n" (format head-template " "))
              (setq vert-stop nil))
            (let ((val (sesman--abbrev-path-maybe (sesman--lnk-value link))))
              (insert (propertize (sesman--format-context type val 'sesman-browser-button-face)
                                  :sesman-stop (car link)
                                  :sesman-vertical-stop (unless vert-stop (setq vert-stop t))
                                  :sesman-link link
                                  'cursor-sensor-functions (list #'sesman-browser--sensor-function)
                                  'mouse-face 'highlight)))
            (insert "  ")))))
    (insert "\n")

    ;; objects
    (insert (format head-template "objects: "))
    (let* ((info (sesman-session-info system ses))
           (map (plist-get info :map))
           (objects (plist-get info :objects))
           (strings (or (plist-get info :strings)
                        (mapcar (lambda (x) (format "%s" x)) objects)))
           (kvals (seq-mapn #'cons objects strings))
           (kvals (seq-sort (lambda (a b) (string-lessp (cdr a) (cdr b)))
                            kvals))
           (vert-stop))
      (dolist (kv kvals)
        (when (> (current-column) fill-column)
          (insert "\n" (format head-template " "))
          (setq vert-stop nil))
        (let ((str (replace-regexp-in-string ses-name "%s" (cdr kv) nil t)))
          (insert (propertize str
                              :sesman-stop str
                              :sesman-vertical-stop (unless vert-stop (setq vert-stop t))
                              :sesman-object (car kv)
                              'cursor-sensor-functions (list #'sesman-browser--sensor-function)
                              'face 'sesman-browser-button-face
                              'mouse-face 'highlight
                              'help-echo "mouse-2: visit in other window"
                              'keymap map)
                  "  "))))

    ;; session properties
    (setq end (point))
    (put-text-property beg end :sesman-session ses)
    (put-text-property beg end :sesman-session-name ses-name)
    (put-text-property beg end :sesman-fragment-beg beg)
    (put-text-property beg end :sesman-fragment-end end)
    (insert "\n\n")))