Looks like a bug (whether documentation or code) as read-kbd-macro
still claims to return a string if possible, but nowadays it forcibly returns a vector. Please M-x report-emacs-bug
to get that clarified.
You could extract a string of characters from the vector:
(mapconcat (lambda (event)
(and (characterp event)
(char-to-string event)))
(read-kbd-macro "C-c"))
But if you look at the code for read-kbd-macro
you’ll see that it calls this:
(defun edmacro-parse-keys (string &optional _need-vector)
(let ((result (kbd string)))
(if (stringp result)
(seq-into result 'vector)
result)))
Hence the string value you wanted is coming from kbd
:
(kbd "C-c") => "^C"
There are of course arguments you can pass to kbd
which won’t return a string, but that would always have been the case for your code, and presumably you’re not attempting to use any of those.
The author of the emacs pgtk code says that no one who has X installed should use pgtk – he’s stated on several occasions that if you have X at all then you should use a supported X toolkit in Emacs for best results.
I’ve seen counter-arguments that pgtk is still beneficial if you happen to have a “high DPI display”, but I believe that’s the only argument I’ve ever seen for using pgtk under X.
I always build
--with-x-toolkit=lucid
myself, and can happily vouch for that one. I don’t use Wayland, though.