bug#43252: 27.1; DBus properties lack type hints or overrides

classic Classic list List threaded Threaded
37 messages Options
12
Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Hugh Daschbach-2
In order to implement a service exposing interface
"org.bluez.GattService1", I need to export the properties defined for
that interface.  (See,
https://kernel.googlesource.com/pub/scm/bluetooth/bluez/+/refs/tags/5.55/doc/gatt-api.txt)

There are two properties that require an object path: "Device", and
"Includes".  Since there is no type information associated with the
registered property, introspection supplies its best guess.  If the
value is a string it is described as a :string, not an :object-path

There doesn't seem to be any mechanism to register the property and have
introspection describe it as as an :object-path.

Am I missing something?  Is this out of scope?  Is there anyway to
specify simple types for parameter values?

Thanks,
Hugh


In GNU Emacs 27.1 (build 1, x86_64-pc-linux-gnu, X toolkit, Xaw3d scroll bars)
 of 2020-08-06 built on klaatu
Repository revision: 86d8d76aa36037184db0b2897c434cdaab1a9ae8
Repository branch: emacs-27
Windowing system distributor 'The X.Org Foundation', version 11.0.12008000
System Description: Artix Linux

Recent messages:
[mu4e] Indexing completed; processed 0, updated 0, cleaned-up 0
Mark set
[mu4e] Indexing... processed 2, updated 2
[mu4e] Indexing completed; processed 2, updated 2, cleaned-up 0
[mu4e] Found 19 matching messages
Mark set
C-x C-g is undefined
Winner undo (1 / 199)
Winner undo (2 / 198)
Auto-saving...done

Configured using:
 'configure --with-x-toolkit=lucid'

Configured features:
XAW3D XPM JPEG TIFF GIF PNG RSVG SOUND GPM DBUS GSETTINGS GLIB NOTIFY
INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS LUCID X11 XDBE XIM MODULES THREADS LIBSYSTEMD JSON
PDUMPER LCMS2 GMP

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Emacs-Lisp

Minor modes in effect:
  pdf-occur-global-minor-mode: t
  global-magit-file-mode: t
  magit-file-mode: t
  magit-auto-revert-mode: t
  global-git-commit-mode: t
  async-bytecomp-package-mode: t
  ggtags-navigation-mode: t
  desktop-save-mode: t
  which-key-mode: t
  hungry-delete-mode: t
  paredit-mode: t
  amx-mode: t
  ivy-mode: t
  winner-mode: t
  shell-dirtrack-mode: t
  save-place-mode: t
  global-edit-server-edit-mode: t
  auto-insert-mode: t
  override-global-mode: t
  straight-use-package-mode: t
  straight-package-neutering-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  abbrev-mode: t

Load-path shadows:
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox hides /home/hugh/.config/emacs/straight/build/org/ox
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-texinfo hides /home/hugh/.config/emacs/straight/build/org/ox-texinfo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-publish hides /home/hugh/.config/emacs/straight/build/org/ox-publish
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-org hides /home/hugh/.config/emacs/straight/build/org/ox-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-odt hides /home/hugh/.config/emacs/straight/build/org/ox-odt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-md hides /home/hugh/.config/emacs/straight/build/org/ox-md
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-man hides /home/hugh/.config/emacs/straight/build/org/ox-man
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-latex hides /home/hugh/.config/emacs/straight/build/org/ox-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-icalendar hides /home/hugh/.config/emacs/straight/build/org/ox-icalendar
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-html hides /home/hugh/.config/emacs/straight/build/org/ox-html
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-beamer hides /home/hugh/.config/emacs/straight/build/org/ox-beamer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-ascii hides /home/hugh/.config/emacs/straight/build/org/ox-ascii
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org hides /home/hugh/.config/emacs/straight/build/org/org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-timer hides /home/hugh/.config/emacs/straight/build/org/org-timer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-tempo hides /home/hugh/.config/emacs/straight/build/org/org-tempo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-table hides /home/hugh/.config/emacs/straight/build/org/org-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-src hides /home/hugh/.config/emacs/straight/build/org/org-src
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-refile hides /home/hugh/.config/emacs/straight/build/org/org-refile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-protocol hides /home/hugh/.config/emacs/straight/build/org/org-protocol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-plot hides /home/hugh/.config/emacs/straight/build/org/org-plot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-pcomplete hides /home/hugh/.config/emacs/straight/build/org/org-pcomplete
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-num hides /home/hugh/.config/emacs/straight/build/org/org-num
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mouse hides /home/hugh/.config/emacs/straight/build/org/org-mouse
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mobile hides /home/hugh/.config/emacs/straight/build/org/org-mobile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macs hides /home/hugh/.config/emacs/straight/build/org/org-macs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macro hides /home/hugh/.config/emacs/straight/build/org/org-macro
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-list hides /home/hugh/.config/emacs/straight/build/org/org-list
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-lint hides /home/hugh/.config/emacs/straight/build/org/org-lint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-keys hides /home/hugh/.config/emacs/straight/build/org/org-keys
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-inlinetask hides /home/hugh/.config/emacs/straight/build/org/org-inlinetask
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-indent hides /home/hugh/.config/emacs/straight/build/org/org-indent
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-id hides /home/hugh/.config/emacs/straight/build/org/org-id
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-habit hides /home/hugh/.config/emacs/straight/build/org/org-habit
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-goto hides /home/hugh/.config/emacs/straight/build/org/org-goto
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-footnote hides /home/hugh/.config/emacs/straight/build/org/org-footnote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-feed hides /home/hugh/.config/emacs/straight/build/org/org-feed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-faces hides /home/hugh/.config/emacs/straight/build/org/org-faces
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-entities hides /home/hugh/.config/emacs/straight/build/org/org-entities
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-element hides /home/hugh/.config/emacs/straight/build/org/org-element
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-duration hides /home/hugh/.config/emacs/straight/build/org/org-duration
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-datetree hides /home/hugh/.config/emacs/straight/build/org/org-datetree
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-ctags hides /home/hugh/.config/emacs/straight/build/org/org-ctags
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-crypt hides /home/hugh/.config/emacs/straight/build/org/org-crypt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-compat hides /home/hugh/.config/emacs/straight/build/org/org-compat
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-colview hides /home/hugh/.config/emacs/straight/build/org/org-colview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-clock hides /home/hugh/.config/emacs/straight/build/org/org-clock
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-capture hides /home/hugh/.config/emacs/straight/build/org/org-capture
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach hides /home/hugh/.config/emacs/straight/build/org/org-attach
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach-git hides /home/hugh/.config/emacs/straight/build/org/org-attach-git
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-archive hides /home/hugh/.config/emacs/straight/build/org/org-archive
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-agenda hides /home/hugh/.config/emacs/straight/build/org/org-agenda
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol hides /home/hugh/.config/emacs/straight/build/org/ol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-w3m hides /home/hugh/.config/emacs/straight/build/org/ol-w3m
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-rmail hides /home/hugh/.config/emacs/straight/build/org/ol-rmail
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-mhe hides /home/hugh/.config/emacs/straight/build/org/ol-mhe
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-irc hides /home/hugh/.config/emacs/straight/build/org/ol-irc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-info hides /home/hugh/.config/emacs/straight/build/org/ol-info
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-gnus hides /home/hugh/.config/emacs/straight/build/org/ol-gnus
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eww hides /home/hugh/.config/emacs/straight/build/org/ol-eww
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eshell hides /home/hugh/.config/emacs/straight/build/org/ol-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-docview hides /home/hugh/.config/emacs/straight/build/org/ol-docview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bibtex hides /home/hugh/.config/emacs/straight/build/org/ol-bibtex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bbdb hides /home/hugh/.config/emacs/straight/build/org/ol-bbdb
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob hides /home/hugh/.config/emacs/straight/build/org/ob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-vala hides /home/hugh/.config/emacs/straight/build/org/ob-vala
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-tangle hides /home/hugh/.config/emacs/straight/build/org/ob-tangle
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-table hides /home/hugh/.config/emacs/straight/build/org/ob-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-stan hides /home/hugh/.config/emacs/straight/build/org/ob-stan
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sqlite hides /home/hugh/.config/emacs/straight/build/org/ob-sqlite
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sql hides /home/hugh/.config/emacs/straight/build/org/ob-sql
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shen hides /home/hugh/.config/emacs/straight/build/org/ob-shen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shell hides /home/hugh/.config/emacs/straight/build/org/ob-shell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sed hides /home/hugh/.config/emacs/straight/build/org/ob-sed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-screen hides /home/hugh/.config/emacs/straight/build/org/ob-screen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-scheme hides /home/hugh/.config/emacs/straight/build/org/ob-scheme
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sass hides /home/hugh/.config/emacs/straight/build/org/ob-sass
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ruby hides /home/hugh/.config/emacs/straight/build/org/ob-ruby
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ref hides /home/hugh/.config/emacs/straight/build/org/ob-ref
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-python hides /home/hugh/.config/emacs/straight/build/org/ob-python
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-processing hides /home/hugh/.config/emacs/straight/build/org/ob-processing
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-plantuml hides /home/hugh/.config/emacs/straight/build/org/ob-plantuml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-picolisp hides /home/hugh/.config/emacs/straight/build/org/ob-picolisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-perl hides /home/hugh/.config/emacs/straight/build/org/ob-perl
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-org hides /home/hugh/.config/emacs/straight/build/org/ob-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-octave hides /home/hugh/.config/emacs/straight/build/org/ob-octave
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ocaml hides /home/hugh/.config/emacs/straight/build/org/ob-ocaml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-mscgen hides /home/hugh/.config/emacs/straight/build/org/ob-mscgen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-maxima hides /home/hugh/.config/emacs/straight/build/org/ob-maxima
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-matlab hides /home/hugh/.config/emacs/straight/build/org/ob-matlab
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-makefile hides /home/hugh/.config/emacs/straight/build/org/ob-makefile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lua hides /home/hugh/.config/emacs/straight/build/org/ob-lua
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lob hides /home/hugh/.config/emacs/straight/build/org/ob-lob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lisp hides /home/hugh/.config/emacs/straight/build/org/ob-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lilypond hides /home/hugh/.config/emacs/straight/build/org/ob-lilypond
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ledger hides /home/hugh/.config/emacs/straight/build/org/ob-ledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-latex hides /home/hugh/.config/emacs/straight/build/org/ob-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-js hides /home/hugh/.config/emacs/straight/build/org/ob-js
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-java hides /home/hugh/.config/emacs/straight/build/org/ob-java
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-io hides /home/hugh/.config/emacs/straight/build/org/ob-io
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-hledger hides /home/hugh/.config/emacs/straight/build/org/ob-hledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-haskell hides /home/hugh/.config/emacs/straight/build/org/ob-haskell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-groovy hides /home/hugh/.config/emacs/straight/build/org/ob-groovy
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-gnuplot hides /home/hugh/.config/emacs/straight/build/org/ob-gnuplot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-fortran hides /home/hugh/.config/emacs/straight/build/org/ob-fortran
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-forth hides /home/hugh/.config/emacs/straight/build/org/ob-forth
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-exp hides /home/hugh/.config/emacs/straight/build/org/ob-exp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eval hides /home/hugh/.config/emacs/straight/build/org/ob-eval
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eshell hides /home/hugh/.config/emacs/straight/build/org/ob-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-emacs-lisp hides /home/hugh/.config/emacs/straight/build/org/ob-emacs-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ebnf hides /home/hugh/.config/emacs/straight/build/org/ob-ebnf
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-dot hides /home/hugh/.config/emacs/straight/build/org/ob-dot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ditaa hides /home/hugh/.config/emacs/straight/build/org/ob-ditaa
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-css hides /home/hugh/.config/emacs/straight/build/org/ob-css
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-core hides /home/hugh/.config/emacs/straight/build/org/ob-core
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-coq hides /home/hugh/.config/emacs/straight/build/org/ob-coq
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-comint hides /home/hugh/.config/emacs/straight/build/org/ob-comint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-clojure hides /home/hugh/.config/emacs/straight/build/org/ob-clojure
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-calc hides /home/hugh/.config/emacs/straight/build/org/ob-calc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-awk hides /home/hugh/.config/emacs/straight/build/org/ob-awk
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-asymptote hides /home/hugh/.config/emacs/straight/build/org/ob-asymptote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-abc hides /home/hugh/.config/emacs/straight/build/org/ob-abc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-R hides /home/hugh/.config/emacs/straight/build/org/ob-R
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-J hides /home/hugh/.config/emacs/straight/build/org/ob-J
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-C hides /home/hugh/.config/emacs/straight/build/org/ob-C
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-loaddefs hides /home/hugh/.config/emacs/straight/build/org/org-loaddefs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-install hides /home/hugh/.config/emacs/straight/build/org/org-install
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-texinfo hides /usr/local/share/emacs/27.1/lisp/org/ox-texinfo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-publish hides /usr/local/share/emacs/27.1/lisp/org/ox-publish
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-org hides /usr/local/share/emacs/27.1/lisp/org/ox-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-odt hides /usr/local/share/emacs/27.1/lisp/org/ox-odt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-md hides /usr/local/share/emacs/27.1/lisp/org/ox-md
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-man hides /usr/local/share/emacs/27.1/lisp/org/ox-man
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-latex hides /usr/local/share/emacs/27.1/lisp/org/ox-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-icalendar hides /usr/local/share/emacs/27.1/lisp/org/ox-icalendar
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-html hides /usr/local/share/emacs/27.1/lisp/org/ox-html
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox hides /usr/local/share/emacs/27.1/lisp/org/ox
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-beamer hides /usr/local/share/emacs/27.1/lisp/org/ox-beamer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ox-ascii hides /usr/local/share/emacs/27.1/lisp/org/ox-ascii
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-timer hides /usr/local/share/emacs/27.1/lisp/org/org-timer
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-tempo hides /usr/local/share/emacs/27.1/lisp/org/org-tempo
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-table hides /usr/local/share/emacs/27.1/lisp/org/org-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-src hides /usr/local/share/emacs/27.1/lisp/org/org-src
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-protocol hides /usr/local/share/emacs/27.1/lisp/org/org-protocol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-plot hides /usr/local/share/emacs/27.1/lisp/org/org-plot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-pcomplete hides /usr/local/share/emacs/27.1/lisp/org/org-pcomplete
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-num hides /usr/local/share/emacs/27.1/lisp/org/org-num
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mouse hides /usr/local/share/emacs/27.1/lisp/org/org-mouse
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-mobile hides /usr/local/share/emacs/27.1/lisp/org/org-mobile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macs hides /usr/local/share/emacs/27.1/lisp/org/org-macs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-macro hides /usr/local/share/emacs/27.1/lisp/org/org-macro
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-list hides /usr/local/share/emacs/27.1/lisp/org/org-list
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-lint hides /usr/local/share/emacs/27.1/lisp/org/org-lint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-keys hides /usr/local/share/emacs/27.1/lisp/org/org-keys
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-inlinetask hides /usr/local/share/emacs/27.1/lisp/org/org-inlinetask
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-indent hides /usr/local/share/emacs/27.1/lisp/org/org-indent
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-id hides /usr/local/share/emacs/27.1/lisp/org/org-id
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-habit hides /usr/local/share/emacs/27.1/lisp/org/org-habit
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-goto hides /usr/local/share/emacs/27.1/lisp/org/org-goto
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-footnote hides /usr/local/share/emacs/27.1/lisp/org/org-footnote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-feed hides /usr/local/share/emacs/27.1/lisp/org/org-feed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-faces hides /usr/local/share/emacs/27.1/lisp/org/org-faces
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-entities hides /usr/local/share/emacs/27.1/lisp/org/org-entities
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-element hides /usr/local/share/emacs/27.1/lisp/org/org-element
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org hides /usr/local/share/emacs/27.1/lisp/org/org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-duration hides /usr/local/share/emacs/27.1/lisp/org/org-duration
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-datetree hides /usr/local/share/emacs/27.1/lisp/org/org-datetree
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-ctags hides /usr/local/share/emacs/27.1/lisp/org/org-ctags
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-crypt hides /usr/local/share/emacs/27.1/lisp/org/org-crypt
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-compat hides /usr/local/share/emacs/27.1/lisp/org/org-compat
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-colview hides /usr/local/share/emacs/27.1/lisp/org/org-colview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-clock hides /usr/local/share/emacs/27.1/lisp/org/org-clock
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-capture hides /usr/local/share/emacs/27.1/lisp/org/org-capture
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach-git hides /usr/local/share/emacs/27.1/lisp/org/org-attach-git
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-attach hides /usr/local/share/emacs/27.1/lisp/org/org-attach
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-archive hides /usr/local/share/emacs/27.1/lisp/org/org-archive
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-agenda hides /usr/local/share/emacs/27.1/lisp/org/org-agenda
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-w3m hides /usr/local/share/emacs/27.1/lisp/org/ol-w3m
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-rmail hides /usr/local/share/emacs/27.1/lisp/org/ol-rmail
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-mhe hides /usr/local/share/emacs/27.1/lisp/org/ol-mhe
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-irc hides /usr/local/share/emacs/27.1/lisp/org/ol-irc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-info hides /usr/local/share/emacs/27.1/lisp/org/ol-info
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-gnus hides /usr/local/share/emacs/27.1/lisp/org/ol-gnus
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eww hides /usr/local/share/emacs/27.1/lisp/org/ol-eww
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-eshell hides /usr/local/share/emacs/27.1/lisp/org/ol-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol hides /usr/local/share/emacs/27.1/lisp/org/ol
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-docview hides /usr/local/share/emacs/27.1/lisp/org/ol-docview
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bibtex hides /usr/local/share/emacs/27.1/lisp/org/ol-bibtex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ol-bbdb hides /usr/local/share/emacs/27.1/lisp/org/ol-bbdb
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-vala hides /usr/local/share/emacs/27.1/lisp/org/ob-vala
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-tangle hides /usr/local/share/emacs/27.1/lisp/org/ob-tangle
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-table hides /usr/local/share/emacs/27.1/lisp/org/ob-table
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-stan hides /usr/local/share/emacs/27.1/lisp/org/ob-stan
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sqlite hides /usr/local/share/emacs/27.1/lisp/org/ob-sqlite
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sql hides /usr/local/share/emacs/27.1/lisp/org/ob-sql
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shen hides /usr/local/share/emacs/27.1/lisp/org/ob-shen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-shell hides /usr/local/share/emacs/27.1/lisp/org/ob-shell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sed hides /usr/local/share/emacs/27.1/lisp/org/ob-sed
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-screen hides /usr/local/share/emacs/27.1/lisp/org/ob-screen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-scheme hides /usr/local/share/emacs/27.1/lisp/org/ob-scheme
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-sass hides /usr/local/share/emacs/27.1/lisp/org/ob-sass
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ruby hides /usr/local/share/emacs/27.1/lisp/org/ob-ruby
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-R hides /usr/local/share/emacs/27.1/lisp/org/ob-R
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ref hides /usr/local/share/emacs/27.1/lisp/org/ob-ref
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-python hides /usr/local/share/emacs/27.1/lisp/org/ob-python
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-processing hides /usr/local/share/emacs/27.1/lisp/org/ob-processing
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-plantuml hides /usr/local/share/emacs/27.1/lisp/org/ob-plantuml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-picolisp hides /usr/local/share/emacs/27.1/lisp/org/ob-picolisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-perl hides /usr/local/share/emacs/27.1/lisp/org/ob-perl
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-org hides /usr/local/share/emacs/27.1/lisp/org/ob-org
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-octave hides /usr/local/share/emacs/27.1/lisp/org/ob-octave
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ocaml hides /usr/local/share/emacs/27.1/lisp/org/ob-ocaml
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-mscgen hides /usr/local/share/emacs/27.1/lisp/org/ob-mscgen
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-maxima hides /usr/local/share/emacs/27.1/lisp/org/ob-maxima
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-matlab hides /usr/local/share/emacs/27.1/lisp/org/ob-matlab
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-makefile hides /usr/local/share/emacs/27.1/lisp/org/ob-makefile
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lua hides /usr/local/share/emacs/27.1/lisp/org/ob-lua
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lob hides /usr/local/share/emacs/27.1/lisp/org/ob-lob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lisp hides /usr/local/share/emacs/27.1/lisp/org/ob-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-lilypond hides /usr/local/share/emacs/27.1/lisp/org/ob-lilypond
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ledger hides /usr/local/share/emacs/27.1/lisp/org/ob-ledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-latex hides /usr/local/share/emacs/27.1/lisp/org/ob-latex
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-js hides /usr/local/share/emacs/27.1/lisp/org/ob-js
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-J hides /usr/local/share/emacs/27.1/lisp/org/ob-J
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-java hides /usr/local/share/emacs/27.1/lisp/org/ob-java
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-io hides /usr/local/share/emacs/27.1/lisp/org/ob-io
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-hledger hides /usr/local/share/emacs/27.1/lisp/org/ob-hledger
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-haskell hides /usr/local/share/emacs/27.1/lisp/org/ob-haskell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-groovy hides /usr/local/share/emacs/27.1/lisp/org/ob-groovy
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-gnuplot hides /usr/local/share/emacs/27.1/lisp/org/ob-gnuplot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-fortran hides /usr/local/share/emacs/27.1/lisp/org/ob-fortran
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-forth hides /usr/local/share/emacs/27.1/lisp/org/ob-forth
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-exp hides /usr/local/share/emacs/27.1/lisp/org/ob-exp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eval hides /usr/local/share/emacs/27.1/lisp/org/ob-eval
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-eshell hides /usr/local/share/emacs/27.1/lisp/org/ob-eshell
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-emacs-lisp hides /usr/local/share/emacs/27.1/lisp/org/ob-emacs-lisp
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob hides /usr/local/share/emacs/27.1/lisp/org/ob
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ebnf hides /usr/local/share/emacs/27.1/lisp/org/ob-ebnf
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-dot hides /usr/local/share/emacs/27.1/lisp/org/ob-dot
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-ditaa hides /usr/local/share/emacs/27.1/lisp/org/ob-ditaa
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-css hides /usr/local/share/emacs/27.1/lisp/org/ob-css
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-core hides /usr/local/share/emacs/27.1/lisp/org/ob-core
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-coq hides /usr/local/share/emacs/27.1/lisp/org/ob-coq
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-comint hides /usr/local/share/emacs/27.1/lisp/org/ob-comint
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-clojure hides /usr/local/share/emacs/27.1/lisp/org/ob-clojure
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-C hides /usr/local/share/emacs/27.1/lisp/org/ob-C
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-calc hides /usr/local/share/emacs/27.1/lisp/org/ob-calc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-awk hides /usr/local/share/emacs/27.1/lisp/org/ob-awk
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-asymptote hides /usr/local/share/emacs/27.1/lisp/org/ob-asymptote
/home/hugh/.config/emacs/straight/build/org-plus-contrib/ob-abc hides /usr/local/share/emacs/27.1/lisp/org/ob-abc
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-loaddefs hides /usr/local/share/emacs/27.1/lisp/org/org-loaddefs
/home/hugh/.config/emacs/straight/build/org-plus-contrib/org-install hides /usr/local/share/emacs/27.1/lisp/org/org-install
/home/hugh/.config/emacs/straight/build/let-alist/let-alist hides /usr/local/share/emacs/27.1/lisp/emacs-lisp/let-alist

Features:
(shadow emacsbug sh-script smie python tramp-cmds rng-xsd xsd-regexp
rng-cmpct rng-nxml rng-valid nxml-mode nxml-outln nxml-rap sgml-mode
company-tng company transpose-frame autoload lisp-mnt descr-text
gl-bluez-gatt dabbrev quail org-eldoc ol-eww ol-rmail ol-mhe ol-irc
ol-info ol-gnus nnir ol-docview ol-bibtex bibtex ol-bbdb ol-w3m pdf-sync
pdf-outline pdf-links pdf-history pdf-occur ibuf-ext pdf-isearch
let-alist pdf-annot tablist tablist-filter semantic/wisent/comp
semantic/wisent semantic/wisent/wisent semantic/util-modes semantic/util
semantic semantic/tag semantic/lex semantic/fw mode-local cedet pdf-misc
pdf-tools pdf-view pdf-cache pdf-info tq pdf-util rect epa-mail epa-file
mailalias face-remap tabify man view timezone gnutls url-http url-gw
url-cache url-auth eww mm-url magit-extras magit-bookmark
magit-submodule magit-obsolete magit-blame magit-stash magit-reflog
magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote
magit-commit magit-sequence magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-reset magit-files magit-refs magit-status
magit package url-handlers magit-repos magit-apply magit-wip magit-log
which-func imenu magit-diff smerge-mode diff magit-core magit-autorevert
autorevert magit-margin magit-transient magit-process magit-mode
git-commit transient magit-git magit-section magit-utils crm log-edit
pcvs-util add-log with-editor async-bytecomp async tmm eieio-opt
speedbar sb-image ezimage dframe dbus-bluetooth dbus-formatters
dbus-inspector tree-mode flyspell repeat bug-reference macrostep-c
cmacexp macrostep ggtags etags fileloop ewoc cc-mode cc-fonts cc-guess
cc-menus cc-cmds cc-styles cc-align cc-engine cc-vars cc-defs pulse xref
project debug backtrace dired-aux tramp-cache tramp-sh tramp
tramp-loaddefs trampver tramp-integration files-x tramp-compat ls-lisp
recentf tree-widget visual-fill-column sort gnus-cite smiley shr-color
qp mm-archive mail-extr gnus-art mm-uu mml2015 mm-view mml-smime smime
dig gnus-sum gnus-group gnus-undo gnus-start gnus-cloud nnimap nnmail
mail-source utf7 netrc nnoo parse-time iso8601 gnus-spec gnus-int
gnus-range gnus-win gnus nnheader iso-transl csv executable disp-table
network-stream nsm cl-print ace-window avy rcirc help-fns radix-tree
persistent-soft list-utils pcache eieio-compat eieio-base font-utils
unicode-fonts misearch multi-isearch two-column vc-git diff-mode
elfeed-org elfeed-show elfeed-search bookmark elfeed-csv elfeed
elfeed-curl url url-proxy url-expand url-methods url-history mailcap
elfeed-log elfeed-db elfeed-lib url-queue xml-query mu4e mu4e-org
mu4e-main mu4e-view mu4e-headers mu4e-compose mu4e-context mu4e-draft
mu4e-actions ido rfc2368 smtpmail sendmail mu4e-mark mu4e-proc
mu4e-utils doc-view jka-compr image-mode exif mu4e-lists mu4e-message
flow-fill ox-reveal desktop frameset ox-hugo org-refile ffap thingatpt
ox-blackfriday ox-odt rng-loc rng-uri rng-parse rng-match rng-dt
rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util ox-md
ox-html table ox-beamer ox-latex ox-ascii ox-publish ox org-element
avl-tree generator org org-macro org-footnote org-pcomplete org-list
org-faces org-entities noutline outline ob-gnuplot ob-dot ob-ditaa
ob-shell ob-awk ob-calc calc-store calc-trail calc-ext calc
calc-loaddefs calc-macs ob ob-tangle org-src ob-ref ob-lob ob-table
ob-exp ob-comint ob-emacs-lisp ob-core ob-eval org-table ol org-keys
org-compat org-macs org-loaddefs find-func cal-menu calendar
cal-loaddefs mule-util hl-line mu4e-vars message rmc format-spec rfc822
mml mml-sec epa derived epg epg-config gnus-util rmail rmail-loaddefs
time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047
rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils
mailheader mu4e-meta which-key server hungry-delete paredit ivy-posframe
posframe ivy-hydra amx ivy flx delsel ivy-faces ivy-overlay colir color
winner url-privacy filenotify slime-company-autoloads slime-autoloads
macrostep-autoloads shr text-property-search url-cookie url-domsuf
url-util url-parse auth-source eieio eieio-core eieio-loaddefs
password-cache url-vars puny svg dom zenburn-theme
zenburn-theme-autoloads which-key-autoloads visual-fill-column-autoloads
unicode-fonts-autoloads ucs-utils-autoloads font-utils-autoloads
persistent-soft-autoloads list-utils-autoloads cl pcache-autoloads
tree-mode-autoloads transpose-frame-autoloads tex-mode shell pcomplete
smtpmail-multi-autoloads smart-mode-line-respectful-theme
smart-mode-line rich-minority smart-mode-line-autoloads
rich-minority-autoloads saveplace ripgrep-autoloads restclient-autoloads
pdf-tools-autoloads tablist-autoloads paredit-autoloads
ox-reveal-autoloads ox-hugo-autoloads org-gcal-autoloads
persist-autoloads request-deferred-autoloads deferred-autoloads
request-autoloads org-caldav-autoloads org-plus-contrib-autoloads
magit-svn-autoloads json-mode-autoloads json-snatcher-autoloads
json-reformat-autoloads ix grapnel ix-autoloads grapnel-autoloads
ivy-posframe-autoloads posframe-autoloads ivy-hydra-autoloads ispell
ielm pp ibuffer ibuffer-loaddefs hyperbole-autoloads kotl-autoloads
hydra lv hydra-autoloads lv-autoloads hungry-delete-autoloads
gnuplot-autoloads ggtags-autoloads geiser-autoloads flx-autoloads
forge-autoloads markdown-mode-autoloads magit-autoloads
git-commit-autoloads with-editor-autoloads transient-autoloads
async-autoloads ghub-autoloads treepy-autoloads let-alist-autoloads
closql-autoloads emacsql-sqlite-autoloads emacsql-autoloads
esup-autoloads elpher-autoloads emojify apropos tar-mode arc-mode
archive-mode pcase json map ht emojify-autoloads ht-autoloads
emms-autoloads elfeed-org-autoloads org-autoloads org-version
elfeed-autoloads edit-server advice edit-server-autoloads
dmenu-autoloads deft-autoloads dired-x use-package-ensure
dired-subtree-autoloads dired-hacks-utils-autoloads diminish
diminish-autoloads dictionary-autoloads link-autoloads
connection-autoloads delight-autoloads deadgrep-autoloads
spinner-autoloads dbus-inspector-autoloads dash-functional
dash-functional-autoloads csv-autoloads counsel-projectile-autoloads
projectile-autoloads pkg-info-autoloads epl-autoloads counsel-autoloads
swiper-autoloads ivy-autoloads company-quickhelp-autoloads
pos-tip-autoloads company-autoloads use-package-diminish autoinsert
amx-autoloads alert log4e rx notifications dbus xml gntp alert-autoloads
log4e-autoloads gntp-autoloads ag vc-svn compile comint ansi-color ring
find-dired s dash dired dired-loaddefs ag-autoloads s-autoloads
dash-autoloads adaptive-wrap adaptive-wrap-autoloads
ace-window-autoloads avy-autoloads finder-inf edmacro kmacro browse-url
cus-edit cus-start cus-load wid-edit use-package-bind-key bind-key
easy-mmode cl-seq use-package-core use-package-autoloads
bind-key-autoloads straight-autoloads info cl-extra help-mode easymenu
seq byte-opt straight subr-x cl-macs gv cl-loaddefs cl-lib bytecomp
byte-compile cconv early-init tooltip eldoc electric uniquify ediff-hook
vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode elisp-mode lisp-mode prog-mode register page
tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse
jit-lock font-lock syntax facemenu font-core term/tty-colors frame
minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese
tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek
romanian slovak czech european ethiopic indian cyrillic chinese
composite charscript charprop case-table epa-hook jka-cmpr-hook help
simple abbrev obarray cl-preloaded nadvice loaddefs button faces
cus-face macroexp files text-properties overlay sha1 md5 base64 format
env code-pages mule custom widget hashtable-print-readable backquote
threads dbusbind inotify lcms2 dynamic-setting system-font-setting
font-render-setting x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 2346615 242711)
 (symbols 48 72629 6)
 (strings 32 326956 25390)
 (string-bytes 1 11416553)
 (vectors 16 122495)
 (vector-slots 8 2358061 258976)
 (floats 8 5596 2288)
 (intervals 56 234189 8288)
 (buffers 1000 244))




Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,

