Emacs 重构生成文件的elisp代码

Emacs 重构生成文件的elisp代码,emacs,refactoring,elisp,Emacs,Refactoring,Elisp,我编写了一个简单的emacs模块,用于生成标准模板,供我的博客静态站点生成器使用 (德芬哈克尔遗址位置() “返回Hakyll文件的位置。” “~/Sites/hblog/”) (defun hakyll新帖子(标题标签) “为今天创建一篇带有标题和标签的新Hakyll帖子。” (交互式“缝合:\n标签:”) (let((文件名(hakyll post title))) (设置缓冲区(获取缓冲区创建文件名)) (降价模式) (插入 (格式“--\n标题:%s\n标签:%s\n说明:\n--\n\

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

(德芬哈克尔遗址位置()
“返回Hakyll文件的位置。”
“~/Sites/hblog/”)
(defun hakyll新帖子(标题标签)
“为今天创建一篇带有标题和标签的新Hakyll帖子。”
(交互式“缝合:\n标签:”)
(let((文件名(hakyll post title)))
(设置缓冲区(获取缓冲区创建文件名))
(降价模式)
(插入
(格式“--\n标题:%s\n标签:%s\n说明:\n--\n\n“标题标签”)
(写入文件
(展开文件名文件名(concat(hakyll站点位置)“posts”))
(切换到缓冲区文件名)))
(defun hakyll新注释(标题)
“创建具有标题的新便笺。”
(交互式“缝合:”)
(let((文件名(hakyll注释标题)))
(设置缓冲区(获取缓冲区创建文件名))
(降价模式)
(插入(格式“--\n标题:%s\n说明:\n--\n\n”标题))
(写入文件
(展开文件名文件名(concat(hakyll站点位置)“注释”))
(切换到缓冲区文件名)))
(defun hakyll职务(职务)
“根据文章标题返回文件名。”
(康卡特)
(格式化时间字符串“%Y-%m-%d”)
"-"
(替换字符串“”中的regexp-“(downcase title))
“.markdown”))
(defun hakyll注释标题(标题)
“根据注释的标题返回文件名。”
(康卡特)
(替换字符串“”中的regexp-“(downcase title))
“.markdown”))
现在,这是可行的,但它可以干一点,但我不知道足够的elisp做自己

  • hakyll new post
    hakyll new note
    非常相似,可能与干涸有关,但我不确定如何将正确的参数传递给任何重构函数
  • 我正在硬编码hakyll站点位置。是否有任何方法可以在emacs点文件中请求并存储配置

欢迎提供任何帮助或文档指针。

以下是代码。我不能保证它能用但如果它以前能用, 现在应该可以了

(defvar hakyll-site-location "~/Sites/hblog/"
  "Return the location of the Hakyll files.")

(defun hakyll-new-post (title tags)
  "Create a new Hakyll post for today with TITLE and TAGS."
  (interactive "sTitle: \nsTags: ")
  (hakyll-do-write
   (format "%s/posts/%s-%s.markdown"
           hakyll-site-location
           (format-time-string "%Y-%m-%d")
           (replace-regexp-in-string " " "-" (downcase title)))
   (format "---\ntitle: %s\ntags: %s\ndescription: \n---\n\n"
           title
           tags)))

(defun hakyll-new-note (title)
  "Create a new Note with TITLE."
  (interactive "sTitle: ")
  (hakyll-do-write
   (format "%s/notes/%s.markdown"
           hakyll-site-location
           (replace-regexp-in-string " " "-" (downcase title)))
   (format "---\ntitle: %s\ndescription: \n---\n\n" title)))

(defun hakyll-do-write (file-name str)
  (find-file file-name)
  (insert str)
  (save-buffer))
您可以使用点文件中的
(setq hakyll site location“~/Sites/”
设置位置。
您甚至可以将
defvar
更改为
defcustom
,并使用customize设置位置

谢谢你;同样对于
defcustom
,我不知道这一点。你的编辑有一个bug:现在笔记和帖子被双重包含了哦!你说得很对;我在格式字符串中没有看到它。但我已经再次更正了它,这样便笺就不会进入
../notes/notes/…
。令人费解。它使用正确的内容创建文件,并切换到缓冲区。但是缓冲区是空的,当我将文件还原为保存时,它会说它与任何缓冲区都没有关联。我已经进行了编辑。看看这是否有效。这个问题似乎离题了,因为它要求进行代码检查。也许它更适合于代码审查(或者程序员?)。