6 releases
new 0.6.1 | Dec 2, 2023 |
---|---|
0.6.0 | Nov 14, 2023 |
0.5.9 | Oct 29, 2023 |
0.1.1 | Aug 8, 2023 |
#129 in Asynchronous
82 downloads per month
2.5MB
7K
SLoC
Brush leetcode under the terminal
- 【中文文档】
Features
- Open the editor of your choice for editing.
- Filter based on the category of the question.
- Perform a fuzzy search.
- Test and submit the code.
- Modify the test case.
- Automatically get cookies to eliminate the need for manual copying from the browser(support for a few specific browsers and platforms only,as adapting to various browsers and platforms can be complicated).
Install
Linux Option dependencies(a implement SecretService
service Application):
gnome-keyring
kwallet
KeePassXC
libsecret
- stable
cargo install lcode
- nightly
cargo install --git=https://github.com/saying121/leetcode-cn-en-cli.git --force
Useage
Generate configuration, manual modification of the configuration is also possible, and it will be automatically generated at runtime. Without -c, it will be generated in English.
lcode gencon -c
Synchronize basic data first.
lcode sync
View the documentation for assistance.
lcode -h
Begin selecting a question.
lcode fzy <edit>
Videos
https://github.com/saying121/leetcode-cn-en-cli/assets/74663483/57a633e5-6bae-4816-a224-d7d61d2141af
https://github.com/saying121/leetcode-cn-en-cli/assets/74663483/7917a65c-b7a9-4305-b87f-5d2ddc8cb760
Configuration
The configuration located
- Linux:
~/.config/leetcode-cn-en-cli/config.toml
- macos:
~/.config/leetcode-cn-en-cli/config.toml
- Windows:
|C:\Users\Alice\AppData\Roaming
The code default located
- Linux:
$HOME/.local/share/leetcode-cn-en-cli/
- macOS:
$HOME/Library/Application Support/leetcode-cn-en-cli
- Windows:
C:\Users\Alice\AppData\Local\leetcode-cn-en-cli
default:
translate = false
column = 4
num_sublist = 10
page_size = 25
editor = ["vim"]
lang = "rust"
code_dir = "/home/user/.local/share/leetcode-cn-en-cli"
url_suffix = "com"
[support_lang]
langs = ["rust", "bash", "c", "cpp", "csharp", "golang", "java", "javascript", "kotlin", "mysql", "php", "python", "python3", "ruby", "scala", "swift", "typescript", "racket", "erlang", "elixir", "dart"]
[cookies]
csrf = ""
session = ""
Important
First, login leetcode in browser for generate cookies
browser
can fill in chrome
, edge
, firefox
, librewolf
.
Now support this browser, and just test in Linux.(firefox should support three systems) If use the section,be careful not to clear cookies when closing the browser.
[cookies]
section
-
If the two subfields are not empty,use the content filled by the user. And not use other method to get cookies。
-
Fill in manually:
Press F12 on the browser's
leetcode.com/com
page, Find the Cookie field, copy thecsrftoken
=<content>; andLEETCODE_SESSION
=<content>; sections inside it into the configuration.
-
-
If user filled
browser
, will try to use the browser to get cookies. -
If neither of the above two items is filled in, and then use this order firefox -> edge -> chrome -> librewolf try to get cookies.
Here are the explanations for each field
Fill in false
or true
, default is false
.
If true
is chosen, the translated content will be used to display the question details.
translate = false
When retrieving the submissionlist, how many columns should be displayed.
column = 4
How many recent entries of the submissionlist information should be displayed.
num_sublist = 10
How many questions should be displayed at once when interactively selecting a question.
page_size = 25
Fill in your editor, it will attempt to retrieve it from the environment variables EDITOR and VISUAL, otherwise it will default to vim.
editor = ["vim"]
You can add additional parameters at the end.
editor = ["vim", "--noplugin"]
Set your selected programming language.
lang = "rust"
Set the location for storing code and test cases.
code_dir = "/home/user/.local/share/leetcode-cn-en-cli"
You can also write it like this, starting with ~
code_dir = "~/.local/share/leetcode-cn-en-cli"
Fill in com
or cn
, for set leetcode.com
or leetcode.cn
.
url_suffix = "com"
[support_lang.rust]
start = "//start/"
end = "//end/"
inject_start = ""
inject_end = "struct Solution;\n\nfn main() {\n println!(\"{:#?}\", Solution::function());\n}"
[support_lang.c]
...
will from this generate code template.
can write multi line,"""..."""
or '''...'''
:
inject_end = """struct Solution;
fn main() {
println!("{:#?}", Solution::function());
}"""
Example: 108
// Definition for a binary tree node.
#[derive(Debug, PartialEq, Eq)]
pub struct TreeNode {
pub val: i32,
pub left: Option<Rc<RefCell<TreeNode>>>,
pub right: Option<Rc<RefCell<TreeNode>>>,
}
impl TreeNode {
#[inline]
pub fn new(val: i32) -> Self {
TreeNode {
val,
left: None,
right: None,
}
}
}
//start/
// ...something
use std::cell::RefCell;
use std::rc::Rc;
impl Solution {
pub fn sorted_array_to_bst(mut nums: Vec<i32>) -> Option<Rc<RefCell<TreeNode>>> {
let len = nums.len();
if len == 0 {
return None;
}
let root = Rc::new(RefCell::new(TreeNode::new(nums[len / 2])));
let mut right = nums.split_off(len / 2);
right.remove(0);
root.borrow_mut().left = Self::sorted_array_to_bst(nums);
root.borrow_mut().right = Self::sorted_array_to_bst(right);
Some(root)
}
}
//end/
struct Solution;
fn main() {
println!(
"{:#?}",
Solution::sorted_array_to_bst(vec![-10, -3, 0, 5, 9])
);
}
When submit to leetcode, only content between support_lang.rust.start
and support_lang.rust.start
will be uploaded.
If don't have this will uploaded all content.
Tui Keymap
key | global |
---|---|
Shift-Tab/⬅/➡/Tab | prev/next tab |
Ctrl-l | refresh screen |
Ctrl-q | exit |
key | tab0/select |
---|---|
j/k | down/up question |
gg/G | first/last |
o | open with your editor |
Enter | go to edit tab |
S | sync question information |
key | tab1/edit |
---|---|
j/k | scroll question |
gg/G | question content top/end |
ctrl-p | toggle submit menu |
ctrl-s | toggle submit result |
ctrl-t | toggle test result |
S | Submit code(just show submit menu) |
T | Test code(just show submit menu) |
Please check the Tui interface for specific keymap information.
Fuzzy Search
fuzzy search tui and cli implement is same,in cli paid only is true ,in tui also can input true
/P.O.: tru
for filter.
Database error
Since leetcode.cn
and leetcode.com
obtain different information, database errors may occur after switching between cn and com.
At this time, please re-synchronize the data lcode sync -f
(recommand), or press S on a tab in the Tui interface.
Dependencies
~70MB
~1M SLoC