> In order to implement a service exposing interface
> "org.bluez.GattService1", I need to export the properties defined for
> that interface.  (See,
> https://kernel.googlesource.com/pub/scm/bluetooth/bluez/+/refs/tags/5.55/doc/gatt-api.txt)
>
> There are two properties that require an object path: "Device", and
> "Includes".  Since there is no type information associated with the
> registered property, introspection supplies its best guess.  If the
> value is a string it is described as a :string, not an :object-path
>
> There doesn't seem to be any mechanism to register the property and have
> introspection describe it as as an :object-path.
>
> Am I missing something?  Is this out of scope?  Is there anyway to
> specify simple types for parameter values?

Confirmed. In `dbus-registered-objects-table', properties are stored w/o
signature. An object path is stored as string, and dbus-get-property
returns a string.

Introspection data could be used if exists (like in your case). But they
are optional, so one cannot trust on their existence. Maybe we could say
that, in absence of introspection data, ofD.Properties.Get and
ofD.Properties.GetAll shall return a default type, like string in case
of object paths? Then it would be the responsibility of the user to
provide proper introspection data if needed.

> Thanks,
> Hugh

Best regards, Michael.



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Hugh Daschbach-2

Michael Albinus writes:

> Hugh Daschbach <[hidden email]> writes:
>
> Hi Hugh,
>
>> There doesn't seem to be any mechanism to register the property
>> and have
>> introspection describe it as as an :object-path.
>>
>
> Confirmed. In `dbus-registered-objects-table', properties are
> stored w/o
> signature. An object path is stored as string, and
> dbus-get-property
> returns a string.
>
> Introspection data could be used if exists (like in your
> case). But they
> are optional, so one cannot trust on their existence. Maybe we
> could say
> that, in absence of introspection data, ofD.Properties.Get and
> ofD.Properties.GetAll shall return a default type, like string
> in case
> of object paths? Then it would be the responsibility of the user
> to
> provide proper introspection data if needed.
>

I had considered an optional or keyword argument to
dbus-register-property, but I like introspection even more.  Then
the
application simply registers ofD.Introspectable.Introspect for
each of
its objects?

Introspect returns XML.  The SEXP that dbus-introspect-xml returns
is
easier to work with.  So do you memoize the returned value?  There
may
not be enough overhead to be concerned.  I'm just trying to
imagine what
overhead would be introduced.

I'm looking at emulating a Bluetooth keyboard.  So I'm
anticipating
bursty property updates on the order of tens per second.  User
initiated, rather than continuous background activity.  But I
don't want
to bog the system down.  An introspection per property update
probably
isn't much to worry about.

Sounds good to me.

Cheer,
Hugh



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,

>>> There doesn't seem to be any mechanism to register the property and
>>> have
>>> introspection describe it as as an :object-path.
>>>
>>
>> Confirmed. In `dbus-registered-objects-table', properties are stored
>> w/o
>> signature. An object path is stored as string, and dbus-get-property
>> returns a string.
>>
>> Introspection data could be used if exists (like in your case). But
>> they
>> are optional, so one cannot trust on their existence. Maybe we could
>> say
>> that, in absence of introspection data, ofD.Properties.Get and
>> ofD.Properties.GetAll shall return a default type, like string in
>> case
>> of object paths? Then it would be the responsibility of the user to
>> provide proper introspection data if needed.
>>
>
> I had considered an optional or keyword argument to
> dbus-register-property, but I like introspection even more.  Then the
> application simply registers ofD.Introspectable.Introspect for each of
> its objects?

I'm just sitting at this. Yes, introspection data is the best way to
go. I've already extended dbus-introspect-get-signature to support also
properties (it does already work for methods and signals, modulo a bug I
have fixed this way). Looks promising.

> Introspect returns XML.  The SEXP that dbus-introspect-xml returns is
> easier to work with.

Sure. But there are several helper functions, like the just mentioned
dbus-introspect-get-signature. Have a look at dbus.el; not everything is
documented. (And since I'm bad in documentation; comments for
improvements are appreciated)

> So do you memoize the returned value?  There may not be enough
> overhead to be concerned.  I'm just trying to imagine what overhead
> would be introduced.

Not yet. But in case of performance problems, we could indeed do caching.

> I'm looking at emulating a Bluetooth keyboard.  So I'm anticipating
> bursty property updates on the order of tens per second.  User
> initiated, rather than continuous background activity.  But I don't
> want to bog the system down.  An introspection per property update
> probably isn't much to worry about.

My experience is that method calls are very responsive. But I haven't
tested with bulk data yet, we'll see.

Another problem: The changes I apply do not qualify as bug fixing any
longer, so I fear they are not applicable to Emacs 27. I'm working on
Emacs' master branch (what will be Emacs 28 later), the patches I have
provided to you were backports. Do you have a chance to use Emacs'
master branch? This will avoid discussions with the maintainers whether
those changes are good for Emacs 27, and it will simplify my life
considerably, because the sources for D-Bus in Emacs 27 and 28 differ. I
have even applied changes to dbusbind.c, which means it would be harder
for you to integrate my patches into Emacs 27.

> Cheer,
> Hugh

Best regards, Michael.



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Hugh Daschbach-2

Michael Albinus writes:

> Hugh Daschbach <[hidden email]> writes:
>
> Hi Hugh,
>
> Another problem: The changes I apply do not qualify as bug
> fixing any
> longer, so I fear they are not applicable to Emacs 27. I'm
> working on
> Emacs' master branch (what will be Emacs 28 later), the patches
> I have
> provided to you were backports. Do you have a chance to use
> Emacs'
> master branch? This will avoid discussions with the maintainers
> whether
> those changes are good for Emacs 27, and it will simplify my
> life
> considerably, because the sources for D-Bus in Emacs 27 and 28
> differ. I
> have even applied changes to dbusbind.c, which means it would be
> harder
> for you to integrate my patches into Emacs 27.

This all sounds good.  I'd be happy to move my testing to
master. I'd
already realized that part of what I depend on won't make it to
27.

I'll build master this afternoon.

Thanks.
Hugh



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,

>> Another problem: The changes I apply do not qualify as bug fixing any
>> longer, so I fear they are not applicable to Emacs 27. I'm working on
>> Emacs' master branch (what will be Emacs 28 later), the patches I
>> have provided to you were backports. Do you have a chance to use
>> Emacs' master branch? This will avoid discussions with the
>> maintainers whether those changes are good for Emacs 27, and it will
>> simplify my life considerably, because the sources for D-Bus in Emacs
>> 27 and 28 differ. I have even applied changes to dbusbind.c, which
>> means it would be harder for you to integrate my patches into Emacs
>> 27.
>
> This all sounds good.  I'd be happy to move my testing to master. I'd
> already realized that part of what I depend on won't make it to 27.

I've pushed a fix to master, which shall solve the problem. Playing with
introspection, I found the problem that it stalls if there are no
introspection data. Not applicable. So I've turned to the alternative
approach, allowing type symbols in `dbus-set-property' and
`dbus-register-property'. You could call now

(dbus-register-property :session "org.gnu.Emacs" "/node1"
 "org.bluez.GattService1" "Device" :readwrite
 :object-path "/path/node1")

Similar in `dbus-set-property'. Documentation is adapted, dbus-tests.el
extended accordingly.

> I'll build master this afternoon.

Good luck! If everything goes well, could you pls check whther this
problem is solved?

> Thanks.
> Hugh

Best regards, Michael.



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Hugh Daschbach-2

Hugh Daschbach writes:

> Michael Albinus writes:
>
> Thanks, Michael.  I think I still have issues.
>
> The attached script generates two boolean properties, then
> issues
> a GetManagedObjects method call.  The two properties are not
> returned, though they are in the registered objects table.

My apologies.  I left off the script invocation:

./src/emacs -q -Q --load ~/.config/emacs/register-property-test.el
--eval "(main)"

> The script also drops an elisp ‘dbus-get-all-managed-objects’
> request in
> the *scratch* buffer.  If I execute that, I get a similar
> failure
> to #43251.  That may not be surprising.

And please ignore the above paragraph.  That was an operator
error.

Thanks,
Hugh



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
In reply to this post by Michael Albinus
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,

> The attached script generates two boolean properties, then issues a
> GetManagedObjects method call.  The two properties are not returned,
> though they are in the registered objects table.

Thanks for the heads up. There was still a small thinko in
dbus-managed-objects-handler which I haven't noticed, because in my
tests I have registered both methods and properties in parallel. I've
pushed a fix to master, including extension of dbus-tests.el (which
shall prevent this problem to reappear silently).

> The script also drops an elisp ‘dbus-get-all-managed-objects’ request
> in
> the *scratch* buffer.  If I execute that, I get a similar failure to
> #43251.  That may not be surprising.

Sure. I haven't worked on this yet.

> I’m working an a more comprehensive test that registers the variety of
> types I need to support.  I’ll post that when I have something worth
> looking at.  I’d like to present that in a form compatible with
> dbus-test.el rather than throw more one off scripts at you.  So give
> me
> a bit.

That would be great! I'll happily add your tests to
dbus-tests.el. However, this would be a contribution to Emacs. For
contributions exceeding ~15 lines, every contributor shall sign the
legal papers from the FSF. Would you be willing to do?

> I think the mechanism you implemented works well for simple types. Is
> there a mechanism to specify the signature for an empty compound type?
> I need arrays and dictionaries of various types.

Until now, the implementation allows only basic D-Bus types for
properties. Nobody has asked for more so far :-)

