blove
1
目前只是主要框架,结合了 all-the-icons 的使用
虽然目前运行起来还看不出什么问题,但自己总感觉,居中对齐那一块写得有问题。如果大家发现有更好的写法或发现哪里需要修正,请帮忙修改指正。
;; -*- lexical-binding: t; -*-
(defun blove/make-dashboard-link (label link)
"Return the file with full path."
(interactive)
(insert-button label
'action (lambda (_) (find-file link))
'follow-link t
'face 'blove/dashboard-link
)
(insert "\n")
)
(defun blove/dashboard ()
"Main dashboard."
(interactive)
(setq file-nums 6)
(setq blove/dashboard-logo (expand-file-name "lisp/blove-pic/ox.png" user-emacs-directory))
(let ((buf (get-buffer-create "*Blove Dashboard*")))
(with-current-buffer buf
(erase-buffer)
;;; === insert logo begin ===
(insert "\n\n\n\n")
(let* ((image-file blove/dashboard-logo)
(img (create-image image-file)))
(insert (propertize " " 'display `(space :align-to (+ center (-0.5 . ,img)))))
(insert-image img)
(insert "\n\n")
;;; === insert logo end ===
(if (< (- (length recentf-list) 2) file-nums)
(setq endnum (- (length recentf-list) 2))
(setq endnum file-nums)
)
(mapcar ;; === loop start
(lambda (item) ;; --- mani function start
(setq label
(concat (all-the-icons-icon-for-file (concat "ext:" item)) " "
(file-name-base item)
" " " "
"(."
(file-name-extension item)
")"
)
)
(insert (propertize " " 'display `(space :align-to (+ center (-0.6 . ,img)))))
(blove/make-dashboard-link label item)
) ;;; --- main function end
;;; loop in iterms
(cl-loop for i from 0 to endnum
collect (nth i recentf-list) into rflst
finally return rflst
)
) ;;; === end
)
)
(switch-to-buffer buf)
(if (boundp 'evil-mode)
(evil-normal-state)
)
)
)
(blove/dashboard)
2 个赞
这么显示icon不得累死?用all-the-icons-icon-for-file
就行了
1 个赞
blove
3
blove
4
修改后简化代码–01
改用 all-the-icons-icon-for-file
为什么不直接用 emacs-dashboard呢?没看出有什么新的或者不一样的功能啊
blove
6
一直都是在使用dashboard。一直也都感觉它挺好的。
自己写✍🏻dashboard的目的有三个:
①对dashboard很感兴趣。想尝试自己实现一下简化版的dashboard。
②想写一个精简适合自己、够用的dashboard。
③通过尝试练写各类型的实现,更多得了解elisp。
3 个赞
这个挺好,开始界面本来使用到的功能就很少,自己写个简单版的dashboard 替换 emacs-dashboard,还是很不错。
1 个赞
我使用emacs几年了,在平时工作中 实际用到的 功能 就那么多,刚开始用emacs的时候,一心就想要做一个功能丰富,像一个百宝箱一样,看见别人有个比较好的功能,立马就加到自己的配置中。
用了几年之后才发现 很多功能都是闲置的,反正都是私人定制的配置,适合自己就好了。
所以我现在比较精简自己的配置,而且不光精简自己的配置,还包括一些插件。
比如 之前一直用你写的doom-modeline,你的插件是为了 兼容 其他插件,所以写了很多功能,但有些功能我几乎没怎么用,所以我直接自己做一个,并借鉴doom-modeline 优秀的地方。
现在我的mode-line是这样的:
跟你的doom-modeline很像,又保留自己需要的功能,还简单,这就是我使用emacs最舒服的方式
6 个赞
blove
12
全路径那个容易。插件加载数量和启动时间,我需要整理一下。
blove
13
一直在用你写的 doom-modeline,感觉很好用,
向你表示致敬!
适合自己的就是最好的。其实,emacs插件的精妙之处就在于有很多option,按自己的需求配置好就行,没必要都重新造轮子。当然,emacs文化允许也鼓励多元化。
1 个赞
blove
16
自己写功能用 和 写插件给大家用,完全不同。
考虑的角度完全不同、涉及的范围不同,
需要承载的知识深度更是没有可比性。
所以,我真的觉得,能够写插件给大家用的你们,是最棒的!
3 个赞
blove
17
显示全路径、显示插件数和启动时间已经加入
以自己目前的能力,只能先写成这样。
引用并修改了 dashboard-widgets.el 中的函数
1 个赞
blove
18
修改后的代码在此
;; -*- lexical-binding: t; -*-
;;; === Defconst
(defconst blove/dashboard-logo (expand-file-name "lisp/blove-pic/ox.png" user-emacs-directory)
"Blove-ashboard's logo.")
(defconst blove/dashboard-buf-name "*BloveDashboard*"
"Dashboard's buffer name.")
(defconst file-nums 6
"Recentf nums.")
(defconst endnum (if (< (- (length recentf-list) 2) file-nums)
(- (length recentf-list) 2)
file-nums)
"c-loop end-num")
(defconst blove/full-path t
"Full path name or base-name. :t | nil ")
(defconst blove/center-offset (if blove/full-path -1.5 -0.6)
"Offset. : full-path -1.5, base-name -0.6")
;;; === Main Function
;;; ~ show packages % init-time
(defun blove/pack-time ()
(let ((package-count 0) (time (emacs-init-time)))
(when (bound-and-true-p package-alist)
(setq package-count (length package-activated-list)))
(when (boundp 'straight--profile-cache)
(setq package-count (+ (hash-table-count straight--profile-cache) package-count)))
(if (zerop package-count)
(format "Emacs started in %s" time)
(format "%d packages loaded in %s" package-count time))
)
)
;;; ~ insert all-the-icons-icon-for-file
(defun blove/insert-icons (item)
"Return the all-the-icons-icon-for-file by item."
(interactive)
(insert (all-the-icons-icon-for-file (concat "ext:" item)
:height 1.1
:v-adjust -0.05
:face 'font-lock-keyword-face
))
)
;;; ~ make file link
(defun blove/make-dashboard-link (label link)
"Return the file with full path."
(interactive)
(insert-button label
'action (lambda (_) (find-file link))
'follow-link t
'face 'blove/dashboard-link
)
(insert "\n")
)
;;; ~ main function
(defun blove/dashboard ()
"Main dashboard."
(interactive)
(let ((buf (get-buffer-create blove/dashboard-buf-name)))
(with-current-buffer buf
(erase-buffer)
;;; === insert logo ===
(insert "\n\n\n\n")
(let* ((image-file blove/dashboard-logo)
(img (create-image image-file)))
(insert (propertize " " 'display `(space :align-to (+ center (-0.5 . ,img)))))
(insert-image img)
(insert "\n\n")
;;; === insert packages and emacs-init-time ===
(insert (propertize " " 'display `(space :align-to (+ center (-0.9 . ,img)))))
(insert (propertize (blove/pack-time) 'face '((:foreground "#ff0000" :weight bold))))
(insert "\n\n")
(mapcar ;; === loop start
(lambda (item) ;; --- mani function start
;;; ~~~ insert all-the-icons
(insert (propertize " " 'display `(space :align-to (+ center (blove/center-offset . ,img)))))
(blove/insert-icons item)
;;; ~~~ insert all-the-icons end
(setq label
(concat " "
(if blove/full-path item (file-name-base item))
" " " "
"(."
(file-name-extension item)
")"
)
)
(blove/make-dashboard-link label item)
) ;;; --- main function end
;;; loop in iterms
(cl-loop for i from 0 to endnum
collect (nth i recentf-list) into rflst
finally return rflst
)
) ;;; === end
)
)
(switch-to-buffer buf)
(if (boundp 'evil-mode)
(evil-normal-state)
)
)
)
(blove/dashboard)
欢迎提出更好的建议、或者帮忙修正!
blove
19
因为是写给个人用的,所以没有弄什么参数设置的功能
(defconst blove/full-path t
"Full path name or base-name. :t | nil
需要显示全路径,就设置为 t。
我个人是喜欢只显示文件名,不显示路径的,所以我会设置为 nil
")
(defconst blove/center-offset (if blove/full-path -1.5 -0.6)
"Offset. : full-path -1.5, base-name -0.6
这里的
-1.5 是对应全路径显示留白,
-0.6 是对应只显示文件名留白,都可以自行修改")
现在好像还依赖 dashboard 吧?
Symbol’s value as variable is void: recentf-list
我这边还会报错。
启动时间好像也算的不对