如何自定义 Banner 的图案?

@colin4123 我按照你的放在init也没成功。。。

*scratch* 中显示张图片:

代码:

(defvar my-picture-file
  (let ((logo (expand-file-name "emacs.png" temporary-file-directory)))
    (unless (file-exists-p logo)
      (url-copy-file "https://www.gnu.org/software/emacs/images/emacs.png" logo))
    logo)
  "图片的完整路径。")

(setq initial-scratch-message
      (with-temp-buffer
        (insert-image (create-image my-picture-file) "image")
        (insert "<= 我的图片\n")
        (buffer-string)))
4 个赞

按照你这样改,下次更新会不会变回原来的样子?

当时改的时候没注意到 init 文件中有这个变量的参数

不过我现在配置基本稳定了,很少折腾,几乎不更新。

而且我不是 clone 的 spacemacs 的仓库,我是直接 download 的代码没法直接升级=。= 等下次想升级的时候再改配置

你方便贴下你的配置文件的相关代码吗?

(setq-default dotspacemacs-startup-banner '"path/to/my_photo")

我将上面的代码放到了

`(defun dotspacemacs/user-init ()

)` 当中。

你按照我的方法试试

秀一下我的emacs主页。

4 个赞

你这图片 哪里找的?

在原来的logo上改的。。

可不可以设置成某个文件夹里多个图片随机出现啊?或者某个网址上的图片?比如必应主页的图片。那样会好看很多

随机选择图片不难,只要用个生成随机数来选择图片就可以了。

要用 Bing 的图……那个图超大啊。不过可以写个脚本每天自动下图压缩,

(defun chunyang-download-bing-picture (&optional directory filename resolution)
  "下载 Bing 首页图片.
用 DIRECTORY 指定下载目录,省略或 nil 用当前路径.
用 FILENAME 指定文件名,省略或 nil 用服务器提供的.
用 RESOLUTION 指定分辨率,如\"1920*1086\",省略或 nil 用服务器提供的."
  (interactive)
  (let ((api
         "http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN")
        json pic-url pic-file)
    (if filename
        (setq pic-file (expand-file-name filename directory)))
    (if (and pic-file (file-exists-p pic-file))
        pic-file
      (with-current-buffer (url-retrieve-synchronously api)
        (set-buffer-multibyte t)
        (goto-char (point-min))
        (delete-region (point-min)
                       (1+ (re-search-forward "^$" nil t)))
        (goto-char (point-min))
        (require 'json)
        (setq json (json-read))
        ;; http://bing.com/az/hprichbg/rb/PonteSantAngelo_ZH-CN15413822788_1920x1080.jpg
        (setq pic-url
              (concat
               "http://bing.com"
               (assoc-default 'url (aref (assoc-default 'images json) 0))))
        ;; 默认用一个分辨率较低的,适合 `fancy-splash-image'
        ;; http://bing.com/az/hprichbg/rb/PonteSantAngelo_ZH-CN15413822788_640x360.jpg
        (setq pic-url
              (replace-regexp-in-string
               (rx "_" (1+ digit) "x" (1+ digit) ".jpg" string-end)
               (if resolution
                   (format "_%s.jpg" resolution)
                 "_640x360.jpg")
               pic-url))
        (unless pic-file
          (setq pic-file
                (expand-file-name (file-name-nondirectory pic-url) directory)))
        (unless (file-exists-p pic-file)
          (url-copy-file pic-url pic-file))
        pic-file))))

(setq fancy-splash-image (chunyang-download-bing-picture))

关于 API:

2 个赞

好像图片太大 C-h C-a (about-emacs) 就无法不了,我这边 1920x1080 就显示不了,但 640x360 可以。

也可以在下载的时候选择分辨率。

这个 URL http://signavatar.com/50020_s.gif 下有关于 Honey Select 的图片,会自动轮换,可以当作“随机”的。

我刚才写了个命令 chunyang-about-honey-select,每次运行都会显示一张不同的图片,效果图:

代码(注意要开启 lexical-binding

;; -*- lexical-binding: t; -*-

(defun chunyang-about-honey-select (&optional dir)
  "Fetch a picture on Honey Select to DIR and display in *About GNU Emacs*.
Argument nil or omitted means save to `default-directory'."
  (interactive)
  (unless dir
    (setq dir (let ((default "~/Pictures/Honey Select"))
                (if (file-exists-p default)
                    default
                  default-directory))))
  (let ((default-directory dir)
        (process-environment (append '("LC_ALL=C") process-environment))
        buf proc)
    (setq buf (get-buffer-create "*wget*"))
    (setq proc (get-buffer-process buf))
    (when proc (kill-process proc))
    (with-current-buffer buf
      (setq proc (start-process
                  "wget" buf "wget"
                  "--server-response"
                  "--content-disposition"
                  "--no-clobber"
                  "http://signavatar.com/50020_s.gif"))
      (require 'shell)
      (shell-mode)
      (display-buffer buf)
      (set-process-sentinel
       proc
       (lambda (_proc event)
         (cond ((string= event "finished\n")
                (with-current-buffer buf
                  (save-excursion
                    (goto-char (point-min))
                    (re-search-forward "  Location: \\(.+\\)$")
                    (setq fancy-splash-image
                          (expand-file-name (file-name-nondirectory (match-string 1))))
                    (kill-buffer)
                    (delete-other-windows)))
                (about-emacs)))))
      ;; Use the comint filter for proper handling of carriage motion
      ;; (see `comint-inhibit-carriage-motion'),.
      (set-process-filter proc 'comint-output-filter))))
3 个赞

谢谢,太感谢了,明天试试。

这两个函数是不是只能在linux下系统使用啊? Windows上可以吗?

Windows 上有 weget 在 PATH 里就够了。

God help us!..

banner要被玩坏了。。。