新插件:calibredb.el 用 emacs 管理你的 ebooks(其实可以任何文件)

谢谢反馈,但是,暂时看不出问题,目测可能解析SQL结果方面还是有Bug,能运行一下:

(calibredb-candidate "2"),然后给我看看结果吗? @stardiviner

对了,你好像还是 Master 分支,你要切换 Develop 分支,之前我改了一些东西,Master 分支没有及时更新,因为又要审核Melpa,所以我最近的更新都在 Develop 分支,等 Melpa 上了之后,我才合并到 Master里面。

我切换到 develop branch 了。 配置如下:

(use-package calibredb
  :quelpa (calibredb :fetcher github :repo "chenyanming/calibredb.el" :branch "develop")
  :defer t
  :commands (calibredb-dispatch calibredb-list)
  :custom ((calibredb-root-dir (expand-file-name "~/Calibre Library"))))

运行结果:

Debugger entered--Lisp error: (wrong-number-of-arguments (0 . 0) 1)
  calibredb-candidates("2")
  eval((calibredb-candidates "2") t)
  eval-expression((calibredb-candidates "2") nil nil 127)
  funcall-interactively(eval-expression (calibredb-candidates "2") nil nil 127)
  call-interactively(eval-expression nil nil)
  command-execute(eval-expression)

我看了源代码,然后尝试 (calibredb-candidates) 还是一样的报错。应该是解析的问题。就像我上面截图里那个,line 变量的值是有的,但是edebug下一步就报错了。

由于现在 Melpa 审核通过了,我继续用 master 分支开发了,master 最新Commit 应该修复了这个问题,我不再用 \n 作为SQL换行,改成 \2 了。

更新测试了, (calibredb-candidates) 返回的是 nil.

感谢测试,但是我没有data复现不了,能把你的metadata.db发给我吗?或者如果太多的话,你可以新建一个新的metadata.db然后只放id 等于 2的书。。看你的图,好像就是id 等于2的有问题。

可以用以下配置吗?calibredb-db-dir 如果不配置的话,也有可能用了默认的值,导致读取不了数据库。

(require 'calibredb)
(setq sql-sqlite-program "/usr/bin/sqlite3")
(setq calibredb-root-dir "~/OneDrive/Doc/Calibre")
(setq calibredb-db-dir (expand-file-name "metadata.db" calibredb-root-dir))
(setq calibredb-program "/Applications/calibre.app/Contents/MacOS/calibredb")
(setq calibredb-library-alist '(("~/OneDrive/Doc/Calibre")
                                  ("/Users/damonchan/Documents/Books Library")
                                  ("/Users/damonchan/Documents/HELLO")
                                  ("/Users/damonchan/Documents/Books")
                                  ("/Users/damonchan/Documents/World")))

我的配置如下,我上面也贴过的。

(use-package calibredb
  :quelpa ((calibredb :fetcher github :repo "chenyanming/calibredb.el") :upgrade t)
  :defer t
  :commands (calibredb-dispatch calibredb-list)
  :custom ((calibredb-root-dir (expand-file-name "~/Calibre Library"))))

我上传了 metadata.db

https://send.firefox.com/download/b439d2834a2e1105/#hvr9zR-LVgP58M5P6uLHvQ

我在最基本的emacs上用了你的配置,貌似没有问题。

能贴你之前发的图的那本书的数据库吗?

另外不是 (calibredb-candidates "2") 而是 (calibredb-candidate "2"),没有s的。

我给你看一下我这边的调试过程和结果。(录了以下视频,比较方便你看)

https://send.firefox.com/download/4a0d6026655aec33/#4QUnx47hh0pmmtaIp_gAYA

歪个楼,好奇下,你用的这个firefox 很溜啊。有什么相关推荐介绍么?

我在 emacs -q 上测试,也是一样的问题。难道和系统平台有关系?我看你是macOS,而我这边是 Arch Linux

谢谢,但是,链接过期了,可以再发一次吗?

我用 ubuntu 16.04 spacemcs 下测试了,也没有问题。你是一本书都显示不了吗?你可以尝试只安装 calibredb,不添加任何配置项,然后 (require 'calibredb),最后使用 calibredb-switch-library 选择 library 吗?我在 Ubuntu 上,是可以的。

是的,我开发在 macOS 上。

可以的,我想不到这些人都去点了。。。。这个firefox send 有次数限制和时间限制的。我再发一次传到百度网盘吧

链接: https://pan.baidu.com/s/12BuCHxpcl37e4_GRa5y-pw 提取码: x4w7

1 个赞

录制了一个 emacs -q 的视频。

链接: https://pan.baidu.com/s/1J7tIHvR8lOOkib3sZ2mM-g 提取码: v749 复制这段内容后打开百度网盘手机App,操作更方便哦

1 个赞

谢谢你的视频,拍得很好,我看到问题了。我看了你的图片和视频发现,你系统的字符^A无法打印出来,但是 ^B 是可以打印出来的,请看下面的图(我在docker上跑arch linux,也是正常的),因为sqlite3要靠字符\1也就是^A 来代替了原本的|作为表格的separator,而\2则用来做 newline。因为找不到\1,所以 SQL 返回的字符串解析不了,返回nil。我不太清楚为什么你的emacs打印不了\1,但是,我现在默认用\3作为seperator,而且弄成了可配置项。

如果\3也不行的话,你可以试试别的字符串,例如 用一些很难出现的字符串,例如::::::::

(setq calibredb-sql-separator "::::::::") 另外,你也可以更新一下sqlite3

melpa可能还没那么快更新,你可以用最新的master commits再试试。

不知道为什么论坛上不了图,你可以我网上贴的图: https://imgur.com/a/6EtGcsw