Skip to content

Commit cb48e88

Browse files
NoahDragonkaiwk
authored andcommitted
Add leetcode-quit command
This adds the feature that allows quitting all leetcode related buffers and windows in one command. Implemented the feature request: kaiwk#29
1 parent 2b2f44b commit cb48e88

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

leetcode.el

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ The elements of :problems has attributes:
7575
:difficulty Number {1,2,3}
7676
:paid-only Boolean {t|nil}")
7777

78+
(defvar leetcode--problem-titles nil
79+
"Problem titles that have been open in solving layout.")
80+
7881
(defvar leetcode-checkmark "" "Checkmark for accepted problem.")
7982
(defconst leetcode--buffer-name "*leetcode*")
8083
(defconst leetcode--description-buffer-name "*leetcode-description*")
@@ -666,7 +669,8 @@ Get current entry by using `tabulated-list-get-entry' and use
666669
"dislikes: " (number-to-string .dislikes)))
667670
(insert .content)
668671
(setq shr-current-font t)
669-
(leetcode--replace-in-buffer "" "")
672+
(leetcode--replace-in-buffer "
673+
" "")
670674
;; NOTE: shr.el can't render "https://xxxx.png", so we use "http"
671675
(leetcode--replace-in-buffer "https" "http")
672676
(shr-render-buffer (current-buffer)))
@@ -690,6 +694,22 @@ Get current entry by using `tabulated-list-get-entry' and use
690694
(leetcode--problem-description-mode)
691695
(switch-to-buffer (current-buffer))))))
692696

697+
(defun leetcode--kill-buff-and-delete-window (buf)
698+
"Kill buff and delete its window"
699+
(delete-windows-on buf t)
700+
(kill-buffer buf))
701+
702+
(defun leetcode-quit ()
703+
"Close and delete leetcode related buffers and windows"
704+
(interactive)
705+
(leetcode--kill-buff-and-delete-window (get-buffer leetcode--buffer-name))
706+
(leetcode--kill-buff-and-delete-window (get-buffer leetcode--description-buffer-name))
707+
(leetcode--kill-buff-and-delete-window (get-buffer leetcode--result-buffer-name))
708+
(leetcode--kill-buff-and-delete-window (get-buffer leetcode--testcase-buffer-name))
709+
(mapc (lambda (x) (leetcode--kill-buff-and-delete-window (get-buffer (leetcode--get-code-buffer-name x))))
710+
leetcode--problem-titles)
711+
)
712+
693713
(defvar leetcode-prefer-language "python3"
694714
"LeetCode programming language.
695715
c, cpp, csharp, golang, java, javascript, kotlin, php, python,
@@ -738,6 +758,7 @@ major mode by `leetcode-prefer-language'and `auto-mode-alist'.
738758
TITLE is a problem title. SNIPPETS is a list of alist used to
739759
store eachprogramming language's snippet. TESTCASE is provided
740760
for current problem."
761+
(add-to-list 'leetcode--problem-titles title)
741762
(leetcode--solving-layout)
742763
(leetcode--set-lang snippets)
743764
(let ((code-buf (get-buffer (leetcode--get-code-buffer-name title)))
@@ -753,7 +774,8 @@ for current problem."
753774
leetcode--lang))
754775
snippets)))
755776
(insert (alist-get 'code snippet))
756-
(leetcode--replace-in-buffer "" ""))))
777+
(leetcode--replace-in-buffer "
778+
" ""))))
757779
(display-buffer code-buf
758780
'((display-buffer-reuse-window
759781
leetcode--display-code)

0 commit comments

Comments
 (0)