Compare commits

..

3 Commits

Author SHA1 Message Date
e9273dcf09 New command pipewire-properties 2022-07-02 09:43:54 +02:00
5047d562c4 Remove trailing spaces 2022-07-02 09:30:44 +02:00
b54e3e4af6 Display nick as the object name if available 2022-07-02 09:18:09 +02:00
3 changed files with 28 additions and 5 deletions

View File

@ -86,6 +86,13 @@ If the given KEY doesn't exist in OBJECT, return DEFAULT."
(or (cdr (assoc key (pw-lib--object-info object))) (or (cdr (assoc key (pw-lib--object-info object)))
default)) default))
(defun pw-lib-properties (object)
"Return names of PipeWire OBJECT properties.
The returned value is a list of strings.
The corresponding values can be retrieved using `pw-lib-object-value'
function."
(cl-remove-if-not #'stringp (mapcar #'car (pw-lib--object-info object))))
(defun pw-lib-object-type (object) (defun pw-lib-object-type (object)
"Return PipeWire type of OBJECT as a string. "Return PipeWire type of OBJECT as a string.
E.g. \"Device\", \"Node\", \"Port\", \"Client\", ..." E.g. \"Device\", \"Node\", \"Port\", \"Client\", ..."

View File

@ -96,6 +96,7 @@ The indicator is displayed only on graphical terminals."
:group 'pipewire) :group 'pipewire)
(defvar pipewire-buffer "*PipeWire*") (defvar pipewire-buffer "*PipeWire*")
(defvar pipewire-properties-buffer "*PipWire-properties*")
(defun pw-ui--label (label) (defun pw-ui--label (label)
(propertize (concat label ":") 'face 'pipewire-label)) (propertize (concat label ":") 'face 'pipewire-label))
@ -109,7 +110,7 @@ The indicator is displayed only on graphical terminals."
'("application.name") '("application.name")
(let ((prefix (concat (downcase type) "."))) (let ((prefix (concat (downcase type) ".")))
(mapcar (lambda (suffix) (concat prefix suffix)) (mapcar (lambda (suffix) (concat prefix suffix))
'("description" "name")))))) '("nick" "description" "name"))))))
(or (cl-find-if #'identity (or (cl-find-if #'identity
(mapcar (lambda (p) (pw-lib-object-value object p)) (mapcar (lambda (p) (pw-lib-object-value object p))
description-properties)) description-properties))
@ -381,6 +382,20 @@ Otherwise ask for the Node to set as the default Node."
(pw-ui--update)) (pw-ui--update))
(error "Nothing to set a profile for here"))) (error "Nothing to set a profile for here")))
(defun pipewire-properties ()
"Display properties of the object at the current point."
(interactive)
(if-let ((object (pw-ui--current-object)))
(progn
(pop-to-buffer pipewire-properties-buffer)
(let ((inhibit-read-only t))
(erase-buffer)
(dolist (p (sort (pw-lib-properties object) #'string-lessp))
(insert (format "%s: %s\n" p (pw-lib-object-value object p)))))
(goto-char (point-min))
(view-mode))
(error "No PipeWire object here")))
(defvar pipewire-mode-map (defvar pipewire-mode-map
(let ((map (make-sparse-keymap))) (let ((map (make-sparse-keymap)))
(define-key map "d" 'pipewire-set-default) (define-key map "d" 'pipewire-set-default)
@ -391,6 +406,7 @@ Otherwise ask for the Node to set as the default Node."
(define-key map "-" 'pipewire-decrease-volume) (define-key map "-" 'pipewire-decrease-volume)
(define-key map "+" 'pipewire-increase-volume-single) (define-key map "+" 'pipewire-increase-volume-single)
(define-key map "_" 'pipewire-decrease-volume-single) (define-key map "_" 'pipewire-decrease-volume-single)
(define-key map " " 'pipewire-properties)
map)) map))
(define-derived-mode pipewire-mode special-mode "PW" (define-derived-mode pipewire-mode special-mode "PW"