在 Emacs 工具提示中渲染 HTML?

render HTML in Emacs tooltip?

我想在 Emacs 工具提示中显示 HTML 粗体和斜体文本。我正在尝试的解决方案是这样的:

(let ((html "regular <b>bold</b> regular <i>italic</i> regular\n")
      (bufname "* render-html-tmp*"))
  (with-current-buffer (get-buffer-create bufname)
    (erase-buffer)
    (insert html)
    (shr-render-region (point-min) (point-max))
    (tooltip-show (buffer-string))))

* render-html-tmp* 缓冲区中,粗体和斜体文本显示正常,但在工具提示中,所有五个单词都是普通文本,没有粗体或斜体。更改 x-gtk-use-system-tooltips 的值无效。

同时,当我到达 * render-html-tmp* 缓冲区的末尾并在那里执行 (insert (buffer-string)),或者将缓冲区内容复制到 kill ring 中并将其猛拉到新缓冲区中时,粗体和斜体属性确实在插入或抽出的文本中正确显示。所以我的基本想法应该是正确的,我已经无计可施了,想弄清楚为什么我在工具提示中看不到这些属性。

这是怎么回事,如何使粗体和斜体文本显示在工具提示中?

tooltip-show 覆盖传入的字符串的面 属性 并用自己的 tooltip 替换它 属性:

      (x-show-tip (propertize text 'face 'tooltip)
              (selected-frame)
              params
              tooltip-hide-delay
              tooltip-x-offset
              tooltip-y-offset))
      ...

正如 OP 在评论中提到的那样,定义修改后的 tooltip-show 以将 text 直接传递给 x-show-tip 而不是执行 (propertize text ...) 并从他的代码中调用它解决问题。