从今天开始,Emacs里面可以运行任何你想要的程序 (Linux & Windows & Mac & BSD)

在使用exec-path-from-shell这个包的情况一样无法找到 在eaf.py的main方法中添加

print(os.environ.keys)

输出结果中并没有PATH这个环境变量

KeysView(environ({'DISPLAY': 'CXBs-MacBook-Pro.local', '__CF_USER_TEXT_ENCODING': '0x1F5:0x0:0x0', 'LC_CTYPE': 'UTF-8'}))

看看论坛回复框第一条。

今天细致的调整了 EAF PDF Viewer 的颜色模式:

  1. Follow 时, 跟着用户的背景色走, 同时反色模式开启时, 暗色主背景是白色, 亮色主题背景是黑色
  2. Force 时, 暗色主题跟随主题背景色, 亮色主题背景是白色, 不能反色
  3. Ignore 时, 只有白底黑字, 不能反色

因为 mupdf 的限制, PDF页面前景色只有白色或黑色并由get_inverted_mode控制的, get_render_foreground_color 只能控制右下角进度字体的颜色。

这个颜色逻辑应该是没有bug的版本, 同时最符合用户心智。

2 个赞

修复了 EAF PDF 退出演讲模式后, 无法恢复进入演讲模式之前的缩放比例。

同时演讲模式进入后会自动全屏展示, 以隐藏 Emacs minibuffer/header-line 的干扰。

1 个赞

修复了EAF PDF Viewer换页时, Y坐标抖动的问题。

原来的方式是取得页面索引再乘以页面高度去计算渲染偏移, 会因为取整丢失小数点数据, 导致换页时Y坐标渲染抖动。

新的方式是不计算页面索引, 直接全局坐标来偏移, 没有取整的过程就不会导致精度丢失引起的抖动问题。

日常用 EAF PDF Viewer 的同学建议更新一下。

3 个赞

更新后显示变虚了。

更新后的效果。

更新前的效果。

论坛上需要点开图片看大图。

PDF 文件发给我下?

我这边没有重现你的问题。

估计跟我最近把 HiDPI 相关代码删除有关(因为我发现我的系统 hidpi_scale_factor 的值是 1.0, 读了Qt6的文档说不需要手动缩放后删除了)。

看来还是要加回来:

你再更新看看?

EAF 从 PyQt 6.3.1 升级到 PyQt 6.4.0 , 更新EAF的同学先把你系统的 Qt 6.4 (注意不是 PyQt 6.4) 升级后再升级 EAF

EAF 最先用的是 EasyOCR 来识别 EAF 窗口中的文字, 特别在看影印版的 PDF 文档时特别有用, 记录笔记不用一个字一个字的敲, 极大的提高了阅读的效率。

但是 EasyOCR 的识别速度和识别准确率不如 PaddleOCR, 最近在看《费曼物理学讲义》, 文档中经常有一些下划线标注重点的地方 EasyOCR 就会识别错, 而 PaddleOCR 在这种情况下也能正确识别。

但是 PaddleOCR 的依赖非常多, 安装一次不容易, 下面是快速安装 PaddleOCR 的命令:

sudo pip3 uninstall opencv-python
sudo pip3 install opencv-python==4.5.5.64

sudo pip3 uninstall packaging
sudo pip3 install packaging=21.3

sudo pip3 install common dual tight data prox paddle paddlepaddle paddleocr

安装指定版本的 opencv-python 是解决 AttributeError: module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline' 的错误, 安装指定版本的 packaging 是解决 cannot import 'LegacyVersion' from 'packaging.version site-packages/packaging/version.py 的错误。

安装好 PaddleOCR 后, 更新到最新版本的 EAF, 打开 PDF 文件, 按 z 快捷键, 等几秒钟就可以从 Emacs 粘贴板中粘贴识文字。

1 个赞

在 EAF 中设定必须使用 Python3:

