221203

目录

1. 配置emacs

1.1. 配置 evil 插入模式快捷键

参照论坛大佬配置: 参考链接: evil 键绑定调整

(defun maple/define-key (keymap key def &rest bindings)
  "Define multi keybind with KEYMAP KEY DEF BINDINGS."
  (interactive)
  (while key
    (define-key keymap key def)
    (setq key (pop bindings)
          def (pop bindings))))

(maple/define-key evil-insert-state-map
                  (kbd "M-h") (kbd "<left>")
                  (kbd "M-l") (kbd "<right>")
                  (kbd "M-j") (kbd "<down>")
                  (kbd "M-k") (kbd "<up>"))

为了与 vim 一致使用上述绑定. 同时因为pyim 绑定与 M-j 冲突已经换为 M-'

1.2. 配置 erc 使用

经过多次的粗心大意 终于按照 官方方案 成功连到irc 但是好像不能正常查看消息 是我太浮躁了 根据官网的教程 erc-sasl 下载文件并在 init-local.el 加入以下内容:

;;; 配置 erc
(require 'erc-backend)
(require 'erc-sasl)
(add-to-list 'erc-sasl-server-regexp-list "irc\\.libera\\.chat")
(with-eval-after-load 'erc
  (defun erc-login ()
    "Perform user authentication at the IRC server. (PATCHED)"
    (erc-log (format "login: nick: %s, user: %s %s %s :%s"
                     (erc-current-nick)
                     (user-login-name)
                     (or erc-system-name (system-name))
                     erc-session-server
                     erc-session-user-full-name))
    (if erc-session-password
        (erc-server-send (format "PASS %s" erc-session-password))
      (message "Logging in without password"))
    (when (and (featurep 'erc-sasl) (erc-sasl-use-sasl-p))
      (erc-server-send "CAP REQ :sasl"))
    (erc-server-send (format "NICK %s" (erc-current-nick)))
    (erc-server-send
     (format "USER %s %s %s :%s"
             ;; hacked - S.B.
             (if erc-anonymous-login erc-email-userid (user-login-name))
             "0" "*"
             erc-session-user-full-name))
    (erc-update-mode-line))
  )
(setq erc-autojoin-channels-alist
      '((Libera.Chat "#libera" "#list" "#linux" "$emacs")))


;; (erc-tls :server "irc.libera.chat" :port 6697 :nick "xiliuya"
;;          :full-name "xiliuya"
;;          :password "")

1.3. 配置 org-roam 关联笔记

相关链接: org-roam 配置 经过翻阅官方的文档进行以下配置, 加入 init-local.el :

(require-package 'org-roam)
(require-package 'org-roam-server)

(global-set-key (kbd "C-c n l")  'org-roam-buffer-toggle)
(global-set-key (kbd "C-c n g") 'org-roam-graph)
(global-set-key (kbd "C-c n i") 'org-roam-node-insert)
(global-set-key (kbd "C-c n c") 'org-roam-capture)
(global-set-key (kbd "C-c n j") 'org-roam-dailies-capture-today)

(global-set-key (kbd "C-c n d") 'org-id-get-create)

(setq org-roam-directory "~/myday")
(setq org-roam-node-display-template
      (concat "${title:*} "
              (propertize "${tags:10}" 'face 'org-tag)))
(org-roam-db-autosync-mode)
;; If using org-roam-protocol
(require 'org-roam-protocol)


(setq find-file-visit-truename t)

(setq org-roam-ui-sync-theme t
      org-roam-ui-follow t
      org-roam-ui-update-on-save t
      org-roam-ui-open-on-start t)

1.3.1. 基本使用

通过 M-x org-id-get-create 给现有的小标题生成一个 node id. 通过 M-x org-roam-db-sync 刷新数据库. 通过 M-x org-roam-ui-mode 启动一个本地服务器, 并打开一个浏览器窗口.

1.3.2. 功能理解

一款酷炫的插件, 可以简单而美观的管理众多的笔记. 基于 org-mode 简化新建日志的步骤. 便于梳理笔记形成可视化图像. 极大简化了查找笔记的时间成本. 易于翻阅加深记忆.

1.4. 配置 espeak 朗读

1.4.1. 修改配置

在 init-local.el 加入如下配置:

;;; 配置修复 espeak 使用时出现的白屏
(with-eval-after-load 'sdcv
  (defun sdcv-search-simple (&optional word)
    "search word simple translate result."
    (funcall
     sdcv-popup-function
     (sdcv-filter
      (shell-command-to-string
       (mapconcat #'identity
                  (cons "sdcv" (sdcv-search-with-dictionary-args
                                (or word (sdcv-region-or-word))
                                sdcv-dictionary-simple-list))
                  " "))))

    ;; pronounce the word (add by me)
    (when sdcv-word-pronounce
      ;; `sleep-for', `sit-for'.
      (sit-for 0.8)
      (sdcv-pronounce-word word)
      )
    )
  )

调试的代码:

;; 下方是调试信息 不加入配置
;; (setq sdcv-word-pronounce 'nil)
;; (setq sdcv-word-pronounce 't)

;; (defun sdcv-search-pointer+ ()
;;   "translate current point word.
;; and show information use tooltip.
;; but this function use a simple dictionary list."
;;   (interactive)
;;   (let ((word (sdcv-region-or-word)))
;;     ;; display simple translate result.
;;     (sdcv-search-simple word)
;;     (sit-for 1)
;;     (sdcv-pronounce-word word)
;;     ))


1.4.2. 实际分析

由于 sleep-for 函数的未知原因导致, 使用 sit-for 可以解决 建议多看一些备注信息, 有时可以快速排查问题

1.5. org-mode 表格的创建

参考链接: 表格的基本操作 表格里有很多有趣的内容, 当前仅了解必要的几个键位, 真正用时再去折腾 手动生成表格 | xx|xx|bb| <TAB>

xx xx bb
     

从已有数据转换 C-c |

h,b,c,d
8,9,10
13,8,9
h b c d
8 9 10  
13 8 9  

转换后自动添加水平分隔线 C-c - 可以在光标的下一行插入

1.6. emacslisp 调试

通过在函数定义处使用 m-x edebug-defun 进入 edebug 模式 . 未深入去研究, 只做简单记录.

参考链接: 如何调试elisp .

1.7. 优化 emacs 启动时间

1.7.1. 查看 benchmarking 信息

通过 M-x sanityinc/require-time 查看启动时间详情

1.7.2. 问题

问题主要在 org-mode 暂时没有较好的解决方案 按照时间排序输出如下:

start_time Feature Time
83036.907 ol-gnus 2618.484
83079.567 gnus-sum 2073.966
83354.692 gnus-group 1536.641
83401.804 gnus-start 1443.971
2241.952 init-local 1282.597
83490.073 gnus-int 910.991
83533.981 message 822.331

1.7.3. 优化

init-elpa

修改镜像源配置内容:

(with-eval-after-load 'init-elpa
  ...)
;;; 配置源在 init-elpa 加载后覆盖

作者: xiliuya

Created: 2022-12-04 日 21:36