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

org很强,是除了编程我用emacs的最大的吸引力,特别是babel提供了文学编程能力 但是是否能支持html页面嵌入显示呢,这样用python的plotly从org table中生成可以交互的报表html页面,嵌入到org文件中显示,就提供了强大的交互报表功能

另外,插入播放器播放视频也很重要。 不知道有没有接近这个目标的package, 或者EAF是否打算支持这个现代功能?

我觉得在org中生成链接就好, 链接的视频,html等点击或回车(或光标移入)在另一个buffer中播放就行(这样更好控制),没必要嵌入org-mode里面,这样会导致页面混乱.

懒猫大神有这个想法,不过要等他忙完

你可以试试把 HTML 渲染成图片展示。
至于视频,你可以渲染一帧作为预览,然后点击之后打开外部播放器。

1 个赞

临时的方案我也想过,比如org文档中添加报表静态图片,图片带链接,用xwidget browser在另一个buffer里面显示html页面,就可以互动。

不过org要是自己就能实现,就应该是最牛逼的文学编程产品了。

嵌入的话是不行的,但是你可以在另一个窗口里,或者 child frame 里显示一个 emacs 内置的浏览器 / eaf 贴片浏览器。

贴片这个词,用的贴切

XWidget 完全可以嵌入,我录了一个演示:

BadApple

当然,要真正写出一个包需要处理滚动,窗口大小变化等情况。

5 个赞

最无脑方案:emacs有gif支持,视频可以压成gif然后播放。

正经点可以搞一个module,给emacs加入libffmpeg支持(?

把播放器窗口贴在Emacs上面这种方式归根结底和在浏览器里播放没什么区别。弱气一点的,用emms控制播放器,强势一点的,用exwm控制外部窗口。

我以为,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 个赞