;;; 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