(defcustom eaf-python-command (if (memq system-type '(cygwin windows-nt ms-dos)) "python.exe" "python3")
  "The Python interpreter used to run eaf.py."
  :type 'string)
eaf-internal-process-prog is a variable defined in `eaf.el'.
Its value is "python3"

所以我安装所有关于 EAF 的依赖都是用的 Python3:

python3 -m pip install paddleocr

我电脑上环境有默认的 Python:

➜ which python
/usr/local/bin/python

Python 2.7.17 (default, Jan 24 2022, 04:01:11)

也有 Python3:

➜ which python3
/usr/local/bin/python3

Python 3.10.8 (main, Oct 13 2022, 10:19:13) [Clang 12.0.0 (clang-1200.0.32.29)] on darwin

我发现 EAF OCR 的代码是 hard code 成 Python:

            command_string = "python paddle_ocr.py {}".format(self.image_path)

这样程序跑起来是调用的默认的 Python,而不是我安装了 paddleocr 的 Python3。

所以我发现无法 OCR,EAF 报错:

Traceback (most recent call last):
  File "/Users/c/emacs-config/default/elpa/28.2/develop/eaf-20221219.114034/eaf.py", line 554, in run
    string = process.stdout.readlines()[-1]    # type: ignore
IndexError: list index out of range
Traceback (most recent call last):
  File "/Users/c/emacs-config/default/elpa/28.2/develop/eaf-20221219.114034/eaf.py", line 554, in run
    string = process.stdout.readlines()[-1]    # type: ignore
IndexError: list index out of range


需求

不能像 (setq eaf-internal-process-prog eaf-python-command) 这样不要 hard code command_string 吗?

最好是 command_string 中的 Python 和 EAF 指定的 eaf-python-command 一致。

欢迎PR, 今天只是验证API

上午新冠发烧了, 才醒来写了一个补丁 Use eaf-python-command instead hard code. · emacs-eaf/emacs-application-framework@0b0c4e0 · GitHub

应该可以了。

感谢大佬,刚想写 PR。辛苦了。

对于想要使用 PaddleOCR 的人注意 Python pip 依赖 Numpy 使用了 1.24.0 版本的话,目前会出现错误,无法 OCR,paddleocr 本身会抛出如下错误,我在自己的终端上测试:

AttributeError: module 'numpy' has no attribute 'int'. Did you mean: 'inf'?

将 Numpy 回退到 1.23.3 就可以正常使用:

python3 -m pip install numpy==1.23.3

写出来,为后续者避坑做个提醒。

1 个赞

发现大佬新增的 OCR 功能很方便的就可以移植到 eaf-image-viewer 中。

在 eaf-image-viewer 的 buffer.py 文件中增加:

from eaf import OCRThread
from core.utils import PostGui, interactive, message_to_emacs

class AppBuffer(BrowserBuffer):
    ....

    @PostGui
    def ocr_buffer(self, buffer_id):
        thread = OCRThread(self.url)
        thread.start()

为 eaf-image-viewer 分配快捷键 z:

    (eaf-bind-key eaf-ocr-buffer "z" eaf-image-viewer-keybinding)

这样就能获得和 eaf-pdf 一样的体验,浏览图片需要提取图片中的文字时,使用快捷键 z。

本地测试通过。

问题

  1. 大佬可以增加这样的功能吗?
  2. 通用 OCRThread 代码放在 eaf.py 中合适吗?我发现使用了 view_dict,这个变量在 eaf-image-viewer 中看不到?所以没有验证 buffer_id。
  3. PostGui 装饰器作用我看不懂,eaf-image-viewer 需要吗?

这个本身就是全局的,你只用在图片阅读器里面的el文件增加一个快捷键就好了呀,不需要在每个EAF应用都写一份代码。

写到eaf.py的目的就是全局可用,同理网页,新闻阅读器都可以这样玩啊。

好的,我明白了,原来每个 buffer 自带 grab 抓屏功能,源码我之前没仔细看明白。还以为要特地传入图片的地址。原来是只要 EAF 能显示的,都能 OCR。:+1:

更新了 eaf pdf app,发现页面跳转不准确。 输入跳转 33 页,右下角显示实际上跳转31。

使用 eaf-pdf 预览 pdfgrep 的结果也是有偏移。搜索出来的页数 33 结果传给 eaf-pdf,右下角进度是跳到 31,需要手动滚动到 33 页才能看到搜索的关键字。

先提issue吧,最近几天发烧头疼,没精力看代码了。

有人用EAF把 VSCode 跑在Emacs中: https://www.reddit.com/r/emacs/comments/zmmhmf/running_vscode_inside_emacs/