I could extend this for complex types. Since this will require internal
changes of data structures, it might take some days.

An empty array could be specified by the element's signature, like
(:array :signature "{sv}"). See the D-Bus manual via
(info "(dbus) Type Conversion")

> For something like a byte array, I expect I’ll need to interleave the
> :byte type between each value in the array.  Correct?

Yes.

> Thanks,
> Hugh

Best regards, Michael.



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Hugh Daschbach-2

Michael Albinus writes:

> Hugh Daschbach <[hidden email]> writes:
>
> Hi Hugh,
>
> That would be great! I'll happily add your tests to
> dbus-tests.el. However, this would be a contribution to
> Emacs. For
> contributions exceeding ~15 lines, every contributor shall sign
> the
> legal papers from the FSF. Would you be willing to do?

Yes, I'd be willing to assign copyright to FSF.  Where do I get a
copy
of the paperwork?  I'll keep submissions to under 15 lines until I
can
get the paperwork cleared.

> Until now, the implementation allows only basic D-Bus types for
> properties. Nobody has asked for more so far :-)
>
> I could extend this for complex types. Since this will require
> internal
> changes of data structures, it might take some days.
>
> An empty array could be specified by the element's signature,
> like
> (:array :signature "{sv}"). See the D-Bus manual via
> (info "(dbus) Type Conversion")

