commit
69da6d2484
17 changed files with 486 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||||||
|
local keymap = vim.keymap |
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>gs", vim.cmd.Git) |
||||||
|
vim.keymap.set("n", "<leader>ga", vim.cmd.Gwrite, { desc = "Git add" }) |
||||||
|
vim.keymap.set("n", "<leader>gd", vim.cmd.Gdiffsplit) |
||||||
|
keymap.set("n", "<leader>gpl", "<cmd>Git pull<cr>", { desc = "Git pull"}) |
||||||
|
keymap.set("n", "<leader>gpu", "<cmd>15 split | term git push<cr>", {desc = "Git push" }) |
||||||
|
|
||||||
|
-- convert git to Git in command line mode |
||||||
|
-- vim.fn['utils#Cabbrev']('git', 'Git') |
||||||
|
|
||||||
|
|
@ -0,0 +1,3 @@ |
|||||||
|
vim.o.termguicolors = true |
||||||
|
vim.cmd [[ colorscheme gruvbox ]] |
||||||
|
|
@ -0,0 +1,9 @@ |
|||||||
|
local mark = require("harpoon.mark") |
||||||
|
local ui = require("harpoon.ui") |
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>a", mark.add_file) |
||||||
|
vim.keymap.set("n", "<C-e>", ui.toggle_quick_menu) |
||||||
|
|
||||||
|
vim.keymap.set("n", "<C-h>", function() ui.nav_file(1) end) |
||||||
|
vim.keymap.set("n", "<C-t>", function() ui.nav_file(2) end) |
||||||
|
|
@ -0,0 +1,15 @@ |
|||||||
|
require('lualine').setup { |
||||||
|
options = { |
||||||
|
icons_enabled = true, |
||||||
|
theme = 'gruvbox', |
||||||
|
}, |
||||||
|
sections = { |
||||||
|
lualine_a = { |
||||||
|
{ |
||||||
|
'filename', |
||||||
|
path = 1, |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,38 @@ |
|||||||
|
require("mason").setup() |
||||||
|
require("mason-lspconfig").setup({ |
||||||
|
ensure_installed = { "sumneko_lua" } |
||||||
|
}) |
||||||
|
|
||||||
|
local on_attach = function(_,_) |
||||||
|
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, {}) |
||||||
|
vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action, {}) |
||||||
|
|
||||||
|
vim.keymap.set('n', 'gd', vim.lsp.buf.definition, {}) |
||||||
|
vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, {}) |
||||||
|
vim.keymap.set('n', 'gr', require('telescope.builtin').lsp_references, {}) |
||||||
|
vim.keymap.set('n', 'K', vim.lsp.buf.hover, {}) |
||||||
|
|
||||||
|
end |
||||||
|
|
||||||
|
require("lspconfig").sumneko_lua.setup({ |
||||||
|
on_attach = on_attach, |
||||||
|
settings = { |
||||||
|
Lua = { |
||||||
|
runtime = { |
||||||
|
version = 'LuaJIT', |
||||||
|
}, |
||||||
|
diagnostics = { |
||||||
|
globals = {'vim'}, |
||||||
|
}, |
||||||
|
telemetry = { |
||||||
|
enable = false, |
||||||
|
}, |
||||||
|
}, |
||||||
|
}, |
||||||
|
}) |
||||||
|
|
||||||
|
require("lspconfig").elixirls.setup({ |
||||||
|
on_attach = on_attach, |
||||||
|
cmd = {"C:/users/sleek/AppData/Roaming/elixir-ls/language_server.bat"}, |
||||||
|
}) |
||||||
|
|
@ -0,0 +1,7 @@ |
|||||||
|
vim.g.loaded_netrw = 1 |
||||||
|
vim.g.loaded_netrwPlugin = 1 |
||||||
|
|
||||||
|
require("nvim-tree").setup() |
||||||
|
|
||||||
|
vim.keymap.set('n', '<c-n>', ':NvimTreeFindFileToggle<CR>') |
||||||
|
|
@ -0,0 +1,13 @@ |
|||||||
|
|
||||||
|
local builtin = require('telescope.builtin') |
||||||
|
vim.keymap.set('n', '<leader>pf', builtin.find_files, {}) |
||||||
|
vim.keymap.set('n', '<leader><leader>', builtin.oldfiles, {}) |
||||||
|
vim.keymap.set('n', '<C-p>', builtin.git_files, {}) |
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>ps', function() |
||||||
|
builtin.grep_string({ search = vim.fn.input("Grep > ") }); |
||||||
|
end) |
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>fh', builtin.help_tags, {}) |
||||||
|
|
||||||
|
|
@ -0,0 +1,2 @@ |
|||||||
|
vim.keymap.set("n", "<leader>u", vim.cmd.UndotreeToggle) |
||||||
|
|
@ -0,0 +1,21 @@ |
|||||||
|
|
||||||
|
local fn = vim.fn |
||||||
|
local utils = require("julz.utils") |
||||||
|
|
||||||
|
vim.g.is_win = (utils.has("win32") or utils.has("win64")) and true or false |
||||||
|
vim.is_linux = (utils.has("unix") and (not utils.has("macunix"))) and true or false |
||||||
|
vim.g.is_bsd = (jit.os == "BSD") and true or false |
||||||
|
|
||||||
|
if vim.g.is_bsd then |
||||||
|
print("OS is BSD. nvim version:" .. utils.get_nvim_version()) |
||||||
|
end |
||||||
|
|
||||||
|
if vim.g.is_win then |
||||||
|
print("OS is Windows. nvim version:" .. utils.get_nvim_version()) |
||||||
|
end |
||||||
|
|
||||||
|
if vim.g.is_linux then |
||||||
|
print("OS is Linux. nvim version:" .. utils.get_nvim_version()) |
||||||
|
end |
||||||
|
|
||||||
|
|
@ -0,0 +1,6 @@ |
|||||||
|
require("julz.globals") |
||||||
|
require("julz.remap") |
||||||
|
require("julz.set") |
||||||
|
|
||||||
|
-- print("hello from julz") |
||||||
|
|
@ -0,0 +1,48 @@ |
|||||||
|
|
||||||
|
-- This file can be loaded by calling `lua require('plugins')` from your init.vim |
||||||
|
|
||||||
|
-- Only required if you have packer configured as `opt` |
||||||
|
vim.cmd [[packadd packer.nvim]] |
||||||
|
|
||||||
|
return require('packer').startup(function(use) |
||||||
|
-- Packer can manage itself |
||||||
|
use 'wbthomason/packer.nvim' |
||||||
|
|
||||||
|
use { |
||||||
|
'nvim-telescope/telescope.nvim', tag = '0.1.0', |
||||||
|
-- or , branch = '0.1.x', |
||||||
|
requires = { {'nvim-lua/plenary.nvim'} } |
||||||
|
} |
||||||
|
|
||||||
|
-- use({ |
||||||
|
-- 'rose-pine/neovim', |
||||||
|
-- as = 'rose-pine', |
||||||
|
-- config = function() |
||||||
|
-- vim.cmd('colorscheme rose-pine') |
||||||
|
-- end |
||||||
|
-- }) |
||||||
|
|
||||||
|
use 'ellisonleao/gruvbox.nvim' |
||||||
|
use({ |
||||||
|
'nvim-tree/nvim-tree.lua', |
||||||
|
}) |
||||||
|
use 'nvim-tree/nvim-web-devicons' |
||||||
|
use 'nvim-lualine/lualine.nvim' |
||||||
|
|
||||||
|
--use 'nvim-treesitter/nvim-treesitter' |
||||||
|
--use( 'nvim-treesitter/nvim-treesitter', {run = ':TSUpdate'} ) |
||||||
|
|
||||||
|
use( 'tpope/vim-fugitive') |
||||||
|
|
||||||
|
use { |
||||||
|
"williamboman/mason.nvim", |
||||||
|
"williamboman/mason-lspconfig.nvim", |
||||||
|
"neovim/nvim-lspconfig" |
||||||
|
} |
||||||
|
|
||||||
|
use( 'theprimeagen/harpoon' ) |
||||||
|
use( 'mbbill/undotree' ) |
||||||
|
|
||||||
|
|
||||||
|
end) |
||||||
|
|
@ -0,0 +1,50 @@ |
|||||||
|
vim.g.mapleader = " " |
||||||
|
vim.keymap.set("n", "<leader>pv", vim.cmd.Ex) |
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>u", ":Undotreeshow<CR>") |
||||||
|
|
||||||
|
-- Save key strokes (don't require shift to enter command mode) |
||||||
|
vim.keymap.set({ "n", "x"}, ";", ":") |
||||||
|
|
||||||
|
-- Turn word under cursor to upper case |
||||||
|
vim.keymap.set("i", "<c-u>", "<Esc>viwUea") |
||||||
|
|
||||||
|
-- Turn the current word into title case |
||||||
|
vim.keymap.set("i", "<c-t>", "<Esc>b~lea") |
||||||
|
|
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>cd", "<cmd>lcd %:p:h<cr><cmd>pwd<cr>", {desc = "change cwd"}) |
||||||
|
|
||||||
|
-- Switch windows |
||||||
|
vim.keymap.set("n", "<Left>", "<c-w>h") |
||||||
|
vim.keymap.set("n", "<Right>", "<c-w>l") |
||||||
|
vim.keymap.set("n", "<Up>", "<c-w>k") |
||||||
|
vim.keymap.set("n", "<Down>", "<c-w>j") |
||||||
|
|
||||||
|
-- Go to start and end of current line quickly (when in insert mode) |
||||||
|
vim.keymap.set({"n", "i"}, "<C-A>", "<HOME>") |
||||||
|
vim.keymap.set({"n","i"}, "<C-Z>", "<END>") |
||||||
|
|
||||||
|
-- Go to start of command in command-line mode |
||||||
|
vim.keymap.set("c", "<C-A>", "<HOME>") |
||||||
|
|
||||||
|
vim.keymap.set("n", "<leader>cb", function() |
||||||
|
local cnt = 0 |
||||||
|
local blink_times = 7 |
||||||
|
local timer = vim.loop.new_timer() |
||||||
|
|
||||||
|
timer:start(0, 100, vim.schedule_wrap(function() |
||||||
|
vim.cmd[[ |
||||||
|
set cursorcolumn! |
||||||
|
set cursorline! |
||||||
|
]] |
||||||
|
|
||||||
|
if cnt == blink_times then |
||||||
|
timer:close() |
||||||
|
end |
||||||
|
|
||||||
|
cnt = cnt + 1 |
||||||
|
end)) |
||||||
|
end) |
||||||
|
|
||||||
|
|
@ -0,0 +1,32 @@ |
|||||||
|
--vim.opt.guicursor = "" |
||||||
|
|
||||||
|
vim.opt.nu = true |
||||||
|
vim.opt.relativenumber = true |
||||||
|
|
||||||
|
vim.opt.wrap = false |
||||||
|
|
||||||
|
vim.opt.backspace = '2' |
||||||
|
vim.opt.showcmd = true |
||||||
|
vim.opt.laststatus = 2 |
||||||
|
|
||||||
|
-- use spaces for tabs etc |
||||||
|
vim.opt.tabstop = 2 |
||||||
|
vim.opt.shiftwidth = 2 |
||||||
|
vim.opt.shiftround = true |
||||||
|
vim.opt.expandtab = true |
||||||
|
|
||||||
|
vim.opt.swapfile = false |
||||||
|
vim.opt.backup = false |
||||||
|
vim.opt.undodir = os.getenv("HOME").. "/.neovim/undodir" |
||||||
|
vim.opt.undofile = true |
||||||
|
|
||||||
|
vim.opt.termguicolors = true |
||||||
|
|
||||||
|
vim.opt.scrolloff = 8 |
||||||
|
vim.opt.signcolumn = "yes" |
||||||
|
vim.opt.isfname:append("@-@") |
||||||
|
|
||||||
|
vim.opt.updatetime = 50 |
||||||
|
vim.opt.colorcolumn = "80" |
||||||
|
|
||||||
|
|
@ -0,0 +1,67 @@ |
|||||||
|
local fn = vim.fn |
||||||
|
|
||||||
|
local M = {} |
||||||
|
|
||||||
|
function M.executable(name) |
||||||
|
if fn.executable(name) > 0 then |
||||||
|
return true |
||||||
|
end |
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
--- check whether a feature exists in Nvim |
||||||
|
--- @feat: string |
||||||
|
--- the feature name, like `nvim-0.7` or `unix`. |
||||||
|
--- return: bool |
||||||
|
M.has = function(feat) |
||||||
|
if fn.has(feat) == 1 then |
||||||
|
return true |
||||||
|
end |
||||||
|
|
||||||
|
|
||||||
|
return false |
||||||
|
end |
||||||
|
|
||||||
|
--- Create a dir if it does not exist |
||||||
|
function M.may_create_dir(dir) |
||||||
|
local res = fn.isdirectory(dir) |
||||||
|
|
||||||
|
if res == 0 then |
||||||
|
fn.mkdir(dir, "p") |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
function M.get_nvim_version() |
||||||
|
local actual_ver = vim.version() |
||||||
|
|
||||||
|
local nvim_ver_str = string.format("%d.%d.%d", actual_ver.major, actual_ver.minor, actual_ver.patch) |
||||||
|
return nvim_ver_str |
||||||
|
end |
||||||
|
|
||||||
|
--- Generate random integers in the range [Low, High], inclusive, |
||||||
|
--- adapted from https://stackoverflow.com/a/12739441/6064933 |
||||||
|
--- @low: the lower value for this range |
||||||
|
--- @high: the upper value for this range |
||||||
|
function M.rand_int(low, high) |
||||||
|
-- Use lua to generate random int, see also: https://stackoverflow.com/a/20157671/6064933 |
||||||
|
math.randomseed(os.time()) |
||||||
|
|
||||||
|
return math.random(low, high) |
||||||
|
end |
||||||
|
|
||||||
|
--- Select a random element from a sequence/list. |
||||||
|
--- @seq: the sequence to choose an element |
||||||
|
function M.rand_element(seq) |
||||||
|
local idx = M.rand_int(1, #seq) |
||||||
|
|
||||||
|
return seq[idx] |
||||||
|
end |
||||||
|
|
||||||
|
function M.add_pack(name) |
||||||
|
local status, error = pcall(vim.cmd, "packadd " .. name) |
||||||
|
|
||||||
|
return status |
||||||
|
end |
||||||
|
|
||||||
|
return M |
||||||
|
|
@ -0,0 +1,159 @@ |
|||||||
|
-- Automatically generated packer.nvim plugin loader code |
||||||
|
|
||||||
|
if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then |
||||||
|
vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') |
||||||
|
return |
||||||
|
end |
||||||
|
|
||||||
|
vim.api.nvim_command('packadd packer.nvim') |
||||||
|
|
||||||
|
local no_errors, error_msg = pcall(function() |
||||||
|
|
||||||
|
_G._packer = _G._packer or {} |
||||||
|
_G._packer.inside_compile = true |
||||||
|
|
||||||
|
local time |
||||||
|
local profile_info |
||||||
|
local should_profile = false |
||||||
|
if should_profile then |
||||||
|
local hrtime = vim.loop.hrtime |
||||||
|
profile_info = {} |
||||||
|
time = function(chunk, start) |
||||||
|
if start then |
||||||
|
profile_info[chunk] = hrtime() |
||||||
|
else |
||||||
|
profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 |
||||||
|
end |
||||||
|
end |
||||||
|
else |
||||||
|
time = function(chunk, start) end |
||||||
|
end |
||||||
|
|
||||||
|
local function save_profiles(threshold) |
||||||
|
local sorted_times = {} |
||||||
|
for chunk_name, time_taken in pairs(profile_info) do |
||||||
|
sorted_times[#sorted_times + 1] = {chunk_name, time_taken} |
||||||
|
end |
||||||
|
table.sort(sorted_times, function(a, b) return a[2] > b[2] end) |
||||||
|
local results = {} |
||||||
|
for i, elem in ipairs(sorted_times) do |
||||||
|
if not threshold or threshold and elem[2] > threshold then |
||||||
|
results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' |
||||||
|
end |
||||||
|
end |
||||||
|
if threshold then |
||||||
|
table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') |
||||||
|
end |
||||||
|
|
||||||
|
_G._packer.profile_output = results |
||||||
|
end |
||||||
|
|
||||||
|
time([[Luarocks path setup]], true) |
||||||
|
local package_path_str = "C:\\Users\\sleek\\AppData\\Local\\Temp\\nvim\\packer_hererocks\\2.1.0-beta3\\share\\lua\\5.1\\?.lua;C:\\Users\\sleek\\AppData\\Local\\Temp\\nvim\\packer_hererocks\\2.1.0-beta3\\share\\lua\\5.1\\?\\init.lua;C:\\Users\\sleek\\AppData\\Local\\Temp\\nvim\\packer_hererocks\\2.1.0-beta3\\lib\\luarocks\\rocks-5.1\\?.lua;C:\\Users\\sleek\\AppData\\Local\\Temp\\nvim\\packer_hererocks\\2.1.0-beta3\\lib\\luarocks\\rocks-5.1\\?\\init.lua" |
||||||
|
local install_cpath_pattern = "C:\\Users\\sleek\\AppData\\Local\\Temp\\nvim\\packer_hererocks\\2.1.0-beta3\\lib\\lua\\5.1\\?.so" |
||||||
|
if not string.find(package.path, package_path_str, 1, true) then |
||||||
|
package.path = package.path .. ';' .. package_path_str |
||||||
|
end |
||||||
|
|
||||||
|
if not string.find(package.cpath, install_cpath_pattern, 1, true) then |
||||||
|
package.cpath = package.cpath .. ';' .. install_cpath_pattern |
||||||
|
end |
||||||
|
|
||||||
|
time([[Luarocks path setup]], false) |
||||||
|
time([[try_loadstring definition]], true) |
||||||
|
local function try_loadstring(s, component, name) |
||||||
|
local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) |
||||||
|
if not success then |
||||||
|
vim.schedule(function() |
||||||
|
vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) |
||||||
|
end) |
||||||
|
end |
||||||
|
return result |
||||||
|
end |
||||||
|
|
||||||
|
time([[try_loadstring definition]], false) |
||||||
|
time([[Defining packer_plugins]], true) |
||||||
|
_G.packer_plugins = { |
||||||
|
["gruvbox.nvim"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\gruvbox.nvim", |
||||||
|
url = "https://github.com/ellisonleao/gruvbox.nvim" |
||||||
|
}, |
||||||
|
harpoon = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\harpoon", |
||||||
|
url = "https://github.com/theprimeagen/harpoon" |
||||||
|
}, |
||||||
|
["lualine.nvim"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\lualine.nvim", |
||||||
|
url = "https://github.com/nvim-lualine/lualine.nvim" |
||||||
|
}, |
||||||
|
["mason-lspconfig.nvim"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\mason-lspconfig.nvim", |
||||||
|
url = "https://github.com/williamboman/mason-lspconfig.nvim" |
||||||
|
}, |
||||||
|
["mason.nvim"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\mason.nvim", |
||||||
|
url = "https://github.com/williamboman/mason.nvim" |
||||||
|
}, |
||||||
|
["nvim-lspconfig"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\nvim-lspconfig", |
||||||
|
url = "https://github.com/neovim/nvim-lspconfig" |
||||||
|
}, |
||||||
|
["nvim-tree.lua"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\nvim-tree.lua", |
||||||
|
url = "https://github.com/nvim-tree/nvim-tree.lua" |
||||||
|
}, |
||||||
|
["nvim-web-devicons"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\nvim-web-devicons", |
||||||
|
url = "https://github.com/nvim-tree/nvim-web-devicons" |
||||||
|
}, |
||||||
|
["packer.nvim"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\packer.nvim", |
||||||
|
url = "https://github.com/wbthomason/packer.nvim" |
||||||
|
}, |
||||||
|
["plenary.nvim"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\plenary.nvim", |
||||||
|
url = "https://github.com/nvim-lua/plenary.nvim" |
||||||
|
}, |
||||||
|
["telescope.nvim"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\telescope.nvim", |
||||||
|
url = "https://github.com/nvim-telescope/telescope.nvim" |
||||||
|
}, |
||||||
|
undotree = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\undotree", |
||||||
|
url = "https://github.com/mbbill/undotree" |
||||||
|
}, |
||||||
|
["vim-fugitive"] = { |
||||||
|
loaded = true, |
||||||
|
path = "C:\\Users\\sleek\\AppData\\Local\\nvim-data\\site\\pack\\packer\\start\\vim-fugitive", |
||||||
|
url = "https://github.com/tpope/vim-fugitive" |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
time([[Defining packer_plugins]], false) |
||||||
|
|
||||||
|
_G._packer.inside_compile = false |
||||||
|
if _G._packer.needs_bufread == true then |
||||||
|
vim.cmd("doautocmd BufRead") |
||||||
|
end |
||||||
|
_G._packer.needs_bufread = false |
||||||
|
|
||||||
|
if should_profile then save_profiles() end |
||||||
|
|
||||||
|
end) |
||||||
|
|
||||||
|
if not no_errors then |
||||||
|
error_msg = error_msg:gsub('"', '\\"') |
||||||
|
vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') |
||||||
|
end |
Loading…
Reference in new issue