From d2843b816fd690d3d53f473c96d5fd052f2a9176 Mon Sep 17 00:00:00 2001 From: Herbert Jones Date: Sat, 22 Feb 2020 10:53:16 -0600 Subject: [PATCH] (bugfix): keep unicode alphanumerics in filename (#164) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ref #158 Example output: (mapcar #'org-roam--title-to-slug '("!!!!Org-Roam is great!!!!" "Sobre a formação dos planetas" "1\\2.3///**" "10-2+3=45")) ;; ("org_roam_is_great" "sobre_a_formação_dos_planetas" "1_2_3" "10_2_3_45") --- org-roam.el | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/org-roam.el b/org-roam.el index cbbf0bf..8b420e7 100644 --- a/org-roam.el +++ b/org-roam.el @@ -235,11 +235,14 @@ If `ABSOLUTE', return an absolute file-path. Else, return a relative file-path." (defun org-roam--title-to-slug (title) "Convert TITLE to a filename-suitable slug." - (let* ((s (s-downcase title)) - (s (replace-regexp-in-string "[^a-zA-Z0-9_ ]" "" s)) - (s (s-split " " s)) - (s (s-join "_" s))) - s)) + (cl-flet ((replace (title pair) + (replace-regexp-in-string (car pair) (cdr pair) title))) + (let* ((pairs `(("[^[:alnum:][:digit:]]" . "_") ;; convert anything not alphanumeric + ("__*" . "_") ;; remove sequential underscores + ("^_" . "") ;; remove starting underscore + ("_$" . ""))) ;; remove ending underscore + (slug (-reduce-from #'replace title pairs))) + (s-downcase slug)))) (defun org-roam--file-name-timestamp-title (title) "Return a file name (without extension) for new files.