summaryrefslogtreecommitdiff
path: root/llm-chat-replacements.el
blob: d37ff403d62d2cd7fb31a4525e33bb82406c0726 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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