I have used that signature for method returns.  I suppose I could
save
the signature as a property value instead of nil if I have an
empty
value for a compound type.  Let me look at that.

Thanks again.

Hugh



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,
>>
>> That would be great! I'll happily add your tests to
>> dbus-tests.el. However, this would be a contribution to Emacs. For
>> contributions exceeding ~15 lines, every contributor shall sign the
>> legal papers from the FSF. Would you be willing to do?
>
> Yes, I'd be willing to assign copyright to FSF.  Where do I get a copy
> of the paperwork?  I'll keep submissions to under 15 lines until I can
> get the paperwork cleared.

FTR, template sent offlist.

> Thanks again.
>
> Hugh

Best regards, Michael.



Reply | Threaded
Open this post in threaded view
|

bug#43252: Fwd: bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
In reply to this post by Hugh Daschbach-2

Michael Albinus writes:

> Hugh Daschbach <[hidden email]> writes:
>
> Hi Hugh,
>
> Appended. And thanks for your offer!

Thanks, Michael.  I've sent the email requesting the paperwork.
Will
let you know when it's submitted.

In the meantime, just to check that I'm on the right track, I've
attached a failing test.  Sadly, it's more than 15 lines.  Feel
free to
test with it.

For the moment, I'll only forward failing tests.  Once the
paperwork is
finalized I'll send you whatever suite of tests I've managed to
come up
with by then.

