Compare commits
4 commits
ecd2f63c92
...
29e053af75
| Author | SHA1 | Date | |
|---|---|---|---|
| 29e053af75 | |||
| 5a2f500fca | |||
| 4a079ad19d | |||
| b197b7e2bc |
14 changed files with 714 additions and 457 deletions
|
|
@ -30,6 +30,11 @@ vimdiff() {
|
|||
stty "$STTYOPTS"
|
||||
}
|
||||
|
||||
# Neovim shortcuts
|
||||
alias nv='nvim'
|
||||
alias nvimr='nvim -R'
|
||||
alias nvim-config='nvim ~/.config/nvim/init.lua'
|
||||
|
||||
# yay without parameters does "pacman -Syu" but I don't want it to do this
|
||||
yay() {
|
||||
[[ $# -gt 0 ]] || { echo "error: no operation specified (use -h for help)"; return 1; }
|
||||
|
|
@ -54,6 +59,7 @@ function cdll() {
|
|||
}
|
||||
|
||||
# Show content of something, `ls` for dirs (and special files), `cat` for files
|
||||
# TODO: actually `highlight` for fancy colors
|
||||
function lscat() {
|
||||
[[ $# -eq 0 ]] && ls -la && return
|
||||
printnewline=""
|
||||
|
|
|
|||
128
.config/nvim/init.lua
Normal file
128
.config/nvim/init.lua
Normal file
|
|
@ -0,0 +1,128 @@
|
|||
-- Config shortcuts
|
||||
local o = vim.o
|
||||
local opt = vim.opt
|
||||
local keymap = vim.keymap
|
||||
|
||||
|
||||
------------------
|
||||
-- GENERAL OPTIONS
|
||||
------------------
|
||||
|
||||
-- Line numbers
|
||||
o.number = true
|
||||
o.relativenumber = true
|
||||
|
||||
-- Highlight the cursor line
|
||||
o.cursorline = true
|
||||
|
||||
-- Amount of screen lines that should be visible above/below the cursor
|
||||
o.scrolloff = 8
|
||||
|
||||
-- Show tabs and trailing spaces
|
||||
o.list = true
|
||||
|
||||
-- Wrap lines at word boundaries
|
||||
o.linebreak = true
|
||||
|
||||
-- Case insensitive search (except when explicitly using uppercase letters)
|
||||
o.ignorecase = true
|
||||
o.smartcase = true
|
||||
|
||||
-- Indentation settings
|
||||
o.smartindent = true
|
||||
o.expandtab = true
|
||||
o.shiftwidth = 4
|
||||
o.softtabstop = -1
|
||||
|
||||
-- Don't auto-insert comment leader when entering insert mode with o/O
|
||||
vim.api.nvim_create_autocmd('FileType', {
|
||||
command = 'set formatoptions-=o',
|
||||
})
|
||||
|
||||
|
||||
-------------
|
||||
-- FILE TYPES
|
||||
-------------
|
||||
|
||||
vim.filetype.add {
|
||||
extension = {
|
||||
gitconfig = 'gitconfig',
|
||||
},
|
||||
}
|
||||
|
||||
-- HTML formatting
|
||||
vim.g.html_indent_autotags = 'html,body'
|
||||
vim.g.html_indent_inctags = 'p'
|
||||
|
||||
|
||||
-----------
|
||||
-- MAPPINGS
|
||||
-----------
|
||||
|
||||
-- For keys that are safe to be mapped, see: https://vim.fandom.com/wiki/Unused_keys
|
||||
|
||||
-- Exit insert mode with jk
|
||||
keymap.set('i', 'jk', '<Esc>')
|
||||
|
||||
-- Quick exit with Ctrl-q
|
||||
keymap.set('n', '<C-q>', ':q<CR>')
|
||||
|
||||
-- Quick save all open buffers with Ctrl-s
|
||||
keymap.set('n', '<C-s>', ':wall<CR>')
|
||||
keymap.set('i', '<C-s>', '<C-o>:wall<CR>')
|
||||
|
||||
-- Simple copy and paste to/from system clipboard with Ctrl-c in visual mode
|
||||
-- and Ctrl-v in insert mode
|
||||
keymap.set('v', '<C-c>', '"+y')
|
||||
keymap.set('i', '<C-v>', '<C-\\><C-o>"+P')
|
||||
|
||||
-- Navigate between windows with Alt and hjkl
|
||||
keymap.set('n', '<A-h>', '<C-w>h')
|
||||
keymap.set('n', '<A-j>', '<C-w>j')
|
||||
keymap.set('n', '<A-k>', '<C-w>k')
|
||||
keymap.set('n', '<A-l>', '<C-w>l')
|
||||
|
||||
-- Resize windows with Alt and arrow keys
|
||||
keymap.set('n', '<A-Up>', '<C-w>2-')
|
||||
keymap.set('n', '<A-Down>', '<C-w>2+')
|
||||
keymap.set('n', '<A-Left>', '<C-w>4<')
|
||||
keymap.set('n', '<A-Right>', '<C-w>4>')
|
||||
|
||||
-- Shortcuts for jumping to start of line (H) or end of line (L)
|
||||
keymap.set({'n', 'x'}, 'H', '^')
|
||||
keymap.set({'n', 'x'}, 'L', '$')
|
||||
|
||||
-- Use comma (,) as a "modifier prefix" for alternative functions of regular
|
||||
-- commands (e.g. yank to system clipboard) or for random shortcuts.
|
||||
-- TODO: Comma or semicolon or single quote?
|
||||
keymap.set({'n', 'x'}, ',', '<Nop>')
|
||||
|
||||
-- Prefix yank/delete/change/paste commands with "," to use system clipboard
|
||||
keymap.set({'n', 'x'}, ',y', '"+y')
|
||||
keymap.set({'n', 'x'}, ',Y', '"+y$')
|
||||
keymap.set({'n', 'x'}, ',d', '"+d')
|
||||
keymap.set({'n', 'x'}, ',D', '"+D')
|
||||
keymap.set({'n', 'x'}, ',c', '"+c')
|
||||
keymap.set({'n', 'x'}, ',C', '"+C')
|
||||
keymap.set({'n', 'x'}, ',p', '"+p')
|
||||
keymap.set({'n', 'x'}, ',P', '"+P')
|
||||
|
||||
-- Insert empty line(s) below or above current line without moving the cursor
|
||||
keymap.set('n', ',o', function()
|
||||
local line = vim.api.nvim_win_get_cursor(0)[1]
|
||||
local repeated = vim.fn['repeat']({''}, vim.v.count1)
|
||||
vim.api.nvim_buf_set_lines(0, line, line, true, repeated)
|
||||
end)
|
||||
keymap.set('n', ',O', function()
|
||||
local line = vim.api.nvim_win_get_cursor(0)[1] - 1
|
||||
local repeated = vim.fn['repeat']({''}, vim.v.count1)
|
||||
vim.api.nvim_buf_set_lines(0, line, line, true, repeated)
|
||||
end)
|
||||
|
||||
|
||||
----------
|
||||
-- PLUGINS
|
||||
----------
|
||||
|
||||
require('init.theme')
|
||||
require('init.plugins')
|
||||
103
.config/nvim/lua/init/plugins.lua
Normal file
103
.config/nvim/lua/init/plugins.lua
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
-- Config shortcuts
|
||||
local keymap = vim.keymap
|
||||
local vr = vim.version.range
|
||||
|
||||
|
||||
------------------
|
||||
-- INSTALL PLUGINS
|
||||
------------------
|
||||
|
||||
vim.pack.add {
|
||||
-- Better code completion
|
||||
{ src = 'https://github.com/saghen/blink.cmp', version = vr '1.*' },
|
||||
|
||||
-- Better marks
|
||||
'https://github.com/chentoast/marks.nvim',
|
||||
|
||||
-- Surround selections with quotes etc.
|
||||
{ src = 'https://github.com/kylechui/nvim-surround', version = vr '4.*' },
|
||||
|
||||
-- Substitute and exchange operator
|
||||
'https://github.com/gbprod/substitute.nvim',
|
||||
|
||||
-- Highlight todo comments
|
||||
'https://github.com/folke/todo-comments.nvim',
|
||||
|
||||
-- Highlight colors (hex codes etc.)
|
||||
'https://github.com/brenoprata10/nvim-highlight-colors',
|
||||
}
|
||||
|
||||
|
||||
---------------------
|
||||
-- INITIALIZE PLUGINS
|
||||
---------------------
|
||||
|
||||
-- Better code completion
|
||||
require('blink.cmp').setup {
|
||||
keymap = {
|
||||
preset = 'super-tab',
|
||||
},
|
||||
cmdline = {
|
||||
keymap = {
|
||||
preset = 'inherit',
|
||||
['<Tab>'] = {
|
||||
'show',
|
||||
'select_and_accept',
|
||||
'fallback',
|
||||
},
|
||||
},
|
||||
completion = {
|
||||
menu = { auto_show = true },
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
-- Better marks
|
||||
require('marks').setup {
|
||||
-- Show builtin marks in gutter: last jump position (`), last change (.),
|
||||
-- last selection in visual mode (</>).
|
||||
-- TODO: See which of those are really helpful and remove the others.
|
||||
builtin_marks = { '`', '.', '<', '>' },
|
||||
}
|
||||
|
||||
|
||||
-- Surround selections with quotes etc.
|
||||
require('nvim-surround').setup {}
|
||||
|
||||
|
||||
-- Substitute and exchange operator
|
||||
local substitute = require('substitute')
|
||||
substitute.setup {}
|
||||
|
||||
-- ... Use "s" key for substitute (by default "s" is equivalent to "cl")
|
||||
keymap.set('n', 's', substitute.operator)
|
||||
keymap.set('n', 'ss', substitute.line)
|
||||
keymap.set('n', 'S', substitute.eol)
|
||||
keymap.set('x', 's', substitute.visual)
|
||||
|
||||
-- ... Prefix with "," to use system clipboard (remap to use the substitute mappings above)
|
||||
keymap.set({'n', 'x'}, ',s', '"+s', { remap = true })
|
||||
keymap.set({'n', 'x'}, ',S', '"+S', { remap = true })
|
||||
|
||||
|
||||
-- Highlight todo comments
|
||||
require('todo-comments').setup {
|
||||
-- Disable gutter icons
|
||||
signs = false,
|
||||
|
||||
-- Customize highlighting
|
||||
highlight = {
|
||||
before = '',
|
||||
-- By default ("wide"), the surrounding space and colon are highlighted too,
|
||||
-- which makes the colon invisible
|
||||
keyword = 'bg',
|
||||
after = 'fg',
|
||||
-- Highlight keywords always, not just when followed by a colon (the default)
|
||||
pattern = '<(KEYWORDS)>',
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
-- Highlight colors (hex codes etc.)
|
||||
require('nvim-highlight-colors').setup {}
|
||||
36
.config/nvim/lua/init/theme.lua
Normal file
36
.config/nvim/lua/init/theme.lua
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
-- Install theme plugins
|
||||
vim.pack.add {
|
||||
{ src = 'https://github.com/rebelot/kanagawa.nvim', name = 'kanagawa' },
|
||||
-- { src = 'https://github.com/rose-pine/neovim', name = 'rose-pine' },
|
||||
-- { src = 'https://github.com/nickkadutskyi/jb.nvim', name = 'jetbrains-theme' },
|
||||
}
|
||||
|
||||
-- Initialize and customize themes
|
||||
require('kanagawa').setup {
|
||||
-- Compile colorscheme for fast startup times.
|
||||
-- Note: When changing the theme, make sure to run `:KanagawaCompile` afterwards!
|
||||
compile = true,
|
||||
|
||||
-- Dim inactive windows
|
||||
dimInactive = true,
|
||||
|
||||
-- Customize colors
|
||||
colors = {
|
||||
theme = {
|
||||
all = {
|
||||
ui = {
|
||||
-- Disable background of gutter (line numbers etc.)
|
||||
bg_gutter = 'none',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
--require('rose-pine').setup {}
|
||||
--require('jb').setup {}
|
||||
|
||||
-- Enable theme
|
||||
vim.cmd.colorscheme('kanagawa')
|
||||
--vim.cmd.colorscheme('rose-pine')
|
||||
--vim.cmd.colorscheme('jb')
|
||||
34
.config/nvim/nvim-pack-lock.json
Normal file
34
.config/nvim/nvim-pack-lock.json
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"plugins": {
|
||||
"blink.cmp": {
|
||||
"rev": "78336bc89ee5365633bcf754d93df01678b5c08f",
|
||||
"src": "https://github.com/saghen/blink.cmp",
|
||||
"version": "1.0.0 - 2.0.0"
|
||||
},
|
||||
"kanagawa": {
|
||||
"rev": "bb85e4bfc8d89b0e62c8fa53ccdd13d12e2f77b3",
|
||||
"src": "https://github.com/rebelot/kanagawa.nvim"
|
||||
},
|
||||
"marks.nvim": {
|
||||
"rev": "f353e8c08c50f39e99a9ed474172df7eddd89b72",
|
||||
"src": "https://github.com/chentoast/marks.nvim"
|
||||
},
|
||||
"nvim-highlight-colors": {
|
||||
"rev": "e4c7af0211866162d999ce0bdd6a029302e19139",
|
||||
"src": "https://github.com/brenoprata10/nvim-highlight-colors"
|
||||
},
|
||||
"nvim-surround": {
|
||||
"rev": "2e93e154de9ff326def6480a4358bfc149d5da2c",
|
||||
"src": "https://github.com/kylechui/nvim-surround",
|
||||
"version": "4.0.0 - 5.0.0"
|
||||
},
|
||||
"substitute.nvim": {
|
||||
"rev": "0d2077398552f069abccbd964a26dd7cd26882cd",
|
||||
"src": "https://github.com/gbprod/substitute.nvim"
|
||||
},
|
||||
"todo-comments.nvim": {
|
||||
"rev": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668",
|
||||
"src": "https://github.com/folke/todo-comments.nvim"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -14,3 +14,10 @@ export WINEDLLOVERRIDES=winemenubuilder.exe=d
|
|||
|
||||
# Firefox: Enable pixel-perfect scrolling
|
||||
export MOZ_USE_XINPUT2=1
|
||||
|
||||
# Set dark theme for Gtk applications
|
||||
export GTK_THEME=Adwaita:dark
|
||||
|
||||
# Use qt6ct to configure Qt styling
|
||||
# (You should install qt6ct-kde from AUR, as well as the breeze theme.)
|
||||
export QT_QPA_PLATFORMTHEME=qt6ct
|
||||
|
|
|
|||
149
.vimrc
149
.vimrc
|
|
@ -1,9 +1,24 @@
|
|||
" Visual settings
|
||||
set t_Co=16
|
||||
set bg=dark
|
||||
set number
|
||||
highlight LineNr ctermfg=darkgrey
|
||||
|
||||
" Disable beeping on console
|
||||
set belloff=all
|
||||
|
||||
" Mouse settings
|
||||
set mouse=a
|
||||
|
||||
" Line numbers
|
||||
set number
|
||||
set relativenumber
|
||||
|
||||
" Amount of screen lines that should be visible above/below the cursor
|
||||
set scrolloff=5
|
||||
|
||||
" Wrap lines at word boundaries
|
||||
set linebreak
|
||||
|
||||
" Syntax highlighting
|
||||
syntax on
|
||||
set hlsearch
|
||||
|
|
@ -12,12 +27,11 @@ set hlsearch
|
|||
set ignorecase
|
||||
set smartcase
|
||||
|
||||
" Indentation options (yeah let's switch to spaces instead of tabs I guess...)
|
||||
set autoindent
|
||||
" Indentation settings
|
||||
set smartindent
|
||||
set expandtab
|
||||
set shiftwidth=4
|
||||
set tabstop=4
|
||||
set softtabstop=4
|
||||
set softtabstop=-1
|
||||
|
||||
" Activate filetype plugin (e.g. for automatically using tabs instead of spaces in Makefiles)
|
||||
filetype plugin on
|
||||
|
|
@ -29,120 +43,49 @@ autocmd BufNewFile,BufRead *.rasi set syntax=scss
|
|||
" Indentation for YAML (use 2 spaces)
|
||||
autocmd FileType yml,yaml setlocal sts=2 sw=2
|
||||
|
||||
" Mouse settings
|
||||
set mouse=a
|
||||
|
||||
" Disable beeping on console
|
||||
set belloff=all
|
||||
|
||||
" Do not insert comment leader when entering insert mode with 'o'/'O' in comment line
|
||||
autocmd BufNewFile,BufRead * set formatoptions-=o
|
||||
|
||||
" clang autocomplete: do not open completion box automatically
|
||||
let g:clang_complete_auto=0
|
||||
|
||||
|
||||
" Disable middle mouse button paste when in normal mode
|
||||
map <MiddleMouse> <Nop>
|
||||
map <2-MiddleMouse> <Nop>
|
||||
map <3-MiddleMouse> <Nop>
|
||||
map <4-MiddleMouse> <Nop>
|
||||
|
||||
|
||||
" Keyboard mappings
|
||||
" -----------------
|
||||
nnoremap <C-L> :nohl<CR>:diffupdate<CR><C-L>
|
||||
|
||||
nnoremap <C-l> :nohl<CR>:diffupdate<CR><C-l>
|
||||
set pastetoggle=<F2>
|
||||
|
||||
" Toggle line numbers
|
||||
nnoremap <F3> :set number!<CR>
|
||||
" Exit insert mode with jk
|
||||
inoremap jk <Esc>
|
||||
|
||||
" If the current buffer has never been saved, it will have no name,
|
||||
" call the file browser to save it, otherwise just save it.
|
||||
command! -nargs=0 -bar Update if &modified
|
||||
\| if empty(bufname('%'))
|
||||
\| browse confirm write
|
||||
\| else
|
||||
\| confirm write
|
||||
\| endif
|
||||
\|endif
|
||||
" Quick exit with Ctrl-q
|
||||
nnoremap <C-q> :q<CR>
|
||||
nnoremap Q <Nop>
|
||||
|
||||
" Bind <C-S> to save
|
||||
nnoremap <silent> <C-s> :<C-u>Update<CR>
|
||||
inoremap <C-s> <C-o>:Update<CR>
|
||||
" Quick save all open buffers with Ctrl-S
|
||||
nnoremap <C-s> :wall<CR>
|
||||
inoremap <C-s> <C-o>:wall<CR>
|
||||
|
||||
" Simple copy and paste to/from system clipboard with Ctrl-c in visual mode
|
||||
" and Ctrl-v in insert mode
|
||||
vnoremap <C-c> "+y
|
||||
inoremap <C-v> <C-\><C-o>"+P
|
||||
|
||||
" sudo-write with :w!!
|
||||
cnoremap w!! w !sudo tee >/dev/null %
|
||||
|
||||
" Edit (\ev) and reload (\rv) .vimrc (reload .gvimrc if running gvim)
|
||||
nnoremap <leader>ev :split $MYVIMRC<CR>
|
||||
if has('gui_running')
|
||||
nnoremap <leader>rv :source $MYVIMRC<CR>:source $MYGVIMRC<CR>
|
||||
else
|
||||
nnoremap <leader>rv :source $MYVIMRC<CR>
|
||||
endif
|
||||
|
||||
" Split line at cursor with <C-J> (as opposite of <Shift-J> for join lines)
|
||||
nnoremap <C-J> i<CR><Esc>k$
|
||||
|
||||
|
||||
" Easier buffer switching
|
||||
" -----------------------
|
||||
" Mappings to access buffers (don't use "\p" because a
|
||||
" delay before pressing "p" would accidentally paste).
|
||||
" \l : list buffers
|
||||
" \b \n \g : go back/forward/last-used
|
||||
" \1 \2 \3 : go to buffer 1/2/3 etc
|
||||
nnoremap <Leader>l :ls<CR>
|
||||
nnoremap <Leader>b :bp<CR>
|
||||
nnoremap <Leader>n :bn<CR>
|
||||
nnoremap <Leader>g :e#<CR>
|
||||
nnoremap <Leader>1 :1b<CR>
|
||||
nnoremap <Leader>2 :2b<CR>
|
||||
nnoremap <Leader>3 :3b<CR>
|
||||
nnoremap <Leader>4 :4b<CR>
|
||||
nnoremap <Leader>5 :5b<CR>
|
||||
nnoremap <Leader>6 :6b<CR>
|
||||
nnoremap <Leader>7 :7b<CR>
|
||||
nnoremap <Leader>8 :8b<CR>
|
||||
nnoremap <Leader>9 :9b<CR>
|
||||
nnoremap <Leader>0 :10b<CR>
|
||||
|
||||
" Compiling and making
|
||||
nnoremap <F9> :up<CR>:make<CR>:redraw! \| cw<CR>
|
||||
nnoremap <F10> :up<CR>:make run<CR>:redraw! \| cw<CR>
|
||||
|
||||
" Tab buffers
|
||||
nnoremap <F12> :tab ball<CR>
|
||||
|
||||
" Tab movement
|
||||
noremap <A-[> :-tabmove<CR>
|
||||
noremap <A-]> :+tabmove<CR>
|
||||
|
||||
" Use comma (,) as a "modifier prefix" for alternative functions of regular
|
||||
" commands (e.g. yank to system clipboard) or for random shortcuts.
|
||||
noremap , <Nop>
|
||||
|
||||
" -- Shortcuts for insert mode
|
||||
" Exit insert mode
|
||||
imap ,, <ESC>
|
||||
imap jk <ESC>
|
||||
inoremap <A-,> <ESC>
|
||||
|
||||
" Quick movement with Alt-h/j/k/l
|
||||
inoremap <A-h> <C-o>h
|
||||
inoremap <A-j> <C-o>j
|
||||
inoremap <A-k> <C-o>k
|
||||
inoremap <A-l> <C-o>l
|
||||
|
||||
" Unindent with Shift-Tab
|
||||
inoremap <S-Tab> <C-o><<
|
||||
|
||||
" Copy to and paste from X clipboard (Ctrl-C in visual mode and Ctrl-V in insert mode)
|
||||
vmap <C-C> "+y
|
||||
imap <C-V> <C-\><C-O>"+P
|
||||
|
||||
" Undo in insert mode with Ctrl-U
|
||||
imap <C-U> <C-O>u
|
||||
|
||||
" Quick exit
|
||||
map Q :qa<CR>
|
||||
" Because I always type q: too fast, which opens the command history...
|
||||
map q: :q
|
||||
" Prefix yank/delete/change/paste commands with "," to use system clipboard
|
||||
noremap ,y "+y
|
||||
noremap ,Y "+y$
|
||||
noremap ,d "+d
|
||||
noremap ,D "+D
|
||||
noremap ,c "+c
|
||||
noremap ,C "+C
|
||||
noremap ,p "+p
|
||||
noremap ,P "+P
|
||||
|
|
|
|||
10
bin/dotfiles
10
bin/dotfiles
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
##
|
||||
## binaryDiv's dotfiles management script
|
||||
## Version 0.5.2
|
||||
## Version 0.5.3
|
||||
##
|
||||
|
||||
usage() {
|
||||
cat <<- END_OF_HELPTEXT
|
||||
cat << END_OF_HELPTEXT
|
||||
Usage: $(basename $0) COMMAND [...]
|
||||
Manage dotfiles via git.
|
||||
|
||||
|
|
@ -37,7 +37,7 @@ usage() {
|
|||
Synchronization:
|
||||
git ARGS... wrapper for git (all arguments are passed on to git)
|
||||
pull shortcut for git pull
|
||||
END_OF_HELPTEXT
|
||||
END_OF_HELPTEXT
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -314,7 +314,7 @@ case "$cmd" in
|
|||
;;
|
||||
|
||||
bash-completion)
|
||||
cat <<- 'END_OF_BASHCOMPLETION'
|
||||
cat << 'END_OF_BASHCOMPLETION'
|
||||
_dotfiles_filenames() {
|
||||
compopt -o filenames
|
||||
files=($(compgen -f -X '*/@(.|..|.git)' .dotfiles/$cur))
|
||||
|
|
@ -365,7 +365,7 @@ case "$cmd" in
|
|||
}
|
||||
|
||||
complete -F _dotfiles dotfiles
|
||||
END_OF_BASHCOMPLETION
|
||||
END_OF_BASHCOMPLETION
|
||||
;;
|
||||
|
||||
*)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue