aagain
2022 年12 月 25 日 15:39
7
DoomEmacs简单使用
建议在B站上看一下
Doom Emacs On Day One (Learn These Things FIRST!)这个教程
Emacs Doom Episode
另外可以看一下B站上有个码码要洗手的up主,录了一系列DoomEmacs教程
利用Emacs --daemon 加快启动速度。
装完doomemacs最好在系统里面配置一下开机自动启动Emacs server,
以我的Ubuntu为例子,在Showapplication里面搜索Startup Applications,然后添加一个开机自动启动
/usr/local/bin/emacs --daemon
然后在.zshrc 或者是.bashrc中建立一个别名
alias emacs="emacsclient -c -a 'emacs'"
这样在终端中输入emacs, 就相当于打开一个emacsclient, 速度相当快,基本是秒开。
如果需要桌面端,利用下面的命令
sudo find / -iname emacs.desktop
找到emacs.desktop, 一般在/usr/local/share/applications/emacs.desktop.
进入这个目录,把emacs.desktop复制一份
sudo cp emacs.desktop emacsclient.desktop
然后用vim或者其他文本编辑器打开emacsclient.desktop. 改一下Name=Emacsclient, 并且
把
Exec=emacs %F这一行改成
Exec=/usr/local/bin/emacsclient -c -a 'emacs' %F
保存以后,你就能在桌面图标中找到emacsclient。这样就能够方便用鼠标启动emacsclient了。
Doomemacs 简单使用
SPC w v 左右分屏
SPC w c 关闭当前窗口
C-x k or SPC b k关闭当前buffer
SPC . 查找文件
calibre可以导出catalog,就是bib文件。用calibredb就可以。
1 个赞
aagain
2022 年12 月 27 日 15:14
10
* zotero 安装和使用
zotero的安装比较简单,直接去官网下载相应的安装程序就好。
zotero和emacs配合使用有两种方法:
** 安装和使用zotxt 插件
如果使用emacs和zotero只是为了插入引文的话,使用zotxt插件是最好。
;; [[file:packages.org::*Zotero][Zotero:1]]
(package! zotxt)
;; Zotero:1 ends here
打开zotero,保证软件处于运行状态。 然后在编辑org文档时运行 M-x org-zotxt-mode 打开zotxt模式。 在需要插入文献的地方用快捷键 C-c “ i 就可以检索zotero文献库并插入条目了。
如果想插入pandoc markdown格式的引文,可以用M-x zotxt-citekey-mode,再C-c “ k 就可以插入citekey 了,非常方便。
** 使用zotero的Better BibTeX插件
可能大部分人会选择这种方式,然后在emacs端口使用Citar, org-ref, org-roam-bibtex 插件配合使用。
在zotero端,安装插件Better BibTeX.
然后在zotero软件的配置里面,选择Better BibTeX配置一下,B站有相关教程
然后在选择zotero软件,对你想导出的文献库目录点右键,选择导出文献库(Export Library),选择better bibTeX或者better bibLatex格式,选择你的目标目录就行。记得勾上Keep updated选项,这样zotero数据库改变后会自动同步。
这里有个注意点,如果你导出后希望能够在emacs端直接能够打开PDF文件,需要包括file选项。默认在better BibTeX中有个地方可以输入你不想导出的项目。
另外一个注意点是,如果你想导出note, 那么大概率,你在emacs中打开bib数据库时候,会出现"unbalanced parenthesis , 23323,123424"错误。对于这个错误刚开始我以为是我的配置文件出了问题,为此重装了emacs不下4次。结果偶然在helm-bibtex的网上,找到了答案, 对于Emacs不熟悉的小白,真的是一个小小的问题都会是不可逾越的障碍。
真正原因是导出的bib文件出了问题。
这个主要是因为你的zotero可能收集了网页的资料,zotero在抓取网页时候,会把网页内容存在note里面。如果你导出bib时候选择导出了note, 那么有一定概率因为网页中过多的字符和括号,导致大括号不匹配。
解决方法:你可以用emacs打开你的bib文件,找到不匹配的项目:
emacs中输入
M-: (goto char xxx)
比如在你的这个例子中, xxx就是你的报错数字23323, 。然后emacs会自动定位到不匹配的括号。
然后找到这个条目的的最后,在这个条目的最后加上几个},一旦匹配上,你的报错数字就会消失(一般都是note部分出了问题,在note项后加上}就行,根据我测试,多几个}好像不会有问题)。
如果报错数字出现变化,那是因为还有其他条目也有错误,继续上面的操作,直到所有报错消失就可以了。
另外导出bib时候可以不要导出note项目,可能会避免上述问题。
** 在emacs端的配置
主要是要告诉emacs你导出的bib文件在那里?
把下面的文件路径改成你自己的路径就可以了。
(setq org-cite-csl-styles-dir "~/Zotero/styles")
(setq! bibtex-completion-bibliography '("~/Documents/org/roam/biblibrary/references.bib"))
(setq! citar-bibliography '("~/Documents/org/roam/biblibrary/references.bib"))
(setq! bibtex-completion-library-path '("~/Documents/org/roam/biblibrary/")
bibtex-completion-notes-path "~/Documents/org/roam/")
(setq! citar-library-paths '("~/Documents/org/roam/biblibrary/")
citar-notes-paths '("~/Documents/org/roam/"))
(after! pdf-view
;; open pdfs scaled to fit page
(setq-default pdf-view-display-size 'fit-width)
(add-hook! 'pdf-view-mode-hook (evil-colemak-basics-mode -1))
;; automatically annotate highlights
(setq pdf-annot-activate-created-annotations t
pdf-view-resize-factor 1.1)
;; faster motion
(map!
:map pdf-view-mode-map
:n "g g" #'pdf-view-first-page
:n "G" #'pdf-view-last-page
:n "N" #'pdf-view-next-page-command
:n "E" #'pdf-view-previous-page-command
:n "e" #'evil-collection-pdf-view-previous-line-or-previous-page
:n "n" #'evil-collection-pdf-view-next-line-or-next-page
:localleader
(:prefix "o"
(:prefix "n"
:desc "Insert" "i" 'org-noter-insert-note
))
))
;; (after! PACKAGE
;; (setq x y))
(after! org-ref
(setq
bibtex-completion-notes-path "~/Documents/org/roam/"
bibtex-completion-bibliography "~/Documents/org/roam/biblibrary/references.bib"
bibtex-completion-pdf-field "file"
bibtex-completion-notes-template-multiple-files
(concat
"#+TITLE: ${title}\n"
"#+ROAM_KEY: cite:${=key=}\n"
"* TODO Notes\n"
":PROPERTIES:\n"
":Custom_ID: ${=key=}\n"
":NOTER_DOCUMENT: %(orb-process-file-field \"${=key=}\")\n"
":AUTHOR: ${author-abbrev}\n"
":JOURNAL: ${journaltitle}\n"
":DATE: ${date}\n"
":YEAR: ${year}\n"
":DOI: ${doi}\n"
":URL: ${url}\n"
":END:\n\n"
)
))
(use-package! org-ref
:config
(setq
org-ref-completion-library 'org-ref-ivy-cite
org-ref-get-pdf-filename-function 'org-ref-get-pdf-filename-helm-bibtex
org-ref-default-bibliography (list "~/Documents/org/roam/biblibrary/references.bib")
org-ref-bibliography-notes "~/Documents/org/roam/bibnotes.org"
org-ref-note-title-format "* TODO %y - %t\n :PROPERTIES:\n :Custom_ID: %k\n :NOTER_DOCUMENT: %F\n :ROAM_KEY: cite:%k\n :AUTHOR: %9a\n :JOURNAL: %j\n :YEAR: %y\n :VOLUME: %v\n :PAGES: %p\n :DOI: %D\n :URL: %U\n :END:\n\n"
org-ref-notes-directory "~/Documents/org/roam/"
org-ref-notes-function 'orb-edit-notes
))
(use-package! org-roam-bibtex
:after (org-roam)
:hook (org-roam-mode . org-roam-bibtex-mode)
:config
(setq org-roam-bibtex-preformat-keywords
'("=key=" "title" "url" "file" "author-or-editor" "keywords"))
(setq orb-templates
'(("r" "ref" plain (function org-roam-capture--get-point)
""
:file-name "${slug}"
:head "#+TITLE: ${=key=}: ${title}\n#+ROAM_KEY: ${ref}
- tags ::
- keywords :: ${keywords}
\n* ${title}\n :PROPERTIES:\n :Custom_ID: ${=key=}\n :URL: ${url}\n :AUTHOR: ${author-or-editor}\n :NOTER_DOCUMENT: %(orb-process-file-field \"${=key=}\")\n :NOTER_PAGE: \n :END:\n\n"
:unnarrowed t))))
(after! helm
;; I want backspace to go up a level, like ivy
(add-hook! 'helm-find-files-after-init-hook
(map! :map helm-find-files-map
"<DEL>" #'helm-find-files-up-one-level)))
;; Actually start using templates
(after! org-capture
;; Firefox
(add-to-list 'org-capture-templates
'("P" "Protocol" entry
(file+headline +org-capture-notes-file "Inbox")
"* %^{Title}\nSource: %u, %c\n #+BEGIN_QUOTE\n%i\n#+END_QUOTE\n\n\n%?"
:prepend t
:kill-buffer t))
(add-to-list 'org-capture-templates
'("L" "Protocol Link" entry
(file+headline +org-capture-notes-file "Inbox")
"* %? [[%:link][%(transform-square-brackets-to-round-ones \"%:description\")]]\n"
:prepend t
:kill-buffer t))
;; Misc
(add-to-list 'org-capture-templates
'("a" ; key
"Article" ; name
entry ; type
(file+headline +org-capture-notes-file "Article") ; target
"* %^{Title} %(org-set-tags) :article: \n:PROPERTIES:\n:Created: %U\n:Linked: %a\n:END:\n%i\nBrief description:\n%?" ; template
:prepend t ; properties
:empty-lines 1 ; properties
:created t ; properties
))
)
(use-package! org-protocol-capture-html
:after org-protocol
:config
(add-to-list 'org-capture-templates
'("w"
"Web site"
entry
(file+headline +org-capture-notes-file "Website") ; target
"* %a :website:\n\n%U %?\n\n%:initial")
)
)
不要问我为啥这么配置,我完全不知道,只是从别人那里copy过来而已。上面文件途径的地方,改成你自己的路径名就行。这些配置是基于Doom Emacs, 放在config.el里面就行。
* 中英文混打:OS输入法管理包 smart-input-source
由于经常要混合输入中英文,尤其使用的是evil模式。默认的输入分切换会非常不方便。参见(重新设计)中英文混打:OS输入法管理包 smart-input-source - #198,来自 goumao , 这个帖子安装sis包。会记忆你在输入模式的输入法,一旦ESC到normal模式则会自动切换到英文输入法,非常方便。
Doom emacs中安装的话, 在packages.el,写入下面代码。
(package! sis)
在config.el中写入,下面代码。我这里是Ubuntu linux系统,使用的是fcitx5输入法.
(use-package! sis
;; :hook
;; enable the /context/ and /inline region/ mode for specific buffers
;; (((text-mode prog-mode) . sis-context-mode)
;; ((text-mode prog-mode) . sis-inline-mode))
:config
;; For MacOS
;; (sis-ism-lazyman-config
;; ;; English input source may be: "ABC", "US" or another one.
;; ;; "com.apple.keylayout.ABC"
;; "com.apple.keylayout.US"
;; ;; Other language input source: "rime", "sogou" or another one.
;; ;; "im.rime.inputmethod.Squirrel.Rime"
;; "com.sogou.inputmethod.sogou.pinyin")
(sis-ism-lazyman-config "1" "2" 'fcitx5)
;; enable the /cursor color/ mode
(sis-global-cursor-color-mode t)
;; enable the /respect/ mode
(sis-global-respect-mode t)
;; enable the /context/ mode for all buffers
(sis-global-context-mode t)
;; enable the /inline english/ mode for all buffers
(sis-global-inline-mode t)
)
然后使用doom sync 安装就行。
安装注意:如果你使用了前面emacs --daemon. 需要重启一下系统,否则emacs会报错,找不到sis。
1 个赞
* EAF-pdf-viewer
由于使用Emacs主要是为了org mode管理日常 和org roam来记录笔记。阅读文献和电子书是必不可少的。目前Emacs内置的DocView需要把PDF转换为图片格式,运行非常缓慢。另外主流的就是PDF tools,这个package已经内置在Doom emacs中。可以直接通过init.el配置安装。功能还可以,但是运行的时候,发现还是有点卡顿。在知乎上看到一个大侠Jousimies(好像也在本站,不知道是否同一人,写了很多关于Emacs工作流的文章,是一个很热心的大侠),介绍了eaf-pdf-viewer,他非常推荐这个pdf浏览器。结果我在度娘和谷哥上一搜索,发现几乎没有什么关于这个浏览器的教程,仅在油管上发现了作者的一段介绍视频。尝试安装了几次,遇到一些问题。最后终于能够运行,打开pdf文件确实非常快。
** 安装
eaf-pdf-viewer安装分成2部分。第一部分要先安装EAF框架,然后安装pdf-viewer。在EAF框架下,有很多有意思的应用,有兴趣的可以去看看。由于框架和应用是分开的,如果安装时候仅注意应用的说明,会有问题。一些应用的注意事项实际在EAF框架的Github的faq里面。
EAF 框架安装
关于EAF的框架安装,建议看一下Github上的说明。有中文格式,虽然简略,至少没有语言障碍。 emacs-application-framework/README.zh-CN.md at master · emacs-eaf/emacs-application-framework · GitHub
安装方法做的非常贴心,基本照着说明,clone下来后,运行install-eaf.py, 就会自动安装EAF框架需要的包插件什么的,非常方便。在安装的时候,你就可以选择EAF下面的应用。
不方便的地方是:各个应用的使用方法介绍非常简略。因为我用的是Doom
Emacs, 和普通的emacs在安装包的时候,略有不同。所以一开始很是困惑,不知道应该如何配置。安装成功后又发现默认的快捷键不能使用,最后在EAF的faq里面发现,如果使用evil模式的话,需要特殊配置一下。
(add-to-list 'load-path "~/.emacs.d/site-lisp/emacs-application-framework/")
(require 'eaf)
(require 'eaf-markdown-previewer)
(require 'eaf-rss-reader)
(require 'eaf-pdf-viewer)
(require 'eaf-image-viewer)
(require 'eaf-browser)
(require 'eaf-org-previewer)
(require 'eaf-mindmap)
(require 'eaf-org)
(defun eaf-org-open-file (file &optional link)
"An wrapper function on `eaf-open'."
(eaf-open file))
;;请使用 M-x eaf-org-export-to-pdf-and-open
;; use `emacs-application-framework' to open PDF file: link
(add-to-list 'org-file-apps '("\\.pdf\\'" . eaf-org-open-file))
(require 'eaf-evil)
;; eaf会把C-SPC当成evil的leader-key,在你加载'eaf-evil之后使用eaf时就需要在eaf中键入C-SPC使用evil leader下的键。
;; 我们只需要将这个键设置为 SPC或你自己的evil-leader-key即可
(setq eaf-evil-leader-key "SPC")
;; (add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex --synctex=1%(mode)%' %t" TeX-run-TeX nil t))
;; (add-to-list 'TeX-view-program-list '("eaf" eaf-pdf-synctex-forward-view))
;; (add-to-list 'TeX-view-program-selection '(output-pdf "eaf"))
本来doom emacs中的配置都会在(use-package!)下面整齐排列,但是经过我反复尝试,发现只有这样放在我的config.el中,才能正常使用eaf。而且在安装时候必须要把eaf-evil这一项,放在所有的eaf应用后面,否则会出现找不到配置文件的错误。
如果哪位大虾能够帮忙告知一下在doom emacs下如何优雅的配置eaf框架,帮忙告知一下,不胜感激。
另外我这样安装后,如果用emacs(gui)运行,则正常。如果是用emacs --daemon然后用emacs client运行的话,就会出现下述报错,但是目前并不影响运行。原因不明。
dbus-call-method: D-Bus error: "org.freedesktop.DBus.Error.UnknownMethod", "Object does not exist at path “/org/eaf/wayland”"
1 个赞
顺便翻译一下eaf-pdf-viewer的readme. 主要是为了自我学习。
奇怪这个emacs-china的网站,但是却不支持org格式的文件。
eaf-pdf-viewer
*** 加载pdf-viewer应用 (Load application)
首先安装EAF框架,然后把下面的代码放到你自己的emacs配置config中:
(add-to-list 'load-path "~/.emacs.d/site-lisp/emacs-application-framework/")
(require 'eaf)
(require 'eaf-pdf-viewer)
*** LaTeX配置(LaTeX config)(似乎这个eaf-pdf-viwer可以作为latex的实时双向浏览器,也就是你编译latex代码时候,可以实时预览生成的pdf,而且在pdf中双击可以实时回到代码进行编辑,如果真是这样,对于编译latex将会非常方便。)
(add-to-list 'TeX-command-list '("XeLaTeX" "%`xelatex --synctex=1%(mode)%' %t" TeX-run-TeX nil t))
(add-to-list 'TeX-view-program-list '("eaf" eaf-pdf-synctex-forward-view))
(add-to-list 'TeX-view-program-selection '(output-pdf "eaf"))
双击鼠标左键,可以回到相应代码进行编辑。
*** 深色背景模式 (Dark mode)
默认是和你的emacs背景颜色(emacs-background-color)相同。
如果不喜欢这个默认设定,可以通过下面的代码修改。
(setq eaf-pdf-dark-mode nil)
因为这个网站似乎不支持org 表格格式,只能上传个图了。
j
1 个赞
感谢,其实最初我的emacs配置了更沙黑体。但是因为改成用了doom, 现在还没改过来。
您用EAF吗?
我发现打开pdf后,再用快捷键o打开大纲模式后,不能用大纲来切换pdf页面,有点反人类。
evil模式看wiki
按键自己绑定就好了
org和pdf交互用 eaf-interleave.el
1 个赞
大佬, 关于 eaf-interleave.el 我有个问题, eaf-interleave-add-note 这是不是个 bug, org-back-to-heading 并没有跳转到那个 entry 下, 而是当前 point 所在的 entry 下. 这是我丑陋的修改.
(let ((property-list (org-map-entries (lambda ()
(let ((url (org-entry-get-with-inheritance eaf-interleave--url-prop))
(page (org-entry-get-with-inheritance eaf-interleave--page-note-prop)))
- (cons url page)))))
+ (list url (org-entry-beginning-position) page)))))
point)
(catch 'find-property
(dolist (property property-list)
(when (and (string= (car property) url)
- (string= (cdr property) (number-to-string page)))
+ (string= (nth 2 property) (number-to-string page)))
(widen)
- (org-back-to-heading t)
+ (goto-char (nth 1 property))
+ (org-back-to-heading)
(eaf-interleave--narrow-to-subtree)
(org-show-subtree)
(org-cycle-hide-drawers t)
但我怀疑是不是我对用法理解有误.
还想问是不是 eaf-interleave.el 不止适用于 pdf 也适用于网页?
这个是社区开发者开发的功能,我平常很少用,欢迎发送补丁