Just for the record, I'm testing master currently at d08568e6e92.

Cheers,
Hugh



dbus-tests.diff (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
In reply to this post by Hugh Daschbach-2
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,

> In the meantime, just to check that I'm on the right track, I've
> attached a failing test.  Sadly, it's more than 15 lines.  Feel free
> to test with it.

Thanks.

Reading the BlueZ D-Bus GATT API description, you seem to need only
basic types and arrays of basic types as properties. So I will start
adding arrays of basic types. Other, more complex compound types will
follow later.

> For the moment, I'll only forward failing tests.  Once the paperwork
> is finalized I'll send you whatever suite of tests I've managed to
> come up with by then.

Yep, much appreciated!

> Just for the record, I'm testing master currently at d08568e6e92.

master HEAD is always good, since I'm committing there. I haven't the
impression that we break anybody else; otherwise we would need an own
branch. I would notify if needs arise.

> Cheers,
> Hugh

Best regards, Michael.



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
Michael Albinus <[hidden email]> writes:

Hi Hugh,

> Reading the BlueZ D-Bus GATT API description, you seem to need only
> basic types and arrays of basic types as properties. So I will start
> adding arrays of basic types. Other, more complex compound types will
> follow later.

I have pushed my recent work to master. dbus-register-property,
dbus-get-property, dbus-get-all-properties and
dbus-get-all-managed-objects shall work now for your byte
array. dbus-set-property will follow tomorrow, as well as other compound
types but array.

>> For the moment, I'll only forward failing tests.  Once the paperwork
>> is finalized I'll send you whatever suite of tests I've managed to
>> come up with by then.
>
> Yep, much appreciated!

I had to modify your test a little bit, see appended. It passes now for
me. I have renamed it also to dbus-test05-register-property-types, so we
have all property tests under test05, which makes it more easy to select
these tests in batch.

Does it work for you?

>> Cheers,
>> Hugh

Best regards, Michael.


attachment0 (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Hugh Daschbach-2

Michael Albinus writes:

> Michael Albinus <[hidden email]> writes:
>
> I had to modify your test a little bit, see appended. It passes
> now for
> me. I have renamed it also to
> dbus-test05-register-property-types, so we
> have all property tests under test05, which makes it more easy
> to select
> these tests in batch.

Good.  I've not yet developed a good TDD perspective.  So I'm
likely to
trip over naming and test structure conventions.  I'll learn as we
go.
Thanks for the feedback.

> Does it work for you?

It does.  I've added a string array test without issue.  I'll add
a few
more and let you know if/when I come across another failure.

Many thanks.
Hugh



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Hugh Daschbach-2
In reply to this post by Michael Albinus

Michael Albinus writes:

> Michael Albinus <[hidden email]> writes:
>
> Hi Hugh,
>
>> Reading the BlueZ D-Bus GATT API description, you seem to need
>> only
>> basic types and arrays of basic types as properties. So I will
>> start
>> adding arrays of basic types. Other, more complex compound
>> types will
>> follow later.
That's mostly true.  There is another BlueZ interface
(advertising) that
take a byte keyed dictionary.  It isn't obvious from the
documentation
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/advertising-api.txt.
But the Manufacturer ID described mentioned in the
ManufacturerData
dictionary description is a byte value.

The property table in the BlueZ source code looks like:

        { "ManufacturerData", "a{qv}", get_manufacturer_data,
        NULL,
                                                manufacturer_data_exists
                                                },

(https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/client/advertising.c#n465)

It isn't clear that there's a commitment to support such a data
structure.  The DBus info page says "Every dictionary entry has a
string
as a key".


> I have pushed my recent work to master. dbus-register-property,
> dbus-get-property, dbus-get-all-properties and
> dbus-get-all-managed-objects shall work now for your byte
> array. dbus-set-property will follow tomorrow, as well as other
> compound
> types but array.
>

With your latest work, I have successful tests for byte arrays,
string
arrays, object arrays, boolean arrays, and string keyed
dictionaries.

I haven't been able to verify property signatures programatically.
I
have turned on dbus-debug and verified signatures reported by the
message formatter.  I assume introspection is in the queue.  With
introspection, we could extend the tests.

I assume I shouldn't care about tests that fail with debug turned
on.

WRT byte keyed dictionaries, I've attached a failing test.  I
don't know
if you want to look at it or not.

Still waiting for a response from [hidden email].  I assume a
delay of a
few days is to be expected.

Thanks again,
Hugh



dbus-tests-dictionary.patch (3K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
In reply to this post by Hugh Daschbach-2
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,

>> I had to modify your test a little bit, see appended. It passes now
>> for me. I have renamed it also to
>> dbus-test05-register-property-types, so we have all property tests
>> under test05, which makes it more easy to select these tests in
>> batch.
>
> Good.  I've not yet developed a good TDD perspective.  So I'm likely
> to trip over naming and test structure conventions.  I'll learn as we
> go.  Thanks for the feedback.

These conventions are rather mine, since I've written dbus-tests.el :-)

General conventions are not so many, see test/README.

> Many thanks.
> Hugh

Best regards, Michael.



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
In reply to this post by Hugh Daschbach-2
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,

> WRT byte keyed dictionaries, I've attached a failing test.  I don't
> know if you want to look at it or not.

The failing test includes some failures itself. I've fixed them (see
appended), now it passes w/o any change in dbus.el.

> Still waiting for a response from [hidden email].  I assume a delay of
> a few days is to be expected.

Yes, it takes time. When I ran through the process decades ago,
everything was done by snail mail to and from Europe, because you have
to sign legal papers physically. Now it seems to be possible to sign
electronically, but I don't know how it goes these days.

> Thanks again,
> Hugh

Best regards, Michael.


attachment0 (1K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
In reply to this post by Hugh Daschbach-2
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,

>>> Reading the BlueZ D-Bus GATT API description, you seem to need only
>>> basic types and arrays of basic types as properties. So I will start
>>> adding arrays of basic types. Other, more complex compound types
>>> will follow later.
>
> That's mostly true.  There is another BlueZ interface (advertising)
> that take a byte keyed dictionary.  It isn't obvious from the
> documentation
> https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/advertising-api.txt.
> But the Manufacturer ID described mentioned in the ManufacturerData
> dictionary description is a byte value.
>
> The property table in the BlueZ source code looks like:
>
> { "ManufacturerData", "a{qv}", get_manufacturer_data, NULL,
> manufacturer_data_exists
> },
>
> (https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/client/advertising.c#n465)
>
> It isn't clear that there's a commitment to support such a data
> structure.  The DBus info page says "Every dictionary entry has a
> string as a key".

Looks like this has been extended to "Every dictionary entry has a
basic type as a key".

Anyway, my today's commits shall support now all compound types for properties.

> I haven't been able to verify property signatures programatically. I
> have turned on dbus-debug and verified signatures reported by the
> message formatter.  I assume introspection is in the queue.  With
> introspection, we could extend the tests.

I'm no more convinced that introspection is the way to go. What if there
aren't introspection data?

Maybe one could run two processes in parallel to the tests:

--8<---------------cut here---------------start------------->8---
dbus-monitor --session "sender=org.gnu.Emacs.TestDBus"

dbus-monitor --session "destination=org.gnu.Emacs.TestDBus"
--8<---------------cut here---------------end--------------->8---

It shall be possible to analyze their structured output.

> I assume I shouldn't care about tests that fail with debug turned on.

Yes. However, dbus-debug on let's *all* dbus-error errors through, both
internal errors, and the ones arriving from incoming D-Bus error
messages. Sometimes, one wants to see the latter only. So I have added a
defcustom dbus-show-dbus-errors which allows to pass only the incoming
error messages. See the changed dbus-test05-register-property for examples.

> Thanks again,
> Hugh

Best regards, Michael.



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,

>> Anyway, my today's commits shall support now all compound types for
>> properties.
>
> Excellent.  Will try to submit tests for them.

I've just finished my work on dbus-set-property. It shall also keep the
type information of the registered property. Because of this, I've
changed the internal structure of dbus-event; for all arguments the
corresponding type information is propagated now.

You might test this. Given you confirm this functionality, I believe we
can close this bug report now.

>> Maybe one could run two processes in parallel to the tests:
>>
>> --8<---------------cut here---------------start------------->8---
>> dbus-monitor --session "sender=org.gnu.Emacs.TestDBus"
>>
>> dbus-monitor --session "destination=org.gnu.Emacs.TestDBus"
>> --8<---------------cut here---------------end--------------->8---
>>
>> It shall be possible to analyze their structured output.
>
> That idea has taken root.  It'll take me a few days to put together
> reviewable code.  But I've got a good start.

Now that we have type information in dbus-event, I'll start next days to
implement org.freedesktop.DBus.Monitoring.BecomeMonitor
<https://dbus.freedesktop.org/doc/dbus-specification.html#bus-messages-become-monitor>. If
this succeeds, we could implement a counterpart to the dbus-monitor
program in Elisp. And you would be able to access this information
programmatically, including all message and signal call / return
arguments and their types. Let's see.

> Paperwork arrived today.  Signed and submitted.  I expect it'll take a
> bit longer before it's administratively complete.

Good. I'll check the copyright.list file next days regularly, in order
to see whether your name appears. That is the indication that the legal
process has finished.

> More when I have some signature analysis code for your review. It's
> complicated enough to deserve its own tests.

Yep. But you could also wait for some few days, whether the
BecomeMonitor work leads to usable results.

> Cheers,
> Hugh

Best regards, Michael.



Reply | Threaded
Open this post in threaded view
|

bug#43252: 27.1; DBus properties lack type hints or overrides

Michael Albinus
Hugh Daschbach <[hidden email]> writes:

Hi Hugh,

>> Now that we have type information in dbus-event, I'll start next
>> days to
>> implement org.freedesktop.DBus.Monitoring.BecomeMonitor
>> <https://dbus.freedesktop.org/doc/dbus-specification.html#bus-messages-become-monitor>. If
>> this succeeds, we could implement a counterpart to the dbus-monitor
>> program in Elisp. And you would be able to access this information
>> programmatically, including all message and signal call / return
>> arguments and their types. Let's see.
>
> Excellent.  I can now parse the output of dbus-monitor.  But capturing
> asynchronous output and feeding it through an ah-hoc parser seems
> fragile.  Capturing type data directly as a monitor is much more
> robust.

Implementation is more complex than expected. Due to its nature,
org.freedesktop.DBus.Monitoring.BecomeMonitor requires another
(parallel) connection to the bus. This is not foreseen yet in dbusbind.c;
will see how it could fly.

What I could provide just now is an implementation which runs in
*another* Emacs instance. This could be used for monitoring only,
because it is another connection to the bus per definition. Are you
interested to get such a partial implementation?

> There's quite a bit of boiler plate in the property tests.  Do you
> have
> an issue with rolling that up in a macro?  Does it make test failure
> analysis more difficult?

No objection. But comments :-)

> Here's a candidate:
>
> (defmacro dbus-test05-test-property (name value expected)
>  `(let ((byte-array ,name))

I wouldn't call the variable "byte-array"; it could be anything during
test. Call it "property" or alike.

>    (should
>     (equal
>      (dbus-register-property
>       :session dbus--test-service dbus--test-path
>       dbus--test-interface ,name :read

I would use access type :readwrite. We want also to test dbus-set-property.

>       ,value)
>      `((:property :session ,,dbus--test-interface ,,name)
>        (,dbus--test-service ,,dbus--test-path))))

What are the double commas good for? Typos?

>    (should
>     (equal
>      (dbus-get-property
>       :session dbus--test-service dbus--test-path
>       dbus--test-interface ,name)
>      ,expected))
>
>    ;; a test for `dbus-get-property' shall be added.

That's my typo - dbus-set-property is meant. And yes, it shall also be
here. So you might need macro arguments value1 expected1 value2 expected2.

>    (let ((result
>           (dbus-get-all-properties
>            :session dbus--test-service dbus--test-path
>            dbus--test-interface)))
>     (should (equal (cdr (assoc ,name result)) ,expected)))
>
>    (let ((result
>           (dbus-get-all-managed-objects :session
>           dbus--test-service "/"))
>          result1)
>     (should (setq result1 (cadr (assoc dbus--test-path result))))
>     (should (setq result1 (cadr (assoc dbus--test-interface
>     result1))))
>     (should (equal (cdr (assoc ,name result1)) ,expected)))))
>
> With the calling sequence something like:
>
> (dbus-test05-test-property
> "bytearray"
> '(:array :byte 1 :byte 2 :byte 3)
> '(1 2 3))
>
> Opinion?

See above.

> Thanks,
> Hugh

Best regards, Michael.



12