summaryrefslogtreecommitdiff
path: root/llm-chat-replacements.el
diff options
context:
space:
mode:
Diffstat (limited to 'llm-chat-replacements.el')
-rw-r--r--llm-chat-replacements.el55
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