manateelazycat / mind-wave

Emacs AI plugin based on ChatGPT API
GNU General Public License v3.0
159 stars 25 forks source link

路径有一些文件系统不太喜欢的一些字符 能不能给用户设一个选择 提供一种比较可靠的方式 来命名文件? #12

Closed randomwangran closed 1 year ago

randomwangran commented 1 year ago

例子: /PATH/#"Introducing the AI Language Model Assistant"#.chat

使用 gpt/hugo-slug-as-underscore 后:

/PATH/introducing_the_ai_language_model_assistant.chat

附,参考脚本

(defun gpt/hugo-slug-as-underscore (beg end)
  (interactive "r")
  (insert (gpt/org-hugo-slug (buffer-substring-no-properties
                             (region-beginning) (region-end))))
  (delete-region beg end))

(defun gpt/hugo-slug-as-underscore (beg end)
  (interactive "r")

  (insert (gpt/org-hugo-slug (buffer-substring-no-properties
                         (region-beginning) (region-end))))
  (delete-region beg end))

(defun gpt/org-hugo-slug (str &optional allow-double-hyphens)
  "See function `org-hugo-slug'"
  (let* ((str (downcase str))
         (str (replace-regexp-in-string "<\\(?1:[a-z]+\\)[^>]*>.*</\\1>" "" str))
         (str (replace-regexp-in-string (concat "\\](" ffap-url-regexp "[^)]+)") "]" str))
         (str (replace-regexp-in-string
               "&" " and "
               (replace-regexp-in-string
                "\\." " dot "
                (replace-regexp-in-string
                 "\\+" " plus " str))))
         (str (replace-regexp-in-string "[^[:alnum:]()]" " " str))
         (str (if (version< emacs-version "25.0")
                  (let ((multibyte-punctuations-str ":"))
                    (replace-regexp-in-string (format "[%s]" multibyte-punctuations-str) " " str))
                str))
         (str (replace-regexp-in-string "\\(^[[:space:]]*\\|[[:space:]]*$\\)" "" str))
         (str (replace-regexp-in-string "[[:space:]]\\{2,\\}" " " str))
         (str (replace-regexp-in-string "\\s-*([[:space:]]*\\([^)]+?\\)[[:space:]]*)\\s-*" " -\\1- " str))
         (str (replace-regexp-in-string "[()]" "" str))
         (str (replace-regexp-in-string " " "_" str))
         (str (replace-regexp-in-string "\\(^[-]*\\|[-]*$\\)" "" str)))
    (unless allow-double-hyphens
      (setq str (replace-regexp-in-string "--" "_" str)))
    str))
manateelazycat commented 1 year ago

不增加一些特殊的字符,我怎么知道这个文件名已经被自动分析标题了?

如果没有这些特殊的字符,那每次都要重新去分析标题,其实挺浪费ChatGPT流量的