org能否插入播放器,html页面么?

我以为,XWidget 的意义就在于它支持的是 HTML。

在 Emacs 中需要查看 HTML 的需求还是存在的,而你很难把一个网页压成一个视频。

1 个赞

我有点没看明白,字体都太小了… 效果很赞,不知道能不能再展开看看?

我的理解是,你用 XWidget 渲染了一段嵌入了 html 代码的 src block?

我实验成功了!

(defun org-xwidget-video (video-url &optional width height)
  "Inert video link or file address"
  (interactive "sURL or FILE address: ")
  (let* ((width (or width 640))
         (height (or height 360))
         (is-youtube (string-match "youtube\\.com/watch\\?v=\\([^&]*\\)" video-url))
         (youtube-id (if is-youtube (match-string 1 video-url) nil))
         (html-content 
          (if is-youtube
              ;; YouTube embed
              (format "<!DOCTYPE html>
<html lang=\"en\">
<head>
  <meta charset=\"UTF-8\">
  <meta name=\"viewport\" content=\"width=device-width\">
  <title>Video Player</title>
</head>
<body style=\"margin: 0; padding: 0;\">
  <iframe width=\"%d\" height=\"%d\" 
    src=\"https://www.youtube.com/embed/%s\" 
    frameborder=\"0\" allowfullscreen>
  </iframe>
</body>
</html>" width height youtube-id)
            ;; video file address
            (format "<!DOCTYPE html>
<html lang=\"en\">
<head>
  <meta charset=\"UTF-8\">
  <meta name=\"viewport\" content=\"width=device-width\">
  <title>Video Player</title>
</head>
<body style=\"margin: 0; padding: 0;\">
  <video width=\"%d\" height=\"%d\" controls>
    <source src=\"%s\" type=\"video/mp4\">
    Not Supported.
  </video>
</body>
</html>" width height video-url)))
         (temp-file (make-temp-file "emacs-video-" nil ".html")))
    
    ;; write html in a temp-file
    (with-temp-file temp-file
      (insert html-content))
    
    ;; create xwidget
    (let ((start-point (point)))
      (let ((object (xwidget-insert start-point 'webkit "Video Player" 
                     width height)))
        (xwidget-webkit-goto-uri object (concat "file://" temp-file))))))

3 个赞

你是对的

根据窗口尺寸调整大小的函数可以参考下面这个我给 WanderLust HTML MIME 写的函数(一个 XWidget Object 和上下少量文字的情况):

(defun xwidget-wl-window-adjust (frame)
  (walk-windows (lambda (window)
                  (with-current-buffer (window-buffer window)
                    (when (or (eq major-mode 'wl-message-mode)
                              (eq major-mode 'mime-view-mode))
                      (when-let* ((object (car (get-buffer-xwidgets (buffer-name))))
                                  (width (xwidget-window-inside-pixel-width window))
                                  (height (xwidget-wl-window-remnant window)))
                        (xwidget-resize object width height)))) 'none frame)))

(defun xwidget-wl-window-remnant (window)
  (when-let* ((object (next-single-property-change (point-min) 'display))
              (total (xwidget-window-inside-pixel-height window))
              (remnant 0))
    (save-excursion
      (goto-char (point-min))
      (while (< (point) object)
        (setq remnant (+ remnant (line-pixel-height)))
        (forward-line 1))
      (goto-char (+ object 2))
      (while (< (point) (point-max))
        (setq remnant (+ remnant (line-pixel-height)))
        (forward-line 1)))
    (- total (+ remnant 6))))

顺便,xwidget.el里的一些函数实现没有考虑 XWidget Object 和正文嵌入的情况,默认它在(point-min)

2 个赞

这个 r/org-mode 的版主真的让我感到无语

当时我就是被这位版主锁帖踢人,毕竟是人家的地盘,所以我已经很少在 r/org-mode 上玩了

我觉得 r/emacs 和 r/org-mode 的意识形态都很严重,不喜欢过于意识形态的氛围

1 个赞

https://www.reddit.com/r/emacs/comments/1j5nole/what_kind_of_community_do_we_want_to_be/

已经开始吵起来了

不耐烦看他们英语唠叨,我让人工智能帮我看了一下。可怕,1秒都不到,就帮我总结了

好的,我来帮你总结一下这个帖子里面的讨论内容:

这个帖子主要讨论的是 r/emacs 社区未来的发展方向以及对新晋版主的行为的担忧。发帖者认为,新版主似乎倾向于通过排除某些类型的用户来“提升”社区质量,例如新手、不熟悉技术术语的人,以及那些并非从小就接触技术的人。

主要争论点包括:

  • 社区包容性: 发帖者担心新版主的做法会排斥新手,使他们无处可寻帮助。他们提议是否应该创建一个专门面向新手的子版块(如 r/welcometoemacs),以便让 r/emacs 专注于更高级的讨论。
  • 版主的行为和态度: 发帖者引用了版主的一些言论,认为这些言论带有评判性、攻击性,并且营造了一种“我们 vs. 他们”的氛围。他们质疑版主是否有权决定谁是“真诚的”以及谁是不值得帮助的。
  • 社区文化: 发帖者担心版主的行为会影响整个社区的文化,使得社区变得不那么友好和包容。他们呼吁大家思考,这是否是社区希望成为的样子,以及是否愿意以这种方式进行互动。

发帖者主要表达了以下担忧:

  • 新版主的主观偏见可能会影响他们的管理决策。
  • 通过排除某些用户来提升社区质量的做法是不可取的。
  • r/emacs 社区应该保持包容性,为各种水平的用户提供帮助。

总而言之,这个帖子反映了 r/emacs 社区成员对于社区未来发展方向的担忧,以及对于新版主管理方式的质疑。他们希望确保 r/emacs 能够保持其包容性和友好性,而不是变成一个只为资深用户服务的精英社区。

1 个赞

我不研究emacs上的扩展开发,我只是从使用者的角度看待它, 把它当做我最主要的开发和文档工具。 我觉得emacs org能够插入音视频和网页(通过org-embd),将成为一个全功能的文档产品,超过word. 加上文学编程能力,这就是一个最伟大的产品。我还没有看到其他产品(无论开源还是商业,或者其他非Linux操作系统之上的)比他更强了。如果有,请大家告诉我

后面也就是如何更加完善,比如org文档的各方面性能优化(比如大表格的性能),展示的细节方面(比如更漂亮适合代替ppt)。

哦,基于 Xwidget 还是有局限性的,因为这个框架不支持 Windows。但我看 Emacs English 群上的开发者说,正在考虑移除 Xwidget 的 GTK 代码,这会令它变成全平台支持的东西。

且等且看吧。还有就是等懒猫大大的新框架我估计处理效率会很高(但对 Mac 支持不好)。

我觉得老外这种吵吵挺好的,有事不憋着,提供了合理的迭代机制

holo-layer 改改就可以支持.

原理很简单:

  1. org-mode 那边搞一些 overlay 做占位符
  2. holo-layer 全局画各种 WebEngine 的图层盖在 overlay 上面就好了

嗯,也是一个方式。我抽空看看怎么弄,最近的注意力被 MCP 吸引过去了,想在 Emacs 实现一个完善的 MCP 支持。

1 个赞

实践证明,holo-layer 应该是比较好方案,应该也是现代化富文本编辑器中比较通用的方案,Android 中对应是 ReplacementSpan , Mac OS X 中是 NSAttachment ,都是使用占位符提供一块绘制区域(attachment),然后 attachment 有自己独立的文本排版和渲染环境,从而可以在 Emacs 中实现各种现代化的功能,比如 table 和 src block 不换行,可左右滚动等。

不过如果完整实现起来工作量可能不小,我在使用 attachment 方案实现时 attachment 内部与全局的坐标转换,attachment 的动态解析和移除,局部更新等处理起来都比较耗时耗力

如果思路清晰, 直接上 Cursor 帮忙做坐标转换吧, 我主要不想用 org-mode (会很浪费我时间), holo-layer 应该会很快实现 org 展示 web 内容的功能。

也可以用这套方案在 Emacs 上实现一个现代化的 markdown mode.

org mode 浪费时间指的是什么?是配置比较麻烦吗?还是可折腾的东西太多?我最近也一直想转 markdown,用 markdown 的形,结合 org mode 的意来使用

我觉得 org-mode 用多了会浪费太多时间在配置Org和折腾Org上, 我现实生活中, 只需要PC和手机端创建任务、规划任务和同步任务。

我现在用 懒猫清单 非常高效。

反观 org-mode 我觉得太折腾, 而且只能用在PC端, 出差的时候非常不方便。