diff options
Diffstat (limited to 'llm-chat-replacements.el')
| -rw-r--r-- | llm-chat-replacements.el | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/llm-chat-replacements.el b/llm-chat-replacements.el new file mode 100644 index 0000000..d37ff40 --- /dev/null +++ b/llm-chat-replacements.el @@ -0,0 +1,55 @@ +;;; llm-chat-replacements.el --- Chat replacements functionality -*- lexical-binding: t; -*- + +;; This file is not part of GNU Emacs. + +;;; Code: + +(defcustom llm-chat-user-replacements nil + "User defined replacement key value pairs. +Must be a list of cons cells like (\"key\" . \"value\")." + :type '(alist :key-type string :value-type string) + :group 'llm-chat) + +(defvar llm-chat-replacements-dict (make-hash-table :test 'equal)) + +(defun llm-chat-get-replacements-dict () + llm-chat-replacements-dict) + +(defun llm-chat-reset-replacements-dict () + (clrhash llm-chat-replacements-dict)) + +(defun llm-chat-remove-replacementss-dict (key) + (remhash key llm-chat-replacements-dict)) + +(defun llm-chat-add-replacements-dict (key-value-pair) + (if (and (consp key-value-pair) + (stringp (car key-value-pair)) + (stringp (cdr key-value-pair))) + (puthash (car key-value-pair) (cdr key-value-pair) llm-chat-replacements-dict) + (message "key-value-pair is not a single key value cons"))) + +(defun llm-chat-add-list-replacements-dict (list-of-key-value-pairs) + (dolist (key-value-pair list-of-key-value-pairs) + (llm-chat-add-replacements-dict key-value-pair))) + +(defun llm-chat-init-replacements-dict () + (llm-chat-reset-replacements-dict) + (when llm-chat-user-replacementss + (llm-chat-add-list-replacements-dict llm-chat-user-replacementss))) + +(defun llm-chat-bulk-replacements-with-dict (text dict) + (with-temp-buffer + (insert text) + (cond + ((hash-table-p dict) + (maphash + (lambda (key value) + (goto-char (point-min)) + (while (search-forward key nil t) + (replace-match value t t))) + dict))) + (buffer-string))) + +(provide 'llm-chat-replacements) + +;;; llm-chat-replacements.el ends here |