@@ -122,7 +122,10 @@ The elements of :problems has attributes:
122
122
123
123
(defvar leetcode-retry-threshold 20 " `leetcode-try' or `leetcode-submit' retry times." )
124
124
(defvar leetcode--filter-regex nil " Filter rows by regex." )
125
- (defvar leetcode--filter-tag nil " Filter rows by leetcode tag." )
125
+ (defvar leetcode--filter-tag nil " Filter rows by tag." )
126
+ (defvar leetcode--filter-difficulty nil
127
+ " Filter rows by difficulty, it can be \" easy\" , \" medium\" and \" hard\" ." )
128
+ (defconst leetcode--all-difficulties '(" easy" " medium" " hard" ))
126
129
127
130
(defconst leetcode--checkmark " ✓" " Checkmark for accepted problem." )
128
131
(defconst leetcode--buffer-name " *leetcode*" )
@@ -446,8 +449,16 @@ Return a list of rows, each row is a vector:
446
449
rows)))
447
450
rows))
448
451
452
+ (defun leetcode--row-tags (row )
453
+ " Get tags from ROW."
454
+ (aref row 6 ))
455
+
456
+ (defun leetcode--row-difficulty (row )
457
+ " Get difficulty from ROW."
458
+ (aref row 5 ))
459
+
449
460
(defun leetcode--filter (rows )
450
- " Filter ROWS by `leetcode--filter-regex' and `leetcode--filter-tag ' ."
461
+ " Filter ROWS by `leetcode--filter-regex' , `leetcode--filter-tag' and `leetcode--filter-difficulty ' ."
451
462
(leetcode--debug " filter rows: %s" rows)
452
463
(seq-filter
453
464
(lambda (row )
@@ -457,8 +468,12 @@ Return a list of rows, each row is a vector:
457
468
(string-match-p leetcode--filter-regex title))
458
469
t )
459
470
(if leetcode--filter-tag
460
- (let* ((tags (split-string (aref row 6 ) " , " )))
471
+ (let ((tags (split-string (leetcode-- row-tags row ) " , " )))
461
472
(member leetcode--filter-tag tags))
473
+ t )
474
+ (if leetcode--filter-difficulty
475
+ (let ((difficulty (leetcode--row-difficulty row)))
476
+ (string= difficulty leetcode--filter-difficulty))
462
477
t )))
463
478
rows))
464
479
@@ -467,21 +482,29 @@ Return a list of rows, each row is a vector:
467
482
(interactive )
468
483
(setq leetcode--filter-regex nil )
469
484
(setq leetcode--filter-tag nil )
485
+ (setq leetcode--filter-difficulty nil )
470
486
(leetcode-refresh))
471
487
472
488
(defun leetcode-set-filter-regex (regex )
473
- " Set `leetcode--filter-regex' as REGEX."
489
+ " Set `leetcode--filter-regex' as REGEX and refresh ."
474
490
(interactive " sSearch: " )
475
491
(setq leetcode--filter-regex regex)
476
492
(leetcode-refresh))
477
493
478
494
(defun leetcode-set-filter-tag ()
479
- " Set `leetcode--filter-tag' ."
495
+ " Set `leetcode--filter-tag' from `leetcode--all-tags' and refresh ."
480
496
(interactive )
481
497
(setq leetcode--filter-tag
482
498
(completing-read " Tags: " leetcode--all-tags))
483
499
(leetcode-refresh))
484
500
501
+ (defun leetcode-set-filter-difficulty ()
502
+ " Set `leetcode--filter-difficulty' from `leetcode--all-difficulties' and refresh."
503
+ (interactive )
504
+ (setq leetcode--filter-difficulty
505
+ (completing-read " Difficulty: " leetcode--all-difficulties))
506
+ (leetcode-refresh))
507
+
485
508
(aio-defun leetcode--fetch-all-tags ()
486
509
(let* ((url-request-method " GET" )
487
510
(url-request-extra-headers
@@ -1024,6 +1047,7 @@ for current problem."
1024
1047
(define-key map " p" #'previous-line )
1025
1048
(define-key map " s" #'leetcode-set-filter-regex )
1026
1049
(define-key map " t" #'leetcode-set-filter-tag )
1050
+ (define-key map " d" #'leetcode-set-filter-difficulty )
1027
1051
(define-key map " g" #'leetcode-refresh )
1028
1052
(define-key map " G" #'leetcode-refresh-fetch )
1029
1053
(define-key map " /" #'leetcode-reset-filter )
0 commit comments