【yasnippet / hugo】自动插入 org 文件头部的 snippet

:sunglasses: 帮看下这个问题,有解决办法木有 → 【hugo ox-hugo】使用 `ox-hugo` 导出 `.md` 时如何处理代码块高亮问题?


Insert Hugo Formatter

目前使用 ox-hugo 导出 .org 文件到 HUGO,但每次编辑 .org 插入头部都要手动输入,Hmm… 有些繁琐,自己写了一个 Yasnippet 的 snippet – insert hugo formatter,它主要实现了一下功能:

  • 自动插入当前时间;
  • 自动格式化当前 buffer 名称作为当前文章名。

https://github.com/loveminimal/emacs.d/blob/master/snippets/org-mode/insert%20hugo%20formatter

如下图:


Insert Img

另外,默认的图片插入,不方便设置图片大小(个人暂时未发现 :joy: ),附一个插入图片的 snippet – insert img

https://github.com/loveminimal/emacs.d/blob/master/snippets/org-mode/insert%20img

如此可以通过设置图片的宽度,来设置图片大小。

3 个赞

这么多 car/cdr。感觉这样就行了?

(capitalize
 (replace-regexp-in-string
  "[_-]"
  " "
  (file-name-base "/path/to/hello-world.org")))
;; => "Hello World"

我没全看明白你的代码,太长了。

1 个赞

插入title可以用这个简化

(mapconcat #'capitalize
           (split-string (file-name-base (buffer-file-name)) "-")
           " ")
1 个赞

尝试用了 mapconcat ,语法没用对。。。。。以为不行,就用手动 car + cdr , THX 【已采用】


帮看下这个问题,有解决办法木有 → 【hugo ox-hugo】使用 `ox-hugo` 导出 `.md` 时如何处理代码块高亮问题?

写完之后,我也看不懂。。。 :sweat_smile:


帮看下这个问题,有解决办法木有 → 【hugo ox-hugo】使用 `ox-hugo` 导出 `.md` 时如何处理代码块高亮问题?

针对不同类型的头部文件,我一般录制个宏,然后保存或者绑定一下。如果要个性化定制,也可以从修改录制好的宏开始。

宏是个好东西,不过我用的比较浅,一般用来修改文章或代码。 Snippet 主要是方便光标跳转,有些待输入项某些时候还是需要修改。 :cowboy_hat_face:

跟他的有啥区别?

看起来好看。

楼主改了原来的代码,Diff 见:

1 个赞

呃,楼主原来的代码是这样……能忍受那么多复制么…………

Common Lisp 没有这个函数,我也不知道有 mapconcat 这个函数, 就是 concatenate 和 mapcar/mapcan 的组合吧

:sweat_smile: 正解,一行就完事儿了

是从以前用 hexo 的时候写的一个插件搬过来改了一下 :sweat_smile: 不过下面两位给的方案都很 Okay

否,mapconcat是对字符串专用的,而且会在每个elem中间插入指定的分隔符。Elisp自己加的。

(defun mapcat (string-list &optional (func #'string-capitalize) (splitter " "))
      (string-right-trim splitter
                         (apply 'concatenate 'string
                                (mapcar #'(lambda (str) (concatenate 'string (funcall func str) splitter)) string-list))))
(mapcat '("hello" "world")) => "Hello World"

“简单”实现个,用 format 就要简单得多~~

或者先实现list的join,再用concatenate

(defun interpose (list sep)
  (let ((rev (reverse list))
        result)
    (dolist (elem rev)
      (push elem result)
      (push sep result))
    (cdr result)))

(defun mapconcat (fn seq sep)
  (apply #'concatenate 'string (interpose (mapcar fn seq) sep)))

哈哈 我刚说的用 format 简单得多就是因为我用那个实现了join(为了防止用format的关键字波浪线~ 做分隔符所以要替换下,不然更简单了):


(defun join (string-list
             &key (seperator "-") output (fn #'string-capitalize)              
             &aux (seperator (cl-ppcre:regex-replace-all "~" seperator "~~")))
  "Join the string list"           
  (format output (format nil "~~{~~a~~^~a~~}" seperator) (mapcar fn string-list)))