成功Patch了非mac port的GNU Emacs显示retina分辨率PNG图片

其实非常容易,不知道为啥官方一直不肯支持。 这下舒服了。我一直不爱用mac port版本,因为感觉这个版本非常buggy。

3 个赞

厉害了!求patch file!

我觉得官方版本的才 buggy,开 Aqua 原生 Tab 必然闪退,Aquamacs 也有这个问题,只有 Mac port 完全没这个问题。

我从来不用tab,也不知道怎么用。 mac port版本的不支持原生全屏。

目前的代码比较hacky,等我慢慢搞个完善点的补丁直接提交上游

其实不光是png,原理上所有的格式都可以

Mac Port 支持原生全屏啊

toggle-frame-fullscreen以后,全屏的窗口不在独立的桌面上

这个就是 Tab。主要不是用不用的问題,而是不小心触发了就必然闪退很不爽。

支持啊,点 14 这个绿的就是啊。

https://www.emacswiki.org/emacs/FullScreen#toc26

至於为什麼你覚得不支持,大概是因為沒看 README

*   The `fullscreen' frame parameter, with all values supported:
    `fullboth', `fullwidth', `fullheight', and `maximized'.  The
    fullboth frames, which don't have the title bar, still allow us to
    access the menu bar, the Dock, and the tool bars.  The menu bar
    can also be activated via `menu-bar-open', `Control-F2' (if full
    keyboard access enabled), or `Command-Shift-/' (on Mac OS X 10.5
    and later) even for fullboth frames where the menu bar is usually
    hidden.  Changing fonts or internal-border-width in fullscreen
    frames does not clutter display.  On multiple monitor
    environments, one can move fullscreen frames to another monitor by
    setting the `left' and `top' frame parameters accordingly.
    Attaching/detaching external monitors should work even with
    fullscreen frames.

原生也支持全屏啊

from author of emacs-mac-port on Re: [AUCTeX] Embedded previews in high-DPI?

There is a reason that vanilla GNU Emacs does not have special support for PDFKit and/or Retina displays: it is a firm policy of Emacs in particular but also the GNU project generally that it should not provide incentives to prefer non-free platforms over free ones. So a feature is either provided also on free platforms, or not at all.

所以我觉得patch被merge的概率很低 不然YAMAMOTO Mitsuharu早就这么干了

所以还是求一发patch file​:rofl::rofl::rofl:

2 个赞

你说得对,按FSF的操行确实不太可能。我想稍等几天再放出patch,因为我现在的patch只能针对png,jpg等少数几种cocoa能直接加载的图像类型,但是我看了下代码觉得应该可以支持所有的imagemagick类型。

1 个赞

请问怎么用这个tab (就是好奇,我并不用)

我点了这个绿按钮以后窗口上下顶满了屏幕,宽度没变化。用toggle-frame-fullscreen命令以后全屏不在自己单独的桌面上。如果长按绿按钮试图用左右分割全屏的话,我试了一下直接把桌面弄锁死了,只能重启。

我刚试了下左右分屏正常了,绿色按钮全屏也没问题

Woc,为什么听你说的好像感觉用的完全不是同一个东西

我用的是这边的 GitHub - railwaycat/homebrew-emacsmacport: Emacs mac port formulae for the Homebrew package manager 直接下载或者用homebrew装都一样

1 个赞

你可以试试用 --HEAD 装 我用的HEAD版本没有全屏的问题

本来想搞一下imagemagick文件类型的,看了里面的实现以后实在懒得弄了,因为这里的代码效能简直低下到令人发指,难怪mac port的作者全部用imageio重做了。GNU Emacs的补丁在这里:

自己把PNG和JPG加到imagemagick-types-inhibit里,让这两种文件直接通过NSImage加载,反正我也只需要PNG就够了。 之前贴的elisp部分稍作修改,不必再检测mac port的函数:

(when (eq window-system 'ns)
  (defun mac-high-resolution-image-file-name (filename &optional scale)
    "Return the name of high-resolution image file for FILENAME.
     The optional arg SCALE is the scale factor, and defaults to 2."
    (let ((pos (or (string-match "\\.[^./]*\\'" filename) (length filename))))
      (format "%s@%dx%s" (substring filename 0 pos) (or scale 2)
              (substring filename pos))))
  (defun my-ob-ipython-write-base64-string-retina (oldfunc &rest args)
    (let ((file (car args)) (b64-string (cdr args)))
          (let ((file2x (mac-high-resolution-image-file-name file)))
            (apply oldfunc file2x b64-string)
            (shell-command (concat "convert " file2x " -resize 50% " file)))))
  (advice-add  'ob-ipython--write-base64-string :around
               #'my-ob-ipython-write-base64-string-retina))
1 个赞

效果就是加载文件时如果同目录下存在[email protected],就优先使用2x的版本。

我又试了下mac port。全屏按钮非常奇怪,刚启动时绿按钮里是一个加号,按下以后上下顶满,左右固定大小。但是如果我按一次F11(toggle-frame-fullscreen),就会进入所谓的full-both状态,再按一下恢复,但奇怪的是这时绿按钮不再是加号了,而是和其他程序一样的全屏图标,按下以后能进入真正的全屏模式。但是再恢复后就又是加号了。