Refactored gathering of summary parameters
There was a bug causing the kagi-summarize-url to break, due to an incorrect parameter set.
This commit is contained in:
parent
e38a9e1c81
commit
38f74f1a24
31
kagi-test.el
31
kagi-test.el
|
@ -430,13 +430,19 @@ https://www.example.com"
|
|||
(expect #'kagi--display-summary :to-have-been-called)
|
||||
(expect #'kagi--insert-summary :not :to-have-been-called))
|
||||
(it "inserts the summary when requested, interactively"
|
||||
(spy-on #'kagi--get-summarizer-parameters :and-return-value '(t nil nil))
|
||||
(spy-on #'kagi--get-summarizer-parameters :and-return-value
|
||||
'((insert . t)))
|
||||
(call-interactively #'kagi-summarize-buffer)
|
||||
(expect #'kagi-summarize :to-have-been-called)
|
||||
(expect #'kagi--display-summary :not :to-have-been-called)
|
||||
(expect #'kagi--insert-summary :to-have-been-called))
|
||||
(it "passes arguments to kagi-summary"
|
||||
(spy-on #'kagi--get-summarizer-parameters :and-return-value '(t lang bram random maybe))
|
||||
(spy-on #'kagi--get-summarizer-parameters :and-return-value
|
||||
'((insert . t)
|
||||
(language . lang)
|
||||
(engine . bram)
|
||||
(format . random)
|
||||
(no-cache . maybe)))
|
||||
(call-interactively #'kagi-summarize-buffer)
|
||||
(expect #'kagi-summarize :to-have-been-called)
|
||||
(expect #'kagi--display-summary :not :to-have-been-called)
|
||||
|
@ -449,7 +455,12 @@ https://www.example.com"
|
|||
(before-each
|
||||
(spy-on #'region-beginning)
|
||||
(spy-on #'region-end)
|
||||
(spy-on #'kagi--get-summarizer-parameters :and-return-value '(lang bram random maybe))
|
||||
(spy-on #'kagi--get-summarizer-parameters :and-return-value
|
||||
'((insert . t)
|
||||
(language . lang)
|
||||
(engine . bram)
|
||||
(format . random)
|
||||
(no-cache . maybe)))
|
||||
(spy-on #'kagi-summarize :and-return-value dummy-output)
|
||||
(spy-on #'buffer-name :and-return-value "buffer-name")
|
||||
(spy-on #'buffer-substring-no-properties))
|
||||
|
@ -469,7 +480,12 @@ https://www.example.com"
|
|||
(before-each
|
||||
(spy-on #'kagi-summarize :and-return-value dummy-output)
|
||||
(spy-on #'read-string :and-return-value "https://www.example.com")
|
||||
(spy-on #'kagi--get-summarizer-parameters :and-return-value '(nil lang bram random))
|
||||
(spy-on #'kagi--get-summarizer-parameters :and-return-value
|
||||
'((insert . nil)
|
||||
(language . lang)
|
||||
(engine . bram)
|
||||
(format . random)
|
||||
(no-cache . maybe)))
|
||||
(spy-on #'kagi--insert-summary))
|
||||
(it "passes arguments to kagi-summary"
|
||||
(call-interactively #'kagi-summarize-url)
|
||||
|
@ -510,6 +526,13 @@ https://www.example.com"
|
|||
(kagi-summarize-url "https://www.example.com" t)
|
||||
(expect #'kagi--display-summary :not :to-have-been-called)
|
||||
(expect #'kagi--insert-summary :to-have-been-called)
|
||||
(kagi-test--expect-arg #'kagi--insert-summary 0 :to-equal dummy-output))
|
||||
(it "inserts a summary when requested interactively"
|
||||
(spy-on #'kagi--get-summarizer-parameters :and-return-value
|
||||
'((insert . t)))
|
||||
(call-interactively #'kagi-summarize-url)
|
||||
(expect #'kagi--display-summary :not :to-have-been-called)
|
||||
(expect #'kagi--insert-summary :to-have-been-called)
|
||||
(kagi-test--expect-arg #'kagi--insert-summary 0 :to-equal dummy-output)))))
|
||||
|
||||
;;; kagi-test.el ends here
|
||||
|
|
117
kagi.el
117
kagi.el
|
@ -679,45 +679,45 @@ to insert when the region is highlighted. Therefore, PROMPTS is a
|
|||
list of items that can be prompted interactively. It is
|
||||
a (possibly empty) list with possible elements \\='prompt-for-insert
|
||||
or \\='prompt-for-no-cache."
|
||||
(append
|
||||
(when (seq-contains-p prompts 'prompt-for-insert)
|
||||
(list
|
||||
(and (equal current-prefix-arg '(4))
|
||||
(not buffer-read-only)
|
||||
(y-or-n-p "Insert summary at point?"))))
|
||||
(list
|
||||
(when (equal current-prefix-arg '(4))
|
||||
(let ((language-table (mapcar (lambda (lang)
|
||||
(cons
|
||||
(format "%s" (car lang))
|
||||
(cdr lang)))
|
||||
kagi--summarizer-languages)))
|
||||
(alist-get
|
||||
(completing-read (format-prompt "Output language" "")
|
||||
language-table nil t nil kagi--language-history)
|
||||
language-table
|
||||
(or kagi-summarizer-default-language "EN")
|
||||
nil
|
||||
#'string=))))
|
||||
(list
|
||||
(when (equal current-prefix-arg '(4))
|
||||
(completing-read (format-prompt "Engine" "")
|
||||
kagi--summarizer-engines nil t kagi-summarizer-engine)))
|
||||
(list
|
||||
(when (equal current-prefix-arg '(4))
|
||||
(let ((summary-formats '(("Summary" . summary)
|
||||
("Bullet-list" . takeaway))))
|
||||
(alist-get
|
||||
(completing-read (format-prompt "Summary format" "")
|
||||
summary-formats nil t)
|
||||
summary-formats
|
||||
kagi-summarizer-default-summary-format
|
||||
nil
|
||||
#'string=))))
|
||||
(list
|
||||
(and (seq-contains-p prompts 'prompt-for-no-cache)
|
||||
(equal current-prefix-arg '(4))
|
||||
(y-or-n-p "Cache the result?")))))
|
||||
(list
|
||||
(cons 'insert
|
||||
(and (seq-contains-p prompts 'prompt-for-insert)
|
||||
(equal current-prefix-arg '(4))
|
||||
(not buffer-read-only)
|
||||
(y-or-n-p "Insert summary at point?")))
|
||||
(cons 'language
|
||||
(when (equal current-prefix-arg '(4))
|
||||
(let ((language-table (mapcar (lambda (lang)
|
||||
(cons
|
||||
(format "%s" (car lang))
|
||||
(cdr lang)))
|
||||
kagi--summarizer-languages)))
|
||||
(alist-get
|
||||
(completing-read (format-prompt "Output language" "")
|
||||
language-table nil t nil kagi--language-history)
|
||||
language-table
|
||||
(or kagi-summarizer-default-language "EN")
|
||||
nil
|
||||
#'string=))))
|
||||
(cons 'engine
|
||||
(when (equal current-prefix-arg '(4))
|
||||
(completing-read (format-prompt "Engine" "")
|
||||
kagi--summarizer-engines nil t kagi-summarizer-engine)))
|
||||
(cons 'format
|
||||
(when (equal current-prefix-arg '(4))
|
||||
(let ((summary-formats '(("Summary" . summary)
|
||||
("Bullet-list" . takeaway))))
|
||||
(alist-get
|
||||
(completing-read (format-prompt "Summary format" "")
|
||||
summary-formats nil t)
|
||||
summary-formats
|
||||
kagi-summarizer-default-summary-format
|
||||
nil
|
||||
#'string=))))
|
||||
(cons 'no-cache
|
||||
(and (seq-contains-p prompts 'prompt-for-no-cache)
|
||||
(equal current-prefix-arg '(4))
|
||||
(y-or-n-p "Cache the result?")))))
|
||||
|
||||
;;;###autoload
|
||||
(defun kagi-summarize-buffer (buffer &optional insert language engine format no-cache interactive-p)
|
||||
|
@ -750,11 +750,20 @@ target LANGUAGE to use, which summarizer ENGINE to use and which
|
|||
summary FORMAT to use.
|
||||
|
||||
INTERACTIVE-P is t when called interactively."
|
||||
(interactive (append
|
||||
(list (read-buffer (format-prompt "Buffer" "") nil t))
|
||||
(kagi--get-summarizer-parameters '(prompt-for-insert
|
||||
prompt-for-no-cache))
|
||||
(list t)))
|
||||
(interactive (let ((buffer (read-buffer (format-prompt "Buffer" "") nil t))
|
||||
(parameters (kagi--get-summarizer-parameters
|
||||
'(prompt-for-insert
|
||||
prompt-for-no-cache))))
|
||||
(list
|
||||
buffer
|
||||
;; optional parameters
|
||||
(map-elt parameters 'insert)
|
||||
(map-elt parameters 'language)
|
||||
(map-elt parameters 'engine)
|
||||
(map-elt parameters 'format)
|
||||
(map-elt parameters 'no-cache)
|
||||
;; interactive-p
|
||||
t)))
|
||||
(let ((summary (with-current-buffer buffer
|
||||
(kagi-summarize (buffer-string) language engine format no-cache)))
|
||||
(summary-buffer-name (with-current-buffer buffer
|
||||
|
@ -787,9 +796,12 @@ content.
|
|||
With a single universal prefix argument (`C-u'), the user is
|
||||
prompted for which target LANGUAGE to use, which summarizer
|
||||
ENGINE to use and which summary FORMAT to use."
|
||||
(interactive (append
|
||||
(list (region-beginning) (region-end))
|
||||
(kagi--get-summarizer-parameters '(prompt-for-no-cache))))
|
||||
(interactive (let ((parameters (kagi--get-summarizer-parameters '(prompt-for-no-cache))))
|
||||
(list (region-beginning) (region-end)
|
||||
(map-elt parameters 'language)
|
||||
(map-elt parameters 'engine)
|
||||
(map-elt parameters 'format)
|
||||
(map-elt parameters 'no-cache))))
|
||||
(kagi--display-summary
|
||||
(kagi-summarize (buffer-substring-no-properties begin end)
|
||||
language
|
||||
|
@ -834,9 +846,14 @@ types are supported:
|
|||
- YouTube URLs
|
||||
- Scanned PDFs and images (OCR)"
|
||||
(interactive
|
||||
(cons
|
||||
(read-string (format-prompt "URL" ""))
|
||||
(kagi--get-summarizer-parameters '(prompt-for-insert))))
|
||||
(let ((url (read-string (format-prompt "URL" "")))
|
||||
(parameters (kagi--get-summarizer-parameters '(prompt-for-insert))))
|
||||
(list
|
||||
url
|
||||
(map-elt parameters 'insert)
|
||||
(map-elt parameters 'language)
|
||||
(map-elt parameters 'engine)
|
||||
(map-elt parameters 'format))))
|
||||
(let ((summary (kagi-summarize url language engine format)))
|
||||
(if (and insert (not buffer-read-only))
|
||||
(kagi--insert-summary summary)
|
||||
|
|
Loading…
Reference in a new issue