org很强,是除了编程我用emacs的最大的吸引力,特别是babel提供了文学编程能力 但是是否能支持html页面嵌入显示呢,这样用python的plotly从org table中生成可以交互的报表html页面,嵌入到org文件中显示,就提供了强大的交互报表功能
另外,插入播放器播放视频也很重要。 不知道有没有接近这个目标的package, 或者EAF是否打算支持这个现代功能?
org很强,是除了编程我用emacs的最大的吸引力,特别是babel提供了文学编程能力 但是是否能支持html页面嵌入显示呢,这样用python的plotly从org table中生成可以交互的报表html页面,嵌入到org文件中显示,就提供了强大的交互报表功能
另外,插入播放器播放视频也很重要。 不知道有没有接近这个目标的package, 或者EAF是否打算支持这个现代功能?
我觉得在org中生成链接就好, 链接的视频,html等点击或回车(或光标移入)在另一个buffer中播放就行(这样更好控制),没必要嵌入org-mode里面,这样会导致页面混乱.
懒猫大神有这个想法,不过要等他忙完
你可以试试把 HTML 渲染成图片展示。
至于视频,你可以渲染一帧作为预览,然后点击之后打开外部播放器。
临时的方案我也想过,比如org文档中添加报表静态图片,图片带链接,用xwidget browser在另一个buffer里面显示html页面,就可以互动。
不过org要是自己就能实现,就应该是最牛逼的文学编程产品了。
嵌入的话是不行的,但是你可以在另一个窗口里,或者 child frame 里显示一个 emacs 内置的浏览器 / eaf 贴片浏览器。
贴片这个词,用的贴切
XWidget 完全可以嵌入,我录了一个演示:
当然,要真正写出一个包需要处理滚动,窗口大小变化等情况。
最无脑方案:emacs有gif支持,视频可以压成gif然后播放。
正经点可以搞一个module,给emacs加入libffmpeg支持(?
把播放器窗口贴在Emacs上面这种方式归根结底和在浏览器里播放没什么区别。弱气一点的,用emms控制播放器,强势一点的,用exwm控制外部窗口。
我以为,XWidget 的意义就在于它支持的是 HTML。
在 Emacs 中需要查看 HTML 的需求还是存在的,而你很难把一个网页压成一个视频。
我有点没看明白,字体都太小了… 效果很赞,不知道能不能再展开看看?
我的理解是,你用 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))))))
你是对的
根据窗口尺寸调整大小的函数可以参考下面这个我给 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)
。
当时我就是被这位版主锁帖踢人,毕竟是人家的地盘,所以我已经很少在 r/org-mode 上玩了
我觉得 r/emacs 和 r/org-mode 的意识形态都很严重,不喜欢过于意识形态的氛围
不耐烦看他们英语唠叨,我让人工智能帮我看了一下。可怕,1秒都不到,就帮我总结了
好的,我来帮你总结一下这个帖子里面的讨论内容:
这个帖子主要讨论的是 r/emacs 社区未来的发展方向以及对新晋版主的行为的担忧。发帖者认为,新版主似乎倾向于通过排除某些类型的用户来“提升”社区质量,例如新手、不熟悉技术术语的人,以及那些并非从小就接触技术的人。
主要争论点包括:
发帖者主要表达了以下担忧:
总而言之,这个帖子反映了 r/emacs 社区成员对于社区未来发展方向的担忧,以及对于新版主管理方式的质疑。他们希望确保 r/emacs 能够保持其包容性和友好性,而不是变成一个只为资深用户服务的精英社区。