Updates
This commit is contained in:
Executable
+99
@@ -0,0 +1,99 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
from pathlib import Path
|
||||||
|
import pyperclip
|
||||||
|
import questionary
|
||||||
|
|
||||||
|
# List of directories to exclude
|
||||||
|
EXCLUDED_DIRS = {'node_modules', '.next', '.venv', '.git', '__pycache__', '.idea', '.vscode', 'ui'}
|
||||||
|
|
||||||
|
def collect_files(project_path):
|
||||||
|
"""
|
||||||
|
Collects files from the project directory, excluding specified directories and filtering by extensions.
|
||||||
|
Returns a list of file paths relative to the project directory.
|
||||||
|
"""
|
||||||
|
collected_files = []
|
||||||
|
|
||||||
|
for root, dirs, files in os.walk(project_path):
|
||||||
|
# Exclude specified directories
|
||||||
|
dirs[:] = [d for d in dirs if d not in EXCLUDED_DIRS]
|
||||||
|
|
||||||
|
for file in files:
|
||||||
|
file_path = Path(root) / file
|
||||||
|
relative_path = file_path.relative_to(project_path)
|
||||||
|
collected_files.append(relative_path)
|
||||||
|
|
||||||
|
return collected_files
|
||||||
|
|
||||||
|
def main():
|
||||||
|
# Parse command-line arguments
|
||||||
|
parser = argparse.ArgumentParser(description='Generate Markdown from selected files.')
|
||||||
|
parser.add_argument('path', nargs='?', default='.', help='Path to the project directory')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
project_path = Path(args.path).resolve()
|
||||||
|
if not project_path.is_dir():
|
||||||
|
print(f"Error: '{project_path}' is not a directory.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Collect files from the project directory
|
||||||
|
file_list = collect_files(project_path)
|
||||||
|
|
||||||
|
if not file_list:
|
||||||
|
print("No files found in the project directory with the specified extensions.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Sort file_list for better organization
|
||||||
|
file_list.sort()
|
||||||
|
|
||||||
|
# Interactive file selection using questionary
|
||||||
|
print("\nSelect the files you want to include:")
|
||||||
|
selected_files = questionary.checkbox(
|
||||||
|
"Press space to select files, and Enter when you're done:",
|
||||||
|
choices=[str(f) for f in file_list]
|
||||||
|
).ask()
|
||||||
|
|
||||||
|
if not selected_files:
|
||||||
|
print("No files selected.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Generate markdown
|
||||||
|
markdown_lines = []
|
||||||
|
markdown_lines.append('')
|
||||||
|
|
||||||
|
for selected_file in selected_files:
|
||||||
|
file_path = project_path / selected_file
|
||||||
|
try:
|
||||||
|
with open(file_path, 'r', encoding='utf-8') as f:
|
||||||
|
content = f.read()
|
||||||
|
# Determine the language for code block from file extension
|
||||||
|
language = file_path.suffix.lstrip('.')
|
||||||
|
markdown_lines.append(f'{selected_file}')
|
||||||
|
markdown_lines.append(f'```{language}')
|
||||||
|
markdown_lines.append(content)
|
||||||
|
markdown_lines.append('```')
|
||||||
|
markdown_lines.append('')
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error reading file {selected_file}: {e}")
|
||||||
|
|
||||||
|
markdown_text = '\n'.join(markdown_lines)
|
||||||
|
|
||||||
|
# Copy markdown content to clipboard
|
||||||
|
pyperclip.copy(markdown_text)
|
||||||
|
print("Markdown content has been copied to the clipboard.")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# Check if required libraries are installed
|
||||||
|
try:
|
||||||
|
import questionary
|
||||||
|
import pyperclip
|
||||||
|
except ImportError as e:
|
||||||
|
missing_module = e.name
|
||||||
|
print(f"Error: Missing required module '{missing_module}'.")
|
||||||
|
print(f"Please install it by running: pip install {missing_module}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
main()
|
||||||
Executable
BIN
Binary file not shown.
+10
-1
@@ -10,17 +10,26 @@ export SSH_ASKPASS_REQUIRE=prefer
|
|||||||
export CARGO_PATH="$HOME/.cargo"
|
export CARGO_PATH="$HOME/.cargo"
|
||||||
export BUN_INSTALL="$HOME/.bun"
|
export BUN_INSTALL="$HOME/.bun"
|
||||||
export PYENV_ROOT="$HOME/.pyenv"
|
export PYENV_ROOT="$HOME/.pyenv"
|
||||||
|
export PNPM_HOME="$HOME/.local/share/pnpm"
|
||||||
export NVM_DIR="$HOME/.nvm"
|
export NVM_DIR="$HOME/.nvm"
|
||||||
export ANDROID_SDK_HOME="$HOME/.local/share/Android"
|
export ANDROID_SDK_HOME="$HOME/.local/share/Android"
|
||||||
export GOPATH="$HOME/.local/share/go"
|
export GOPATH="$HOME/.local/share/go"
|
||||||
export DOTNETPATH="$HOME/.dotnet/tools"
|
export DOTNETPATH="$HOME/.dotnet/tools"
|
||||||
|
|
||||||
# Set complete path
|
# Set complete path
|
||||||
export PATH="$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PANAMA_PATH/bin:$BUN_INSTALL/bin:$CARGO_PATH/bin:$PYENV_ROOT/bin:$HOME/.rbenv/bin:/usr/lib/ccache/bin/:$GOPATH/bin:$DOTNETPATH"
|
export PATH="$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PANAMA_PATH/bin:$BUN_INSTALL/bin:$CARGO_PATH/bin:$PNPM_HOME/bin:$PYENV_ROOT/bin:$HOME/.rbenv/bin:/usr/lib/ccache/bin/:$GOPATH/bin:$DOTNETPATH"
|
||||||
|
|
||||||
# Nvm
|
# Nvm
|
||||||
source /etc/profile.d/nvm.sh
|
source /etc/profile.d/nvm.sh
|
||||||
|
|
||||||
|
# Auto-switch Node version when entering a directory with .nvmrc
|
||||||
|
_nvm_auto_use() {
|
||||||
|
if [[ -f .nvmrc ]]; then
|
||||||
|
nvm use --silent
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }_nvm_auto_use"
|
||||||
|
|
||||||
# Zoxide
|
# Zoxide
|
||||||
eval "$(zoxide init bash)"
|
eval "$(zoxide init bash)"
|
||||||
|
|
||||||
|
|||||||
@@ -14,25 +14,79 @@ pcall(vim.keymap.del, "t", "<C-l>")
|
|||||||
pcall(vim.keymap.del, "n", "<leader>l")
|
pcall(vim.keymap.del, "n", "<leader>l")
|
||||||
|
|
||||||
-- Window navigation
|
-- Window navigation
|
||||||
vim.keymap.set({ "n", "v", "x" }, "<leader>h", "<C-w>h", { desc = "Go to left window", silent = true })
|
vim.keymap.set(
|
||||||
vim.keymap.set({ "n", "v", "x" }, "<leader>j", "<C-w>j", { desc = "Go to lower window", silent = true })
|
{ "n", "v", "x" },
|
||||||
vim.keymap.set({ "n", "v", "x" }, "<leader>k", "<C-w>k", { desc = "Go to upper window", silent = true })
|
"<leader>h",
|
||||||
vim.keymap.set({ "n", "v", "x" }, "<leader>l", "<C-w>l", { desc = "Go to right window", silent = true })
|
"<C-w>h",
|
||||||
|
{ desc = "Go to left window", silent = true }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
{ "n", "v", "x" },
|
||||||
|
"<leader>j",
|
||||||
|
"<C-w>j",
|
||||||
|
{ desc = "Go to lower window", silent = true }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
{ "n", "v", "x" },
|
||||||
|
"<leader>k",
|
||||||
|
"<C-w>k",
|
||||||
|
{ desc = "Go to upper window", silent = true }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
{ "n", "v", "x" },
|
||||||
|
"<leader>l",
|
||||||
|
"<C-w>l",
|
||||||
|
{ desc = "Go to right window", silent = true }
|
||||||
|
)
|
||||||
|
|
||||||
-- Buffer tab navigation
|
-- Buffer tab navigation
|
||||||
vim.keymap.set("n", "<C-h>", "<cmd>BufferLineCyclePrev<cr>", { desc = "Previous buffer", silent = true })
|
vim.keymap.set(
|
||||||
vim.keymap.set("n", "<C-l>", "<cmd>BufferLineCycleNext<cr>", { desc = "Next buffer", silent = true })
|
"n",
|
||||||
vim.keymap.set("n", "<C-j>", "<cmd>BufferLineMovePrev<cr>", { desc = "Move buffer left", silent = true })
|
"<C-h>",
|
||||||
vim.keymap.set("n", "<C-k>", "<cmd>BufferLineMoveNext<cr>", { desc = "Move buffer right", silent = true })
|
"<cmd>BufferLineCyclePrev<cr>",
|
||||||
vim.keymap.set("n", "<C-q>", function() Snacks.bufdelete() end, { desc = "Close buffer", silent = true })
|
{ desc = "Previous buffer", silent = true }
|
||||||
vim.keymap.set("n", "<C-a>", function() Snacks.bufdelete.other() end, { desc = "Close other buffers", silent = true })
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
"n",
|
||||||
|
"<C-l>",
|
||||||
|
"<cmd>BufferLineCycleNext<cr>",
|
||||||
|
{ desc = "Next buffer", silent = true }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
"n",
|
||||||
|
"<C-j>",
|
||||||
|
"<cmd>BufferLineMovePrev<cr>",
|
||||||
|
{ desc = "Move buffer left", silent = true }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
"n",
|
||||||
|
"<C-k>",
|
||||||
|
"<cmd>BufferLineMoveNext<cr>",
|
||||||
|
{ desc = "Move buffer right", silent = true }
|
||||||
|
)
|
||||||
|
vim.keymap.set("n", "<C-q>", function()
|
||||||
|
Snacks.bufdelete()
|
||||||
|
end, { desc = "Close buffer", silent = true })
|
||||||
|
vim.keymap.set("n", "<C-a>", function()
|
||||||
|
Snacks.bufdelete.other()
|
||||||
|
end, { desc = "Close other buffers", silent = true })
|
||||||
|
|
||||||
-- Disable ex mode
|
-- Disable ex mode
|
||||||
vim.keymap.set("n", "Q", "<nop>")
|
vim.keymap.set("n", "Q", "<nop>")
|
||||||
|
|
||||||
-- Move selected lines up/down
|
-- Move selected lines up/down
|
||||||
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv", { desc = "Move selection down", silent = true })
|
vim.keymap.set(
|
||||||
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv", { desc = "Move selection up", silent = true })
|
"v",
|
||||||
|
"J",
|
||||||
|
":m '>+1<CR>gv=gv",
|
||||||
|
{ desc = "Move selection down", silent = true }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
"v",
|
||||||
|
"K",
|
||||||
|
":m '<-2<CR>gv=gv",
|
||||||
|
{ desc = "Move selection up", silent = true }
|
||||||
|
)
|
||||||
|
|
||||||
-- Join line without moving cursor
|
-- Join line without moving cursor
|
||||||
vim.keymap.set("n", "J", "mzJ`z", { desc = "Join line, keep cursor" })
|
vim.keymap.set("n", "J", "mzJ`z", { desc = "Join line, keep cursor" })
|
||||||
@@ -48,19 +102,54 @@ vim.keymap.set("n", "N", "Nzzzv", { desc = "Prev search result" })
|
|||||||
-- Yank to system clipboard
|
-- Yank to system clipboard
|
||||||
vim.keymap.set({ "n", "v" }, "<leader>y", '"+y', { desc = "Yank to clipboard" })
|
vim.keymap.set({ "n", "v" }, "<leader>y", '"+y', { desc = "Yank to clipboard" })
|
||||||
vim.keymap.set("n", "<leader>Y", '"+Y', { desc = "Yank line to clipboard" })
|
vim.keymap.set("n", "<leader>Y", '"+Y', { desc = "Yank line to clipboard" })
|
||||||
vim.keymap.set("n", "<leader>YY", ":%y+<CR>", { desc = "Yank buffer to clipboard" })
|
vim.keymap.set(
|
||||||
|
"n",
|
||||||
|
"<leader>YY",
|
||||||
|
":%y+<CR>",
|
||||||
|
{ desc = "Yank buffer to clipboard" }
|
||||||
|
)
|
||||||
|
|
||||||
-- Delete to black hole register (no yank side effect)
|
-- Delete to black hole register (no yank side effect)
|
||||||
vim.keymap.set({ "n", "v" }, "<leader>d", '"_d', { desc = "Delete to black hole" })
|
vim.keymap.set(
|
||||||
vim.keymap.set("n", "<leader>dd", '"_dd', { desc = "Delete line to black hole" })
|
{ "n", "v" },
|
||||||
|
"<leader>d",
|
||||||
|
'"_d',
|
||||||
|
{ desc = "Delete to black hole" }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
"n",
|
||||||
|
"<leader>dd",
|
||||||
|
'"_dd',
|
||||||
|
{ desc = "Delete line to black hole" }
|
||||||
|
)
|
||||||
|
|
||||||
-- Paste from system clipboard
|
-- Paste from system clipboard
|
||||||
vim.keymap.set({ "n", "v", "x" }, "<leader>p", '"+p', { desc = "Paste from clipboard (after)" })
|
vim.keymap.set(
|
||||||
vim.keymap.set({ "n", "v", "x" }, "<leader>P", '"+P', { desc = "Paste from clipboard (before)" })
|
{ "n", "v", "x" },
|
||||||
|
"<leader>p",
|
||||||
|
'"+p',
|
||||||
|
{ desc = "Paste from clipboard (after)" }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
{ "n", "v", "x" },
|
||||||
|
"<leader>P",
|
||||||
|
'"+P',
|
||||||
|
{ desc = "Paste from clipboard (before)" }
|
||||||
|
)
|
||||||
|
|
||||||
-- Paste over selection without overwriting the yank register
|
-- Paste over selection without overwriting the yank register
|
||||||
vim.keymap.set("x", "<leader>v", '"_dP', { desc = "Paste over selection" })
|
vim.keymap.set("x", "<leader>v", '"_dP', { desc = "Paste over selection" })
|
||||||
|
|
||||||
-- Utility
|
-- Utility
|
||||||
vim.keymap.set("n", "<leader><leader>s", ":update<CR>:source<CR>", { desc = "Save and source file" })
|
vim.keymap.set(
|
||||||
vim.keymap.set("n", "<leader><leader>x", ":!chmod +x %<CR>", { desc = "Make file executable" })
|
"n",
|
||||||
|
"<leader>so",
|
||||||
|
":update<CR>:source<CR>",
|
||||||
|
{ desc = "Save and source file" }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
"n",
|
||||||
|
"<leader><leader>x",
|
||||||
|
":!chmod +x %<CR>",
|
||||||
|
{ desc = "Make file executable" }
|
||||||
|
)
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ return {
|
|||||||
bg = colors.terminal_black,
|
bg = colors.terminal_black,
|
||||||
fg = colors.fg,
|
fg = colors.fg,
|
||||||
}
|
}
|
||||||
|
-- Fix LspReference* readability: DiagnosticUnnecessary dims fg for unused
|
||||||
|
-- imports, making text nearly invisible against LspReferenceText's background
|
||||||
|
highlights["LspReferenceText"] = { bg = colors.fg_gutter, fg = colors.fg }
|
||||||
|
highlights["LspReferenceRead"] = { bg = colors.fg_gutter, fg = colors.fg }
|
||||||
|
highlights["LspReferenceWrite"] = { bg = colors.fg_gutter, fg = colors.fg }
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user