首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Emacs模块,为我的博客静态站点生成器生成模板

Emacs模块,为我的博客静态站点生成器生成模板
EN

Code Review用户
提问于 2014-01-11 19:17:30
回答 1查看 156关注 0票数 5

我编写了一个简单的emacs模块,该模块生成用于博客静态站点生成器的标准模板。

代码语言:javascript
复制
(defun hakyll-site-location ()
  "Return the location of the Hakyll files."
  "~/Sites/hblog/")

(defun hakyll-new-post (title tags)
  "Create a new Hakyll post for today with TITLE and TAGS."
  (interactive "sTitle: \nsTags: ")
  (let ((file-name (hakyll-post-title title)))
    (set-buffer (get-buffer-create file-name))
    (markdown-mode)
    (insert
     (format "---\ntitle: %s\ntags: %s\ndescription: \n---\n\n" title tags))
    (write-file
     (expand-file-name file-name (concat (hakyll-site-location) "posts")))
    (switch-to-buffer file-name)))

(defun hakyll-new-note (title)
  "Create a new Note with TITLE."
  (interactive "sTitle: ")
  (let ((file-name (hakyll-note-title title)))
    (set-buffer (get-buffer-create file-name))
    (markdown-mode)
    (insert (format "---\ntitle: %s\ndescription: \n---\n\n" title))
    (write-file
     (expand-file-name file-name (concat (hakyll-site-location) "notes")))
    (switch-to-buffer file-name)))

(defun hakyll-post-title (title)
  "Return a file name based on TITLE for the post."
  (concat
   (format-time-string "%Y-%m-%d")
   "-"
   (replace-regexp-in-string " " "-" (downcase title))
   ".markdown"))

(defun hakyll-note-title (title)
  "Return a file name based on TITLE for the note."
  (concat
   (replace-regexp-in-string " " "-" (downcase title))
   ".markdown"))

现在,这是可行的,但它可以做一点DRYing,但我不知道足够多的埃利什自己做它。

  • hakyll-new-posthakyll-new-note非常相似,可以使用DRYing up,但我不确定如何将正确的参数传递给任何重构函数
  • 我在硬编码hakyll-site-location。我是否可以请求并将配置存储在emacs dotfile中?

欢迎任何帮助或指向文档的指针。

EN

回答 1

Code Review用户

回答已采纳

发布于 2014-01-11 22:30:40

烘干它:

它看起来像是变化是在:

  • 如何获得文件名
  • 插入文本的内容。
  • 要写入的文件的名称。

还请注意,如果format的格式规范(即他们被忽视了 )不需要额外的参数。

因此,您可以定义一个函数,其中包含3个参数:要调用以读取文件名的函数、要写入的文件名和格式规范字符串。

为了将命名函数传递给方法,您需要引用它,如示例中所示:

代码语言:javascript
复制
(mapcar '1+ '(1 2 3))

如果您想将一个匿名函数传递给一个函数,您可以使用#'(lambda ...)定义它。例如:

代码语言:javascript
复制
(mapcar #'(lambda (x) (1+ x)) '(1 2 3))

进行配置设置

我建议将您的hakyll-site-location函数更改为变量。使用defvar来定义它,然后您可以在emacs中简单地将它定义为setq

票数 4
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/39059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档