Reformated files

This commit is contained in:
Kristofers Solo 2022-06-01 15:09:09 +00:00
parent da5f9ad0f1
commit 897fbd4666
15 changed files with 1577 additions and 1644 deletions

View File

@ -29,12 +29,15 @@
"terminal.integrated.fontFamily": "JetBrainsMono NF", "terminal.integrated.fontFamily": "JetBrainsMono NF",
"terminal.integrated.defaultProfile.linux": "zsh", "terminal.integrated.defaultProfile.linux": "zsh",
"cSpell.userWords": [ "cSpell.userWords": [
"alacritty",
"blit", "blit",
"Cagulis", "Cagulis",
"Cena", "Cena",
"cenu", "cenu",
"cirala",
"dirnx", "dirnx",
"dirny", "dirny",
"dotfiles",
"grafiki", "grafiki",
"Istabu", "Istabu",
"Izvietošanas", "Izvietošanas",
@ -42,10 +45,14 @@
"Kristiāns", "Kristiāns",
"Kristofers", "Kristofers",
"Kvadratūra", "Kvadratūra",
"lfimg",
"nsxiv",
"nvim",
"pathlib", "pathlib",
"pygame", "pygame",
"roboto", "roboto",
"Sērija", "Sērija",
"Solorice",
"Stāvs", "Stāvs",
"xlabel", "xlabel",
"xticks", "xticks",
@ -56,7 +63,10 @@
"suppressLineUncommittedWarning": true "suppressLineUncommittedWarning": true
}, },
"vsicons.dontShowNewVersionMessage": true, "vsicons.dontShowNewVersionMessage": true,
"indentRainbow.excludedLanguages": ["plaintext", "django-txt"], "indentRainbow.excludedLanguages": [
"plaintext",
"django-txt"
],
"[markdown]": { "[markdown]": {
"editor.defaultFormatter": "yzhang.markdown-all-in-one" "editor.defaultFormatter": "yzhang.markdown-all-in-one"
}, },
@ -109,5 +119,6 @@
] ]
}, },
"workbench.colorTheme": "Dracula Soft", "workbench.colorTheme": "Dracula Soft",
"workbench.iconTheme": "material-icon-theme" "workbench.iconTheme": "material-icon-theme",
"Lua.telemetry.enable": true
} }

View File

@ -39,8 +39,6 @@ window:
columns: 0 columns: 0
lines: 0 lines: 0
opacity: 0.9 opacity: 0.9
# Window position (changes require restart) # Window position (changes require restart)
# #
@ -72,9 +70,6 @@ window:
# - buttonless: Title bar, transparent background and no title bar buttons # - buttonless: Title bar, transparent background and no title bar buttons
decorations: none decorations: none
# Startup Mode (changes require restart) # Startup Mode (changes require restart)
# #
# Values for `startup_mode`: # Values for `startup_mode`:
@ -94,10 +89,10 @@ window:
# Window class (Linux/BSD only): # Window class (Linux/BSD only):
# class: # class:
# Application instance name # Application instance name
# instance: Alacritty # instance: Alacritty
# General application class # General application class
# general: Alacritty # general: Alacritty
# GTK theme variant (Linux/BSD only) # GTK theme variant (Linux/BSD only)
# #
@ -191,8 +186,8 @@ draw_bold_text_with_bright_colors: true
colors: colors:
# Default colors # Default colors
primary: primary:
background: '#1d1f21' background: "#1d1f21"
foreground: '#c5c8c6' foreground: "#c5c8c6"
# Bright and dim foreground colors # Bright and dim foreground colors
# #
@ -200,8 +195,8 @@ colors:
# present. If the bright foreground color is not set, or # present. If the bright foreground color is not set, or
# `draw_bold_text_with_bright_colors` is `false`, the normal foreground # `draw_bold_text_with_bright_colors` is `false`, the normal foreground
# color will be used. # color will be used.
dim_foreground: '#828482' dim_foreground: "#828482"
bright_foreground: '#eaeaea' bright_foreground: "#eaeaea"
# Cursor colors # Cursor colors
# #
@ -237,8 +232,8 @@ colors:
# background: '#000000' # background: '#000000'
bar: bar:
background: '#282828' background: "#282828"
foreground: '#EBEBE9' foreground: "#EBEBE9"
# Keyboard regex hints # Keyboard regex hints
hints: hints:
@ -247,16 +242,16 @@ colors:
# Allowed values are CellForeground/CellBackground, which reference the # Allowed values are CellForeground/CellBackground, which reference the
# affected cell, or hexadecimal colors like #ff00ff. # affected cell, or hexadecimal colors like #ff00ff.
start: start:
foreground: '#1d1f21' foreground: "#1d1f21"
background: '#e9ff5e' background: "#e9ff5e"
# All characters after the first one in the hint label # All characters after the first one in the hint label
# #
# Allowed values are CellForeground/CellBackground, which reference the # Allowed values are CellForeground/CellBackground, which reference the
# affected cell, or hexadecimal colors like #ff00ff. # affected cell, or hexadecimal colors like #ff00ff.
end: end:
foreground: '#e9ff5e' foreground: "#e9ff5e"
background: '#1d1f21' background: "#1d1f21"
# Line indicator # Line indicator
# #
@ -280,39 +275,39 @@ colors:
# Normal colors # Normal colors
normal: normal:
black: '#313539' black: "#313539"
red: '#b02626' red: "#b02626"
green: '#40a62f' green: "#40a62f"
yellow: '#f1e635' yellow: "#f1e635"
blue: '#314ad0' blue: "#314ad0"
magenta: '#b30ad0' magenta: "#b30ad0"
cyan: '#32d0fc' cyan: "#32d0fc"
white: '#acadb1' white: "#acadb1"
# Bright colors # Bright colors
bright: bright:
black: '#717174' black: "#717174"
red: '#b02626' red: "#b02626"
green: '#40a62f' green: "#40a62f"
yellow: '#f1e635' yellow: "#f1e635"
blue: '#314ad0' blue: "#314ad0"
magenta: '#b30ad0' magenta: "#b30ad0"
cyan: '#32d0fc' cyan: "#32d0fc"
white: '#acadb1' white: "#acadb1"
# Dim colors # Dim colors
# #
# If the dim colors are not set, they will be calculated automatically based # If the dim colors are not set, they will be calculated automatically based
# on the `normal` colors. # on the `normal` colors.
dim: dim:
black: '#676f78' black: "#676f78"
red: '#b55454' red: "#b55454"
green: '#78a670' green: "#78a670"
yellow: '#faf380' yellow: "#faf380"
blue: '#707fd0' blue: "#707fd0"
magenta: '#c583d0' magenta: "#c583d0"
cyan: '#8adaf1' cyan: "#8adaf1"
white: '#e0e3e7' white: "#e0e3e7"
# Indexed Colors # Indexed Colors
# #
@ -335,44 +330,42 @@ colors:
# #
# The bell is rung every time the BEL control character is received. # The bell is rung every time the BEL control character is received.
#bell: #bell:
# Visual Bell Animation # Visual Bell Animation
# #
# Animation effect for flashing the screen when the visual bell is rung. # Animation effect for flashing the screen when the visual bell is rung.
# #
# Values for `animation`: # Values for `animation`:
# - Ease # - Ease
# - EaseOut # - EaseOut
# - EaseOutSine # - EaseOutSine
# - EaseOutQuad # - EaseOutQuad
# - EaseOutCubic # - EaseOutCubic
# - EaseOutQuart # - EaseOutQuart
# - EaseOutQuint # - EaseOutQuint
# - EaseOutExpo # - EaseOutExpo
# - EaseOutCirc # - EaseOutCirc
# - Linear # - Linear
#animation: EaseOutExpo #animation: EaseOutExpo
# Duration of the visual bell flash in milliseconds. A `duration` of `0` will # Duration of the visual bell flash in milliseconds. A `duration` of `0` will
# disable the visual bell animation. # disable the visual bell animation.
#duration: 0 #duration: 0
# Visual bell animation color. # Visual bell animation color.
#color: '#ffffff' #color: '#ffffff'
# Bell Command
#
# Bell Command # This program is executed whenever the bell is rung.
# #
# This program is executed whenever the bell is rung. # When set to `command: None`, no command will be executed.
# #
# When set to `command: None`, no command will be executed. # Example:
# # command:
# Example: # program: notify-send
# command: # args: ["Hello, World!"]
# program: notify-send #
# args: ["Hello, World!"] #command: None
#
#command: None
selection: selection:
# This string contains all characters that are used as separators for # This string contains all characters that are used as separators for
@ -435,7 +428,7 @@ cursor:
# - (Linux/BSD) user login shell # - (Linux/BSD) user login shell
# - (Windows) powershell # - (Windows) powershell
shell: shell:
program: /bin/zsh program: /bin/zsh
# args: # args:
# - --login # - --login
@ -452,60 +445,60 @@ shell:
#ipc_socket: true #ipc_socket: true
#mouse: #mouse:
# Click settings # Click settings
# #
# The `double_click` and `triple_click` settings control the time # The `double_click` and `triple_click` settings control the time
# alacritty should wait for accepting multiple clicks as one double # alacritty should wait for accepting multiple clicks as one double
# or triple click. # or triple click.
#double_click: { threshold: 300 } #double_click: { threshold: 300 }
#triple_click: { threshold: 300 } #triple_click: { threshold: 300 }
# If this is `true`, the cursor is temporarily hidden when typing. # If this is `true`, the cursor is temporarily hidden when typing.
#hide_when_typing: false #hide_when_typing: false
# Regex hints # Regex hints
# #
# Terminal hints can be used to find text in the visible part of the terminal # Terminal hints can be used to find text in the visible part of the terminal
# and pipe it to other applications. # and pipe it to other applications.
#hints: #hints:
# Keys used for the hint labels. # Keys used for the hint labels.
#alphabet: "jfkdls;ahgurieowpq" #alphabet: "jfkdls;ahgurieowpq"
# List with all available hints # List with all available hints
# #
# Each hint must have a `regex` and either an `action` or a `command` field. # Each hint must have a `regex` and either an `action` or a `command` field.
# The fields `mouse`, `binding` and `post_processing` are optional. # The fields `mouse`, `binding` and `post_processing` are optional.
# #
# The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and # The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and
# `mouse.mods` accept the same values as they do in the `key_bindings` section. # `mouse.mods` accept the same values as they do in the `key_bindings` section.
# #
# The `mouse.enabled` field controls if the hint should be underlined while # The `mouse.enabled` field controls if the hint should be underlined while
# the mouse with all `mouse.mods` keys held or the vi mode cursor is above it. # the mouse with all `mouse.mods` keys held or the vi mode cursor is above it.
# #
# If the `post_processing` field is set to `true`, heuristics will be used to # If the `post_processing` field is set to `true`, heuristics will be used to
# shorten the match if there are characters likely not to be part of the hint # shorten the match if there are characters likely not to be part of the hint
# (e.g. a trailing `.`). This is most useful for URIs. # (e.g. a trailing `.`). This is most useful for URIs.
# #
# Values for `action`: # Values for `action`:
# - Copy # - Copy
# Copy the hint's text to the clipboard. # Copy the hint's text to the clipboard.
# - Paste # - Paste
# Paste the hint's text to the terminal or search. # Paste the hint's text to the terminal or search.
# - Select # - Select
# Select the hint's text. # Select the hint's text.
# - MoveViModeCursor # - MoveViModeCursor
# Move the vi mode cursor to the beginning of the hint. # Move the vi mode cursor to the beginning of the hint.
#enabled: #enabled:
# - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\ # - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\
# [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+" # [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+"
# command: xdg-open # command: xdg-open
# post_processing: true # post_processing: true
# mouse: # mouse:
# enabled: true # enabled: true
# mods: None # mods: None
# binding: # binding:
# key: U # key: U
# mods: Control|Shift # mods: Control|Shift
# Mouse bindings # Mouse bindings
# #
@ -536,8 +529,8 @@ shell:
# #
# - `mods` (see key bindings) # - `mods` (see key bindings)
mouse_bindings: mouse_bindings:
# - { mouse: Right, action: ExpandSelection } # - { mouse: Right, action: ExpandSelection }
- { mouse: Middle, mode: ~Vi, action: PasteSelection } - { mouse: Middle, mode: ~Vi, action: PasteSelection }
# Key bindings # Key bindings
# #
@ -750,17 +743,17 @@ key_bindings:
#- { key: Copy, action: Copy } #- { key: Copy, action: Copy }
# - { key: L, mods: Control, action: clear } # - { key: L, mods: Control, action: clear }
#- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" } #- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" }
- { key: Up, mods: Shift, mode: ~Alt, action: ScrollPageUp } - { key: Up, mods: Shift, mode: ~Alt, action: ScrollPageUp }
- { key: Down, mods: Shift, mode: ~Alt, action: ScrollPageDown } - { key: Down, mods: Shift, mode: ~Alt, action: ScrollPageDown }
- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop } - { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop }
- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } - { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom }
# - { key: Delete, actions: Del } # - { key: Delete, actions: Del }
# - { key: Key9, mods: Control|Shift, action: CreateNewWindow, } # - { key: Key9, mods: Control|Shift, action: CreateNewWindow, }
# Vi Mode # Vi Mode
# - { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode } # - { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode }
# - { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom } # - { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom }
# - { key: Escape, mode: ~Search, action: ToggleViMode } # - { key: Escape, mode: ~Search, action: ToggleViMode }
# - { key: Escape, mode: Vi|~Search, action: ClearSelection } # - { key: Escape, mode: Vi|~Search, action: ClearSelection }
# - { key: I, mode: Vi|~Search, action: ToggleViMode } # - { key: I, mode: Vi|~Search, action: ToggleViMode }
# - { key: I, mode: Vi|~Search, action: ScrollToBottom } # - { key: I, mode: Vi|~Search, action: ScrollToBottom }
@ -821,21 +814,21 @@ key_bindings:
#- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious } #- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious }
# (Windows, Linux, and BSD only) # (Windows, Linux, and BSD only)
- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste } - { key: V, mods: Control|Shift, mode: ~Vi, action: Paste }
- { key: C, mods: Control|Shift, action: Copy } - { key: C, mods: Control|Shift, action: Copy }
- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward } - { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward }
- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward } - { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward }
#- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection } #- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection }
#- { key: Insert, mods: Shift, action: PasteSelection } #- { key: Insert, mods: Shift, action: PasteSelection }
- { key: Key0, mods: Control, action: ResetFontSize } - { key: Key0, mods: Control, action: ResetFontSize }
- { key: Equals, mods: Control, action: IncreaseFontSize } - { key: Equals, mods: Control, action: IncreaseFontSize }
# - { key: Plus, mods: Control, action: IncreaseFontSize } # - { key: Plus, mods: Control, action: IncreaseFontSize }
- { key: NumpadAdd, mods: Control, action: IncreaseFontSize } - { key: NumpadAdd, mods: Control, action: IncreaseFontSize }
- { key: Minus, mods: Control, action: DecreaseFontSize } - { key: Minus, mods: Control, action: DecreaseFontSize }
- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } - { key: NumpadSubtract, mods: Control, action: DecreaseFontSize }
- { key: Q, mods: Control|Shift, action: Quit } - { key: Q, mods: Control|Shift, action: Quit }
# (Windows only) # (Windows only)
- { key: F11, action: ToggleFullscreen } - { key: F11, action: ToggleFullscreen }
# (macOS only) # (macOS only)
#- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" } #- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" }
@ -858,24 +851,23 @@ key_bindings:
#- { key: F, mods: Command|Control, action: ToggleFullscreen } #- { key: F, mods: Command|Control, action: ToggleFullscreen }
#- { key: F, mods: Command, mode: ~Search, action: SearchForward } #- { key: F, mods: Command, mode: ~Search, action: SearchForward }
#- { key: B, mods: Command, mode: ~Search, action: SearchBackward } #- { key: B, mods: Command, mode: ~Search, action: SearchBackward }
#debug: #debug:
# Display the time it takes to redraw each frame. # Display the time it takes to redraw each frame.
#render_timer: false #render_timer: false
# Keep the log file after quitting Alacritty. # Keep the log file after quitting Alacritty.
#persistent_logging: false #persistent_logging: false
# Log level # Log level
# #
# Values for `log_level`: # Values for `log_level`:
# - Off # - Off
# - Error # - Error
# - Warn # - Warn
# - Info # - Info
# - Debug # - Debug
# - Trace # - Trace
#log_level: Warn #log_level: Warn
# Print all received window events. # Print all received window events.
#print_events: false #print_events: false

File diff suppressed because it is too large Load Diff

View File

@ -31,111 +31,105 @@ local json = { _version = "0.1.2" }
local encode local encode
local escape_char_map = { local escape_char_map = {
[ "\\" ] = "\\", ["\\"] = "\\",
[ "\"" ] = "\"", ["\""] = "\"",
[ "\b" ] = "b", ["\b"] = "b",
[ "\f" ] = "f", ["\f"] = "f",
[ "\n" ] = "n", ["\n"] = "n",
[ "\r" ] = "r", ["\r"] = "r",
[ "\t" ] = "t", ["\t"] = "t",
} }
local escape_char_map_inv = { [ "/" ] = "/" } local escape_char_map_inv = { ["/"] = "/" }
for k, v in pairs(escape_char_map) do for k, v in pairs(escape_char_map) do
escape_char_map_inv[v] = k escape_char_map_inv[v] = k
end end
local function escape_char(c) local function escape_char(c)
return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte())) return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte()))
end end
local function encode_nil(val) local function encode_nil(val)
return "null" return "null"
end end
local function encode_table(val, stack) local function encode_table(val, stack)
local res = {} local res = {}
stack = stack or {} stack = stack or {}
-- Circular reference? -- Circular reference?
if stack[val] then error("circular reference") end if stack[val] then error("circular reference") end
stack[val] = true stack[val] = true
if rawget(val, 1) ~= nil or next(val) == nil then if rawget(val, 1) ~= nil or next(val) == nil then
-- Treat as array -- check keys are valid and it is not sparse -- Treat as array -- check keys are valid and it is not sparse
local n = 0 local n = 0
for k in pairs(val) do for k in pairs(val) do
if type(k) ~= "number" then if type(k) ~= "number" then
error("invalid table: mixed or invalid key types") error("invalid table: mixed or invalid key types")
end end
n = n + 1 n = n + 1
end end
if n ~= #val then if n ~= #val then
error("invalid table: sparse array") error("invalid table: sparse array")
end end
-- Encode -- Encode
for i, v in ipairs(val) do for i, v in ipairs(val) do
table.insert(res, encode(v, stack)) table.insert(res, encode(v, stack))
end end
stack[val] = nil stack[val] = nil
return "[" .. table.concat(res, ",") .. "]" return "[" .. table.concat(res, ",") .. "]"
else else
-- Treat as an object -- Treat as an object
for k, v in pairs(val) do for k, v in pairs(val) do
if type(k) ~= "string" then if type(k) ~= "string" then
error("invalid table: mixed or invalid key types") error("invalid table: mixed or invalid key types")
end end
table.insert(res, encode(k, stack) .. ":" .. encode(v, stack)) table.insert(res, encode(k, stack) .. ":" .. encode(v, stack))
end end
stack[val] = nil stack[val] = nil
return "{" .. table.concat(res, ",") .. "}" return "{" .. table.concat(res, ",") .. "}"
end end
end end
local function encode_string(val) local function encode_string(val)
return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"' return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
end end
local function encode_number(val) local function encode_number(val)
-- Check for NaN, -inf and inf -- Check for NaN, -inf and inf
if val ~= val or val <= -math.huge or val >= math.huge then if val ~= val or val <= -math.huge or val >= math.huge then
error("unexpected number value '" .. tostring(val) .. "'") error("unexpected number value '" .. tostring(val) .. "'")
end end
return string.format("%.14g", val) return string.format("%.14g", val)
end end
local type_func_map = { local type_func_map = {
[ "nil" ] = encode_nil, ["nil"] = encode_nil,
[ "table" ] = encode_table, ["table"] = encode_table,
[ "string" ] = encode_string, ["string"] = encode_string,
[ "number" ] = encode_number, ["number"] = encode_number,
[ "boolean" ] = tostring, ["boolean"] = tostring,
} }
encode = function(val, stack) encode = function(val, stack)
local t = type(val) local t = type(val)
local f = type_func_map[t] local f = type_func_map[t]
if f then if f then
return f(val, stack) return f(val, stack)
end end
error("unexpected type '" .. t .. "'") error("unexpected type '" .. t .. "'")
end end
function json.encode(val) function json.encode(val)
return ( encode(val) ) return (encode(val))
end end
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- Decode -- Decode
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
@ -143,246 +137,236 @@ end
local parse local parse
local function create_set(...) local function create_set(...)
local res = {} local res = {}
for i = 1, select("#", ...) do for i = 1, select("#", ...) do
res[ select(i, ...) ] = true res[select(i, ...)] = true
end end
return res return res
end end
local space_chars = create_set(" ", "\t", "\r", "\n") local space_chars = create_set(" ", "\t", "\r", "\n")
local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",") local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u") local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
local literals = create_set("true", "false", "null") local literals = create_set("true", "false", "null")
local literal_map = { local literal_map = {
[ "true" ] = true, ["true"] = true,
[ "false" ] = false, ["false"] = false,
[ "null" ] = nil, ["null"] = nil,
} }
local function next_char(str, idx, set, negate) local function next_char(str, idx, set, negate)
for i = idx, #str do for i = idx, #str do
if set[str:sub(i, i)] ~= negate then if set[str:sub(i, i)] ~= negate then
return i return i
end end
end end
return #str + 1 return #str + 1
end end
local function decode_error(str, idx, msg) local function decode_error(str, idx, msg)
local line_count = 1 local line_count = 1
local col_count = 1 local col_count = 1
for i = 1, idx - 1 do for i = 1, idx - 1 do
col_count = col_count + 1 col_count = col_count + 1
if str:sub(i, i) == "\n" then if str:sub(i, i) == "\n" then
line_count = line_count + 1 line_count = line_count + 1
col_count = 1 col_count = 1
end end
end end
error( string.format("%s at line %d col %d", msg, line_count, col_count) ) error(string.format("%s at line %d col %d", msg, line_count, col_count))
end end
local function codepoint_to_utf8(n) local function codepoint_to_utf8(n)
-- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
local f = math.floor local f = math.floor
if n <= 0x7f then if n <= 0x7f then
return string.char(n) return string.char(n)
elseif n <= 0x7ff then elseif n <= 0x7ff then
return string.char(f(n / 64) + 192, n % 64 + 128) return string.char(f(n / 64) + 192, n % 64 + 128)
elseif n <= 0xffff then elseif n <= 0xffff then
return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128) return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
elseif n <= 0x10ffff then elseif n <= 0x10ffff then
return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128, return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128,
f(n % 4096 / 64) + 128, n % 64 + 128) f(n % 4096 / 64) + 128, n % 64 + 128)
end end
error( string.format("invalid unicode codepoint '%x'", n) ) error(string.format("invalid unicode codepoint '%x'", n))
end end
local function parse_unicode_escape(s) local function parse_unicode_escape(s)
local n1 = tonumber( s:sub(1, 4), 16 ) local n1 = tonumber(s:sub(1, 4), 16)
local n2 = tonumber( s:sub(7, 10), 16 ) local n2 = tonumber(s:sub(7, 10), 16)
-- Surrogate pair? -- Surrogate pair?
if n2 then if n2 then
return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000) return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
else else
return codepoint_to_utf8(n1) return codepoint_to_utf8(n1)
end end
end end
local function parse_string(str, i) local function parse_string(str, i)
local res = "" local res = ""
local j = i + 1 local j = i + 1
local k = j local k = j
while j <= #str do while j <= #str do
local x = str:byte(j) local x = str:byte(j)
if x < 32 then if x < 32 then
decode_error(str, j, "control character in string") decode_error(str, j, "control character in string")
elseif x == 92 then -- `\`: Escape elseif x == 92 then -- `\`: Escape
res = res .. str:sub(k, j - 1) res = res .. str:sub(k, j - 1)
j = j + 1 j = j + 1
local c = str:sub(j, j) local c = str:sub(j, j)
if c == "u" then if c == "u" then
local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1) local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1)
or str:match("^%x%x%x%x", j + 1) or str:match("^%x%x%x%x", j + 1)
or decode_error(str, j - 1, "invalid unicode escape in string") or decode_error(str, j - 1, "invalid unicode escape in string")
res = res .. parse_unicode_escape(hex) res = res .. parse_unicode_escape(hex)
j = j + #hex j = j + #hex
else else
if not escape_chars[c] then if not escape_chars[c] then
decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string") decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string")
end end
res = res .. escape_char_map_inv[c] res = res .. escape_char_map_inv[c]
end end
k = j + 1 k = j + 1
elseif x == 34 then -- `"`: End of string elseif x == 34 then -- `"`: End of string
res = res .. str:sub(k, j - 1) res = res .. str:sub(k, j - 1)
return res, j + 1 return res, j + 1
end end
j = j + 1 j = j + 1
end end
decode_error(str, i, "expected closing quote for string") decode_error(str, i, "expected closing quote for string")
end end
local function parse_number(str, i) local function parse_number(str, i)
local x = next_char(str, i, delim_chars) local x = next_char(str, i, delim_chars)
local s = str:sub(i, x - 1) local s = str:sub(i, x - 1)
local n = tonumber(s) local n = tonumber(s)
if not n then if not n then
decode_error(str, i, "invalid number '" .. s .. "'") decode_error(str, i, "invalid number '" .. s .. "'")
end end
return n, x return n, x
end end
local function parse_literal(str, i) local function parse_literal(str, i)
local x = next_char(str, i, delim_chars) local x = next_char(str, i, delim_chars)
local word = str:sub(i, x - 1) local word = str:sub(i, x - 1)
if not literals[word] then if not literals[word] then
decode_error(str, i, "invalid literal '" .. word .. "'") decode_error(str, i, "invalid literal '" .. word .. "'")
end end
return literal_map[word], x return literal_map[word], x
end end
local function parse_array(str, i) local function parse_array(str, i)
local res = {} local res = {}
local n = 1 local n = 1
i = i + 1 i = i + 1
while 1 do while 1 do
local x local x
i = next_char(str, i, space_chars, true) i = next_char(str, i, space_chars, true)
-- Empty / end of array? -- Empty / end of array?
if str:sub(i, i) == "]" then if str:sub(i, i) == "]" then
i = i + 1 i = i + 1
break break
end end
-- Read token -- Read token
x, i = parse(str, i) x, i = parse(str, i)
res[n] = x res[n] = x
n = n + 1 n = n + 1
-- Next token -- Next token
i = next_char(str, i, space_chars, true) i = next_char(str, i, space_chars, true)
local chr = str:sub(i, i) local chr = str:sub(i, i)
i = i + 1 i = i + 1
if chr == "]" then break end if chr == "]" then break end
if chr ~= "," then decode_error(str, i, "expected ']' or ','") end if chr ~= "," then decode_error(str, i, "expected ']' or ','") end
end end
return res, i return res, i
end end
local function parse_object(str, i) local function parse_object(str, i)
local res = {} local res = {}
i = i + 1 i = i + 1
while 1 do while 1 do
local key, val local key, val
i = next_char(str, i, space_chars, true) i = next_char(str, i, space_chars, true)
-- Empty / end of object? -- Empty / end of object?
if str:sub(i, i) == "}" then if str:sub(i, i) == "}" then
i = i + 1 i = i + 1
break break
end end
-- Read key -- Read key
if str:sub(i, i) ~= '"' then if str:sub(i, i) ~= '"' then
decode_error(str, i, "expected string for key") decode_error(str, i, "expected string for key")
end end
key, i = parse(str, i) key, i = parse(str, i)
-- Read ':' delimiter -- Read ':' delimiter
i = next_char(str, i, space_chars, true) i = next_char(str, i, space_chars, true)
if str:sub(i, i) ~= ":" then if str:sub(i, i) ~= ":" then
decode_error(str, i, "expected ':' after key") decode_error(str, i, "expected ':' after key")
end end
i = next_char(str, i + 1, space_chars, true) i = next_char(str, i + 1, space_chars, true)
-- Read value -- Read value
val, i = parse(str, i) val, i = parse(str, i)
-- Set -- Set
res[key] = val res[key] = val
-- Next token -- Next token
i = next_char(str, i, space_chars, true) i = next_char(str, i, space_chars, true)
local chr = str:sub(i, i) local chr = str:sub(i, i)
i = i + 1 i = i + 1
if chr == "}" then break end if chr == "}" then break end
if chr ~= "," then decode_error(str, i, "expected '}' or ','") end if chr ~= "," then decode_error(str, i, "expected '}' or ','") end
end end
return res, i return res, i
end end
local char_func_map = { local char_func_map = {
[ '"' ] = parse_string, ['"'] = parse_string,
[ "0" ] = parse_number, ["0"] = parse_number,
[ "1" ] = parse_number, ["1"] = parse_number,
[ "2" ] = parse_number, ["2"] = parse_number,
[ "3" ] = parse_number, ["3"] = parse_number,
[ "4" ] = parse_number, ["4"] = parse_number,
[ "5" ] = parse_number, ["5"] = parse_number,
[ "6" ] = parse_number, ["6"] = parse_number,
[ "7" ] = parse_number, ["7"] = parse_number,
[ "8" ] = parse_number, ["8"] = parse_number,
[ "9" ] = parse_number, ["9"] = parse_number,
[ "-" ] = parse_number, ["-"] = parse_number,
[ "t" ] = parse_literal, ["t"] = parse_literal,
[ "f" ] = parse_literal, ["f"] = parse_literal,
[ "n" ] = parse_literal, ["n"] = parse_literal,
[ "[" ] = parse_array, ["["] = parse_array,
[ "{" ] = parse_object, ["{"] = parse_object,
} }
parse = function(str, idx) parse = function(str, idx)
local chr = str:sub(idx, idx) local chr = str:sub(idx, idx)
local f = char_func_map[chr] local f = char_func_map[chr]
if f then if f then
return f(str, idx) return f(str, idx)
end end
decode_error(str, idx, "unexpected character '" .. chr .. "'") decode_error(str, idx, "unexpected character '" .. chr .. "'")
end end
function json.decode(str) function json.decode(str)
if type(str) ~= "string" then if type(str) ~= "string" then
error("expected argument of type string, got " .. type(str)) error("expected argument of type string, got " .. type(str))
end end
local res, idx = parse(str, next_char(str, 1, space_chars, true)) local res, idx = parse(str, next_char(str, 1, space_chars, true))
idx = next_char(str, idx, space_chars, true) idx = next_char(str, idx, space_chars, true)
if idx <= #str then if idx <= #str then
decode_error(str, idx, "trailing garbage") decode_error(str, idx, "trailing garbage")
end end
return res return res
end end
return json return json

View File

@ -11,18 +11,18 @@ local themes_path = gfs.get_themes_dir()
local theme = {} local theme = {}
theme.font = "JetBrainsMono NF 8" theme.font = "JetBrainsMono NF 8"
theme.bg_normal = "#222222" theme.bg_normal = "#222222"
theme.bg_focus = "#333333" theme.bg_focus = "#333333"
theme.bg_urgent = "#ff0000" theme.bg_urgent = "#ff0000"
theme.bg_minimize = "#444444" theme.bg_minimize = "#444444"
theme.bg_systray = theme.bg_normal theme.bg_systray = theme.bg_normal
theme.fg_normal = "#aaaaaa" theme.fg_normal = "#aaaaaa"
theme.fg_focus = "#ffffff" theme.fg_focus = "#ffffff"
theme.fg_urgent = "#ffffff" theme.fg_urgent = "#ffffff"
theme.fg_minimize = "#ffffff" theme.fg_minimize = "#ffffff"
theme.useless_gap = dpi(4) theme.useless_gap = dpi(4)
theme.border_width = dpi(2) theme.border_width = dpi(2)
@ -47,10 +47,10 @@ theme.border_marked = "#91231c"
-- Generate taglist squares: -- Generate taglist squares:
local taglist_square_size = dpi(4) local taglist_square_size = dpi(4)
theme.taglist_squares_sel = theme_assets.taglist_squares_sel( theme.taglist_squares_sel = theme_assets.taglist_squares_sel(
taglist_square_size, theme.fg_normal taglist_square_size, theme.fg_normal
) )
theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel( theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel(
taglist_square_size, theme.fg_normal taglist_square_size, theme.fg_normal
) )
-- Variables set for theming notifications: -- Variables set for theming notifications:
@ -62,9 +62,9 @@ theme.taglist_squares_unsel = theme_assets.taglist_squares_unsel(
-- Variables set for theming the menu: -- Variables set for theming the menu:
-- menu_[bg|fg]_[normal|focus] -- menu_[bg|fg]_[normal|focus]
-- menu_[border_color|border_width] -- menu_[border_color|border_width]
theme.menu_submenu_icon = themes_path.."default/submenu.png" theme.menu_submenu_icon = themes_path .. "default/submenu.png"
theme.menu_height = dpi(16) theme.menu_height = dpi(16)
theme.menu_width = dpi(100) theme.menu_width = dpi(100)
-- You can add as many variables as -- You can add as many variables as
-- you wish and access them by using -- you wish and access them by using
@ -72,55 +72,55 @@ theme.menu_width = dpi(100)
--theme.bg_widget = "#cc0000" --theme.bg_widget = "#cc0000"
-- Define the image to load -- Define the image to load
theme.titlebar_close_button_normal = themes_path.."default/titlebar/close_normal.png" theme.titlebar_close_button_normal = themes_path .. "default/titlebar/close_normal.png"
theme.titlebar_close_button_focus = themes_path.."default/titlebar/close_focus.png" theme.titlebar_close_button_focus = themes_path .. "default/titlebar/close_focus.png"
theme.titlebar_minimize_button_normal = themes_path.."default/titlebar/minimize_normal.png" theme.titlebar_minimize_button_normal = themes_path .. "default/titlebar/minimize_normal.png"
theme.titlebar_minimize_button_focus = themes_path.."default/titlebar/minimize_focus.png" theme.titlebar_minimize_button_focus = themes_path .. "default/titlebar/minimize_focus.png"
theme.titlebar_ontop_button_normal_inactive = themes_path.."default/titlebar/ontop_normal_inactive.png" theme.titlebar_ontop_button_normal_inactive = themes_path .. "default/titlebar/ontop_normal_inactive.png"
theme.titlebar_ontop_button_focus_inactive = themes_path.."default/titlebar/ontop_focus_inactive.png" theme.titlebar_ontop_button_focus_inactive = themes_path .. "default/titlebar/ontop_focus_inactive.png"
theme.titlebar_ontop_button_normal_active = themes_path.."default/titlebar/ontop_normal_active.png" theme.titlebar_ontop_button_normal_active = themes_path .. "default/titlebar/ontop_normal_active.png"
theme.titlebar_ontop_button_focus_active = themes_path.."default/titlebar/ontop_focus_active.png" theme.titlebar_ontop_button_focus_active = themes_path .. "default/titlebar/ontop_focus_active.png"
theme.titlebar_sticky_button_normal_inactive = themes_path.."default/titlebar/sticky_normal_inactive.png" theme.titlebar_sticky_button_normal_inactive = themes_path .. "default/titlebar/sticky_normal_inactive.png"
theme.titlebar_sticky_button_focus_inactive = themes_path.."default/titlebar/sticky_focus_inactive.png" theme.titlebar_sticky_button_focus_inactive = themes_path .. "default/titlebar/sticky_focus_inactive.png"
theme.titlebar_sticky_button_normal_active = themes_path.."default/titlebar/sticky_normal_active.png" theme.titlebar_sticky_button_normal_active = themes_path .. "default/titlebar/sticky_normal_active.png"
theme.titlebar_sticky_button_focus_active = themes_path.."default/titlebar/sticky_focus_active.png" theme.titlebar_sticky_button_focus_active = themes_path .. "default/titlebar/sticky_focus_active.png"
theme.titlebar_floating_button_normal_inactive = themes_path.."default/titlebar/floating_normal_inactive.png" theme.titlebar_floating_button_normal_inactive = themes_path .. "default/titlebar/floating_normal_inactive.png"
theme.titlebar_floating_button_focus_inactive = themes_path.."default/titlebar/floating_focus_inactive.png" theme.titlebar_floating_button_focus_inactive = themes_path .. "default/titlebar/floating_focus_inactive.png"
theme.titlebar_floating_button_normal_active = themes_path.."default/titlebar/floating_normal_active.png" theme.titlebar_floating_button_normal_active = themes_path .. "default/titlebar/floating_normal_active.png"
theme.titlebar_floating_button_focus_active = themes_path.."default/titlebar/floating_focus_active.png" theme.titlebar_floating_button_focus_active = themes_path .. "default/titlebar/floating_focus_active.png"
theme.titlebar_maximized_button_normal_inactive = themes_path.."default/titlebar/maximized_normal_inactive.png" theme.titlebar_maximized_button_normal_inactive = themes_path .. "default/titlebar/maximized_normal_inactive.png"
theme.titlebar_maximized_button_focus_inactive = themes_path.."default/titlebar/maximized_focus_inactive.png" theme.titlebar_maximized_button_focus_inactive = themes_path .. "default/titlebar/maximized_focus_inactive.png"
theme.titlebar_maximized_button_normal_active = themes_path.."default/titlebar/maximized_normal_active.png" theme.titlebar_maximized_button_normal_active = themes_path .. "default/titlebar/maximized_normal_active.png"
theme.titlebar_maximized_button_focus_active = themes_path.."default/titlebar/maximized_focus_active.png" theme.titlebar_maximized_button_focus_active = themes_path .. "default/titlebar/maximized_focus_active.png"
theme.wallpaper = "~/.local/share/wallpaper.png" theme.wallpaper = "~/.local/share/wallpaper.png"
-- You can use your own layout icons like this: -- You can use your own layout icons like this:
theme.layout_fairh = themes_path.."default/layouts/fairhw.png" theme.layout_fairh = themes_path .. "default/layouts/fairhw.png"
theme.layout_fairv = themes_path.."default/layouts/fairvw.png" theme.layout_fairv = themes_path .. "default/layouts/fairvw.png"
theme.layout_floating = themes_path.."default/layouts/floatingw.png" theme.layout_floating = themes_path .. "default/layouts/floatingw.png"
theme.layout_magnifier = themes_path.."default/layouts/magnifierw.png" theme.layout_magnifier = themes_path .. "default/layouts/magnifierw.png"
theme.layout_max = themes_path.."default/layouts/maxw.png" theme.layout_max = themes_path .. "default/layouts/maxw.png"
theme.layout_fullscreen = themes_path.."default/layouts/fullscreenw.png" theme.layout_fullscreen = themes_path .. "default/layouts/fullscreenw.png"
theme.layout_tilebottom = themes_path.."default/layouts/tilebottomw.png" theme.layout_tilebottom = themes_path .. "default/layouts/tilebottomw.png"
theme.layout_tileleft = themes_path.."default/layouts/tileleftw.png" theme.layout_tileleft = themes_path .. "default/layouts/tileleftw.png"
theme.layout_tile = themes_path.."default/layouts/tilew.png" theme.layout_tile = themes_path .. "default/layouts/tilew.png"
theme.layout_tiletop = themes_path.."default/layouts/tiletopw.png" theme.layout_tiletop = themes_path .. "default/layouts/tiletopw.png"
theme.layout_spiral = themes_path.."default/layouts/spiralw.png" theme.layout_spiral = themes_path .. "default/layouts/spiralw.png"
theme.layout_dwindle = themes_path.."default/layouts/dwindlew.png" theme.layout_dwindle = themes_path .. "default/layouts/dwindlew.png"
theme.layout_cornernw = themes_path.."default/layouts/cornernww.png" theme.layout_cornernw = themes_path .. "default/layouts/cornernww.png"
theme.layout_cornerne = themes_path.."default/layouts/cornernew.png" theme.layout_cornerne = themes_path .. "default/layouts/cornernew.png"
theme.layout_cornersw = themes_path.."default/layouts/cornersww.png" theme.layout_cornersw = themes_path .. "default/layouts/cornersww.png"
theme.layout_cornerse = themes_path.."default/layouts/cornersew.png" theme.layout_cornerse = themes_path .. "default/layouts/cornersew.png"
-- Generate Awesome icon: -- Generate Awesome icon:
theme.awesome_icon = theme_assets.awesome_icon( theme.awesome_icon = theme_assets.awesome_icon(
theme.menu_height, theme.bg_focus, theme.fg_focus theme.menu_height, theme.bg_focus, theme.fg_focus
) )
-- Define the icon theme for application icons. If not set then the icons -- Define the icon theme for application icons. If not set then the icons

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
#!/bin/sh #!/bin/sh
if [ -n "$FIFO_UEBERZUG" ]; then if [ -n "$FIFO_UEBERZUG" ]; then
printf '{"action": "remove", "identifier": "PREVIEW"}\n' > "$FIFO_UEBERZUG" printf '{"action": "remove", "identifier": "PREVIEW"}\n' >"$FIFO_UEBERZUG"
fi fi

View File

@ -17,13 +17,13 @@ cmd setwallpaper ${{
# Archive bindings # Archive bindings
cmd unarchive ${{ cmd unarchive ${{
case "$f" in case "$f" in
*.zip) unzip "$f" ;; *.zip) unzip "$f" ;;
*.tar.gz) tar -xzvf "$f" ;; *.tar.gz) tar -xzvf "$f" ;;
*.tar.bz2) tar -xjvf "$f" ;; *.tar.bz2) tar -xjvf "$f" ;;
*.tar) tar -xvf "$f" ;; *.tar) tar -xvf "$f" ;;
*) echo "Unsupported format" ;; *) echo "Unsupported format" ;;
esac esac
}} }}
# cmds/functions # cmds/functions

View File

@ -2,7 +2,7 @@
image() { image() {
if [ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ]; then if [ -n "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ]; then
printf '{"action": "add", "identifier": "PREVIEW", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$4" "$5" "$(($2-1))" "$(($3-1))" "$1" > "$FIFO_UEBERZUG" printf '{"action": "add", "identifier": "PREVIEW", "x": "%s", "y": "%s", "width": "%s", "height": "%s", "scaler": "contain", "path": "%s"}\n' "$4" "$5" "$(($2 - 1))" "$(($3 - 1))" "$1" >"$FIFO_UEBERZUG"
exit 1 exit 1
else else
chafa "$1" -s "$4x" chafa "$1" -s "$4x"
@ -12,8 +12,7 @@ image() {
batorcat() { batorcat() {
file="$1" file="$1"
shift shift
if command -v bat > /dev/null 2>&1 if command -v bat >/dev/null 2>&1; then
then
bat --color=always --style=plain --pager=never "$file" "$@" bat --color=always --style=plain --pager=never "$file" "$@"
else else
cat "$file" cat "$file"
@ -23,61 +22,61 @@ batorcat() {
CACHE="$HOME/.cache/lf/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}'))" CACHE="$HOME/.cache/lf/thumbnail.$(stat --printf '%n\0%i\0%F\0%s\0%W\0%Y' -- "$(readlink -f "$1")" | sha256sum | awk '{print $1}'))"
case "$(printf "%s\n" "$(readlink -f "$1")" | awk '{print tolower($0)}')" in case "$(printf "%s\n" "$(readlink -f "$1")" | awk '{print tolower($0)}')" in
*.tgz|*.tar.gz) tar tzf "$1" ;; *.tgz | *.tar.gz) tar tzf "$1" ;;
*.tar.bz2|*.tbz2) tar tjf "$1" ;; *.tar.bz2 | *.tbz2) tar tjf "$1" ;;
*.tar.txz|*.txz) xz --list "$1" ;; *.tar.txz | *.txz) xz --list "$1" ;;
*.tar) tar tf "$1" ;; *.tar) tar tf "$1" ;;
*.zip|*.jar|*.war|*.ear|*.oxt) unzip -l "$1" ;; *.zip | *.jar | *.war | *.ear | *.oxt) unzip -l "$1" ;;
*.rar) unrar l "$1" ;; *.rar) unrar l "$1" ;;
*.md) glow -s dark "$1" ;; *.md) glow -s dark "$1" ;;
*.7z) 7z l "$1" ;; *.7z) 7z l "$1" ;;
*.[1-8]) man "$1" | col -b ;; *.[1-8]) man "$1" | col -b ;;
*.o) nm "$1";; *.o) nm "$1" ;;
*.torrent) transmission-show "$1" ;; *.torrent) transmission-show "$1" ;;
*.iso) iso-info --no-header -l "$1" ;; *.iso) iso-info --no-header -l "$1" ;;
*.odt|*.ods|*.odp|*.sxw) odt2txt "$1" ;; *.odt | *.ods | *.odp | *.sxw) odt2txt "$1" ;;
*.doc) catdoc "$1" ;; *.doc) catdoc "$1" ;;
*.docx) docx2txt "$1" - ;; *.docx) docx2txt "$1" - ;;
*.xml|*.html) w3m -dump "$1";; *.xml | *.html) w3m -dump "$1" ;;
*.xls|*.xlsx) *.xls | *.xlsx)
ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1" | batorcat --language=csv ssconvert --export-type=Gnumeric_stf:stf_csv "$1" "fd://1" | batorcat --language=csv
;; ;;
*.wav|*.mp3|*.flac|*.m4a|*.wma|*.ape|*.ac3|*.og[agx]|*.spx|*.opus|*.as[fx]|*.mka) *.wav | *.mp3 | *.flac | *.m4a | *.wma | *.ape | *.ac3 | *.og[agx] | *.spx | *.opus | *.as[fx] | *.mka)
exiftool "$1" exiftool "$1"
;; ;;
*.pdf) *.pdf)
[ ! -f "${CACHE}.jpg" ] && \ [ ! -f "${CACHE}.jpg" ] &&
pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE" pdftoppm -jpeg -f 1 -singlefile "$1" "$CACHE"
image "${CACHE}.jpg" "$2" "$3" "$4" "$5" image "${CACHE}.jpg" "$2" "$3" "$4" "$5"
;; ;;
*.epub) *.epub)
[ ! -f "$CACHE" ] && \ [ ! -f "$CACHE" ] &&
epub-thumbnailer "$1" "$CACHE" 1024 epub-thumbnailer "$1" "$CACHE" 1024
image "$CACHE" "$2" "$3" "$4" "$5" image "$CACHE" "$2" "$3" "$4" "$5"
;; ;;
*.cbz|*.cbr|*.cbt) *.cbz | *.cbr | *.cbt)
[ ! -f "$CACHE" ] && \ [ ! -f "$CACHE" ] &&
comicthumb "$1" "$CACHE" 1024 comicthumb "$1" "$CACHE" 1024
image "$CACHE" "$2" "$3" "$4" "$5" image "$CACHE" "$2" "$3" "$4" "$5"
;; ;;
*.avi|*.mp4|*.wmv|*.dat|*.3gp|*.ogv|*.mkv|*.mpg|*.mpeg|*.vob|*.fl[icv]|*.m2v|*.mov|*.webm|*.ts|*.mts|*.m4v|*.r[am]|*.qt|*.divx) *.avi | *.mp4 | *.wmv | *.dat | *.3gp | *.ogv | *.mkv | *.mpg | *.mpeg | *.vob | *.fl[icv] | *.m2v | *.mov | *.webm | *.ts | *.mts | *.m4v | *.r[am] | *.qt | *.divx)
[ ! -f "${CACHE}.jpg" ] && \ [ ! -f "${CACHE}.jpg" ] &&
ffmpegthumbnailer -i "$1" -o "${CACHE}.jpg" -s 0 -q 5 ffmpegthumbnailer -i "$1" -o "${CACHE}.jpg" -s 0 -q 5
image "${CACHE}.jpg" "$2" "$3" "$4" "$5" image "${CACHE}.jpg" "$2" "$3" "$4" "$5"
;; ;;
*.bmp|*.jpg|*.jpeg|*.png|*.xpm|*.webp|*.gif|*.jfif) *.bmp | *.jpg | *.jpeg | *.png | *.xpm | *.webp | *.gif | *.jfif)
image "$1" "$2" "$3" "$4" "$5" image "$1" "$2" "$3" "$4" "$5"
;; ;;
*.svg) *.svg)
[ ! -f "${CACHE}.jpg" ] && \ [ ! -f "${CACHE}.jpg" ] &&
convert "$1" "${CACHE}.jpg" convert "$1" "${CACHE}.jpg"
image "${CACHE}.jpg" "$2" "$3" "$4" "$5" image "${CACHE}.jpg" "$2" "$3" "$4" "$5"
;; ;;
*.ino) *.ino)
batorcat --language=cpp "$1" batorcat --language=cpp "$1"
;; ;;
*) *)
batorcat "$1" batorcat "$1"
;; ;;
esac esac
exit 0 exit 0

View File

@ -93,19 +93,19 @@ nnoremap S :%s//gI<Left><Left><Left>
" Use tab for trigger completion with characters ahead and navigate. " Use tab for trigger completion with characters ahead and navigate.
inoremap <silent><expr> <TAB> inoremap <silent><expr> <TAB>
\ pumvisible() ? "\<C-n>" : \ pumvisible() ? "\<C-n>" :
\ <SID>check_back_space() ? "\<TAB>" : \ <SID>check_back_space() ? "\<TAB>" :
\ coc#refresh() \ coc#refresh()
inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
function! s:check_back_space() abort function! s:check_back_space() abort
let col = col('.') - 1 let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s' return !col || getline('.')[col - 1] =~# '\s'
endfunction endfunction
" Use <c-space> to trigger completion. " Use <c-space> to trigger completion.
if has('nvim') if has('nvim')
inoremap <silent><expr> <c-space> coc#refresh() inoremap <silent><expr> <c-space> coc#refresh()
else else
inoremap <silent><expr> <c-@> coc#refresh() inoremap <silent><expr> <c-@> coc#refresh()
endif endif
@ -113,32 +113,32 @@ endif
lua << END lua << END
require('Comment').setup() require('Comment').setup()
require('lualine').setup { require('lualine').setup {
options = { options = {
icons_enabled = true, icons_enabled = true,
theme = 'dracula', theme = 'dracula',
component_separators = { left = '', right = ''}, component_separators = { left = '', right = ''},
section_separators = { left = '', right = ''}, section_separators = { left = '', right = ''},
disabled_filetypes = {}, disabled_filetypes = {},
always_divide_middle = true, always_divide_middle = true,
globalstatus = false, globalstatus = false,
}, },
sections = { sections = {
lualine_a = {'mode'}, lualine_a = {'mode'},
lualine_b = {'branch', 'diff', 'diagnostics'}, lualine_b = {'branch', 'diff', 'diagnostics'},
lualine_c = {'filename'}, lualine_c = {'filename'},
lualine_x = {'encoding', 'fileformat', 'filetype'}, lualine_x = {'encoding', 'fileformat', 'filetype'},
lualine_y = {'progress'}, lualine_y = {'progress'},
lualine_z = {'location'} lualine_z = {'location'}
}, },
inactive_sections = { inactive_sections = {
lualine_a = {}, lualine_a = {},
lualine_b = {}, lualine_b = {},
lualine_c = {'filename'}, lualine_c = {'filename'},
lualine_x = {'location'}, lualine_x = {'location'},
lualine_y = {}, lualine_y = {},
lualine_z = {} lualine_z = {}
}, },
tabline = {}, tabline = {},
extensions = {} extensions = {}
} }
END END

View File

@ -1,4 +1,4 @@
#! /usr/bin/env lua #!/usr/bin/env lua
--===================================================================== --=====================================================================
-- --
-- z.lua - a cd command that learns, by skywind 2018-2022 -- z.lua - a cd command that learns, by skywind 2018-2022
@ -90,8 +90,8 @@
local modname = 'z' local modname = 'z'
local MM = {} local MM = {}
_G[modname] = MM _G[modname] = MM
package.loaded[modname] = MM --return modname package.loaded[modname] = MM --return modname
setmetatable(MM, {__index = _G}) setmetatable(MM, { __index = _G })
if _ENV ~= nil then if _ENV ~= nil then
_ENV[modname] = MM _ENV[modname] = MM
@ -166,7 +166,7 @@ function string:startswith(text)
end end
function string:endswith(text) function string:endswith(text)
return text == "" or self:sub(-#text) == text return text == "" or self:sub(- #text) == text
end end
function string:lstrip() function string:lstrip()
@ -215,7 +215,6 @@ function string:join(parts)
return text return text
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- table size -- table size
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -226,16 +225,15 @@ function table.length(T)
return count return count
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- print table -- print table
----------------------------------------------------------------------- -----------------------------------------------------------------------
function dump(o) function dump(o)
if type(o) == 'table' then if type(o) == 'table' then
local s = '{ ' local s = '{ '
for k,v in pairs(o) do for k, v in pairs(o) do
if type(k) ~= 'number' then k = '"'..k..'"' end if type(k) ~= 'number' then k = '"' .. k .. '"' end
s = s .. '['..k..'] = ' .. dump(v) .. ',' s = s .. '[' .. k .. '] = ' .. dump(v) .. ','
end end
return s .. '} ' return s .. '} '
else else
@ -243,7 +241,6 @@ function dump(o)
end end
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- print table -- print table
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -254,10 +251,10 @@ function printT(table, level)
level = level or 1 level = level or 1
local indent = "" local indent = ""
for i = 1, level do for i = 1, level do
indent = indent.." " indent = indent .. " "
end end
if key ~= "" then if key ~= "" then
print(indent..key.." ".."=".." ".."{") print(indent .. key .. " " .. "=" .. " " .. "{")
else else
print(indent .. "{") print(indent .. "{")
end end
@ -268,7 +265,7 @@ function printT(table, level)
key = k key = k
func(v, level + 1) func(v, level + 1)
else else
local content = string.format("%s%s = %s", indent .. " ",tostring(k), tostring(v)) local content = string.format("%s%s = %s", indent .. " ", tostring(k), tostring(v))
print(content) print(content)
end end
end end
@ -277,7 +274,6 @@ function printT(table, level)
func(table, level) func(table, level)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- invoke command and retrive output -- invoke command and retrive output
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -291,7 +287,6 @@ function os.call(command)
return line return line
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- write log -- write log
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -308,16 +303,15 @@ function os.log(text)
fp:close() fp:close()
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- ffi optimize (luajit has builtin ffi module) -- ffi optimize (luajit has builtin ffi module)
----------------------------------------------------------------------- -----------------------------------------------------------------------
os.native = {} os.native = {}
os.native.status, os.native.ffi = pcall(require, "ffi") os.native.status, os.native.ffi = pcall(require, "ffi")
if os.native.status then if os.native.status then
local ffi = os.native.ffi local ffi = os.native.ffi
if windows then if windows then
ffi.cdef[[ ffi.cdef [[
int GetFullPathNameA(const char *name, uint32_t size, char *out, char **name); int GetFullPathNameA(const char *name, uint32_t size, char *out, char **name);
int ReplaceFileA(const char *dstname, const char *srcname, void *, uint32_t, void *, void *); int ReplaceFileA(const char *dstname, const char *srcname, void *, uint32_t, void *, void *);
uint32_t GetTickCount(void); uint32_t GetTickCount(void);
@ -335,24 +329,30 @@ if os.native.status then
local hr = kernel32.GetFullPathNameA(name, 4096, buffer, nil) local hr = kernel32.GetFullPathNameA(name, 4096, buffer, nil)
return (hr > 0) and ffi.string(buffer, hr) or nil return (hr > 0) and ffi.string(buffer, hr) or nil
end end
function os.native.ReplaceFile(replaced, replacement) function os.native.ReplaceFile(replaced, replacement)
local hr = kernel32.ReplaceFileA(replaced, replacement, nil, 2, nil, nil) local hr = kernel32.ReplaceFileA(replaced, replacement, nil, 2, nil, nil)
return (hr ~= 0) and true or false return (hr ~= 0) and true or false
end end
function os.native.GetTickCount() function os.native.GetTickCount()
return kernel32.GetTickCount() return kernel32.GetTickCount()
end end
function os.native.GetFileAttributes(name) function os.native.GetFileAttributes(name)
return kernel32.GetFileAttributesA(name) return kernel32.GetFileAttributesA(name)
end end
function os.native.GetLongPathName(name) function os.native.GetLongPathName(name)
local hr = kernel32.GetLongPathNameA(name, buffer, 4096) local hr = kernel32.GetLongPathNameA(name, buffer, 4096)
return (hr ~= 0) and ffi.string(buffer, hr) or nil return (hr ~= 0) and ffi.string(buffer, hr) or nil
end end
function os.native.GetShortPathName(name) function os.native.GetShortPathName(name)
local hr = kernel32.GetShortPathNameA(name, buffer, 4096) local hr = kernel32.GetShortPathNameA(name, buffer, 4096)
return (hr ~= 0) and ffi.string(buffer, hr) or nil return (hr ~= 0) and ffi.string(buffer, hr) or nil
end end
function os.native.GetRealPathName(name) function os.native.GetRealPathName(name)
local short = os.native.GetShortPathName(name) local short = os.native.GetShortPathName(name)
if short then if short then
@ -360,10 +360,12 @@ if os.native.status then
end end
return nil return nil
end end
function os.native.exists(name) function os.native.exists(name)
local attr = os.native.GetFileAttributes(name) local attr = os.native.GetFileAttributes(name)
return attr ~= INVALID_FILE_ATTRIBUTES return attr ~= INVALID_FILE_ATTRIBUTES
end end
function os.native.isdir(name) function os.native.isdir(name)
local attr = os.native.GetFileAttributes(name) local attr = os.native.GetFileAttributes(name)
local isdir = FILE_ATTRIBUTE_DIRECTORY local isdir = FILE_ATTRIBUTE_DIRECTORY
@ -372,13 +374,14 @@ if os.native.status then
end end
return (attr % (2 * isdir)) >= isdir return (attr % (2 * isdir)) >= isdir
end end
function os.native.getcwd() function os.native.getcwd()
local hr = kernel32.GetCurrentDirectoryA(4096, buffer) local hr = kernel32.GetCurrentDirectoryA(4096, buffer)
if hr <= 0 then return nil end if hr <= 0 then return nil end
return ffi.string(buffer, hr) return ffi.string(buffer, hr)
end end
else else
ffi.cdef[[ ffi.cdef [[
typedef struct { long tv_sec; long tv_usec; } timeval; typedef struct { long tv_sec; long tv_usec; } timeval;
int gettimeofday(timeval *tv, void *tz); int gettimeofday(timeval *tv, void *tz);
int access(const char *name, int mode); int access(const char *name, int mode);
@ -393,13 +396,16 @@ if os.native.status then
local usec = tonumber(timeval[0].tv_usec) local usec = tonumber(timeval[0].tv_usec)
return sec + (usec * 0.000001) return sec + (usec * 0.000001)
end end
function os.native.access(name, mode) function os.native.access(name, mode)
return ffi.C.access(name, mode) return ffi.C.access(name, mode)
end end
function os.native.realpath(name) function os.native.realpath(name)
local path = ffi.C.realpath(name, buffer) local path = ffi.C.realpath(name, buffer)
return (path ~= nil) and ffi.string(buffer) or nil return (path ~= nil) and ffi.string(buffer) or nil
end end
function os.native.getcwd() function os.native.getcwd()
local hr = ffi.C.getcwd(buffer, 4099) local hr = ffi.C.getcwd(buffer, 4099)
return hr ~= nil and ffi.string(buffer) or nil return hr ~= nil and ffi.string(buffer) or nil
@ -412,6 +418,7 @@ if os.native.status then
return math.floor(os.native.gettimeofday() * 1000) return math.floor(os.native.gettimeofday() * 1000)
end end
end end
os.native.init = true os.native.init = true
end end
@ -446,7 +453,6 @@ function os.pwd()
end end
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- which executable -- which executable
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -464,7 +470,7 @@ function os.path.which(exename)
return name return name
end end
else else
for _, ext in pairs({'.exe', '.cmd', '.bat'}) do for _, ext in pairs({ '.exe', '.cmd', '.bat' }) do
local name = path .. '\\' .. exename .. ext local name = path .. '\\' .. exename .. ext
if path == '.' then if path == '.' then
name = exename .. ext name = exename .. ext
@ -478,7 +484,6 @@ function os.path.which(exename)
return nil return nil
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- absolute path (simulated) -- absolute path (simulated)
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -487,7 +492,6 @@ function os.path.absolute(path)
return os.path.normpath(os.path.join(pwd, path)) return os.path.normpath(os.path.join(pwd, path))
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- absolute path (system call, can fall back to os.path.absolute) -- absolute path (system call, can fall back to os.path.absolute)
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -527,7 +531,7 @@ function os.path.abspath(path)
return test return test
end end
end end
for _, python in pairs({'python3', 'python2', 'python'}) do for _, python in pairs({ 'python3', 'python2', 'python' }) do
local s = 'sys.stdout.write(os.path.abspath(sys.argv[1]))' local s = 'sys.stdout.write(os.path.abspath(sys.argv[1]))'
local s = '-c "import os, sys;' .. s .. '" \'' .. path .. '\'' local s = '-c "import os, sys;' .. s .. '" \'' .. path .. '\''
local s = python .. ' ' .. s local s = python .. ' ' .. s
@ -543,7 +547,6 @@ function os.path.abspath(path)
return os.path.absolute(path) return os.path.absolute(path)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- dir exists -- dir exists
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -570,7 +573,6 @@ function os.path.isdir(pathname)
return os.path.exists(name) return os.path.exists(name)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- file or path exists -- file or path exists
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -586,7 +588,7 @@ function os.path.exists(name)
if code == 13 or code == 17 then if code == 13 or code == 17 then
return true return true
elseif code == 30 then elseif code == 30 then
local f = io.open(name,"r") local f = io.open(name, "r")
if f ~= nil then if f ~= nil then
io.close(f) io.close(f)
return true return true
@ -603,7 +605,6 @@ function os.path.exists(name)
return true return true
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- is absolute path -- is absolute path
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -624,7 +625,6 @@ function os.path.isabs(path)
return false return false
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- normalize path -- normalize path
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -638,7 +638,6 @@ function os.path.norm(pathname)
return pathname return pathname
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- normalize . and .. -- normalize . and ..
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -683,7 +682,6 @@ function os.path.normpath(path)
return path == '' and '.' or path return path == '' and '.' or path
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- join two path -- join two path
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -744,7 +742,6 @@ function os.path.join(path1, path2)
end end
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- split -- split
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -797,7 +794,6 @@ function os.path.split(path)
return head, tail return head, tail
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- check subdir -- check subdir
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -818,7 +814,6 @@ function os.path.subdir(basename, subname)
return false return false
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- check single name element -- check single name element
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -834,7 +829,6 @@ function os.path.single(path)
return true return true
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- expand user home -- expand user home
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -862,14 +856,12 @@ function os.path.expand(pathname)
return pathname return pathname
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- search executable -- search executable
----------------------------------------------------------------------- -----------------------------------------------------------------------
function os.path.search(name) function os.path.search(name)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- get lua executable -- get lua executable
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -892,7 +884,6 @@ function os.interpreter()
return os.path.abspath(lua) return os.path.abspath(lua)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- get script name -- get script name
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -908,7 +899,6 @@ function os.scriptname()
return os.path.abspath(script) return os.path.abspath(script)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- get environ -- get environ
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -943,7 +933,6 @@ function os.environ(name, default)
end end
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- parse option -- parse option
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -985,7 +974,6 @@ function os.getopt(argv)
return options, args return options, args
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- generate random seed -- generate random seed
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1022,7 +1010,6 @@ function math.random_init()
math.randomseed(number) math.randomseed(number)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- math random string -- math random string
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1042,7 +1029,6 @@ function math.random_string(N)
return text return text
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- returns true for path is insensitive -- returns true for path is insensitive
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1059,7 +1045,6 @@ function path_case_insensitive()
return false return false
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- load and split data -- load and split data
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1094,7 +1079,6 @@ function data_load(filename)
return M return M
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- save data -- save data
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1151,7 +1135,6 @@ function data_save(filename, M)
return true return true
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- filter out bad dirname -- filter out bad dirname
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1168,7 +1151,6 @@ function data_filter(M)
return N return N
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- insert item -- insert item
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1224,7 +1206,6 @@ function data_insert(M, filename)
return M return M
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- change database -- change database
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1232,7 +1213,6 @@ function data_file_set(name)
DATA_FILE = name DATA_FILE = name
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- change pattern -- change pattern
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1251,7 +1231,6 @@ function case_insensitive_pattern(pattern)
return p return p
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- pathmatch -- pathmatch
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1286,7 +1265,6 @@ function path_match(pathname, patterns, matchlast)
return true return true
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- select matched pathnames -- select matched pathnames
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1310,7 +1288,6 @@ function data_select(M, patterns, matchlast)
return N return N
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- update frecent -- update frecent
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1333,7 +1310,6 @@ function data_update_frecent(M)
return M return M
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- add path -- add path
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1403,7 +1379,6 @@ function z_add(path)
return true return true
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- remove path -- remove path
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1447,7 +1422,6 @@ function z_remove(path)
data_save(DATA_FILE, X) data_save(DATA_FILE, X)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- match method: frecent, rank, time -- match method: frecent, rank, time
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1480,7 +1454,7 @@ function z_match(patterns, method, subdir)
item.score = item.frecent item.score = item.frecent
end end
end end
table.sort(M, function (a, b) return a.score > b.score end) table.sort(M, function(a, b) return a.score > b.score end)
local pwd = (PWD == nil or PWD == '') and os.getenv('PWD') or PWD local pwd = (PWD == nil or PWD == '') and os.getenv('PWD') or PWD
if pwd == nil or pwd == '' then if pwd == nil or pwd == '' then
pwd = os.pwd() pwd = os.pwd()
@ -1511,7 +1485,6 @@ function z_match(patterns, method, subdir)
return M return M
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- pretty print -- pretty print
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1574,7 +1547,6 @@ function z_print(M, weight, number)
end end
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- calculate jump dir -- calculate jump dir
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1611,7 +1583,7 @@ function z_cd(patterns)
return M[1].name return M[1].name
end end
if os.environ('_ZL_INT_SORT', false) then if os.environ('_ZL_INT_SORT', false) then
table.sort(M, function (a, b) return a.name < b.name end) table.sort(M, function(a, b) return a.name < b.name end)
end end
local retval = nil local retval = nil
if Z_INTERACTIVE == 1 then if Z_INTERACTIVE == 1 then
@ -1637,7 +1609,7 @@ function z_cd(patterns)
local cmd = '--nth 2.. --reverse --inline-info --tac ' local cmd = '--nth 2.. --reverse --inline-info --tac '
local flag = os.environ('_ZL_FZF_FLAG', '') local flag = os.environ('_ZL_FZF_FLAG', '')
flag = (flag == '' or flag == nil) and '+s -e' or flag flag = (flag == '' or flag == nil) and '+s -e' or flag
cmd = ((fzf == '') and 'fzf' or fzf) .. ' ' .. cmd .. ' ' .. flag cmd = ((fzf == '') and 'fzf' or fzf) .. ' ' .. cmd .. ' ' .. flag
if not windows then if not windows then
tmpname = os.tmpname() tmpname = os.tmpname()
local height = os.environ('_ZL_FZF_HEIGHT', '35%') local height = os.environ('_ZL_FZF_HEIGHT', '35%')
@ -1667,7 +1639,6 @@ function z_cd(patterns)
return (retval ~= '' and retval or nil) return (retval ~= '' and retval or nil)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- purge invalid paths -- purge invalid paths
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1683,7 +1654,6 @@ function z_purge()
return x, y return x, y
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- find_vcs_root -- find_vcs_root
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1706,7 +1676,6 @@ function find_vcs_root(path)
return nil return nil
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- cd to parent directories which contains keyword -- cd to parent directories which contains keyword
-- #args == 0 -> returns to vcs root -- #args == 0 -> returns to vcs root
@ -1775,7 +1744,6 @@ function cd_backward(args, options, pwd)
end end
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- cd minus: "z -", "z --", "z -2" -- cd minus: "z -", "z --", "z -2"
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1801,7 +1769,6 @@ function cd_minus(args, options)
return nil return nil
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- cd breadcrumbs: z -b -i, z -b -I -- cd breadcrumbs: z -b -i, z -b -I
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1814,11 +1781,11 @@ function cd_breadcrumbs(pwd, interactive)
local fullname = os.environ('_ZL_FULL_PATH', false) local fullname = os.environ('_ZL_FULL_PATH', false)
while true do while true do
local head, name = os.path.split(path) local head, name = os.path.split(path)
if head == path then -- reached root if head == path then -- reached root
table.insert(elements, {head, head}) table.insert(elements, { head, head })
break break
elseif name ~= '' then elseif name ~= '' then
table.insert(elements, {name, path}) table.insert(elements, { name, path })
else else
break break
end end
@ -1886,7 +1853,6 @@ function cd_breadcrumbs(pwd, interactive)
return elements[index][2] return elements[index][2]
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- main entry -- main entry
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -1963,7 +1929,7 @@ function main(argv)
elseif opts.fish then elseif opts.fish then
z_fish_init(opts) z_fish_init(opts)
elseif opts.powershell then elseif opts.powershell then
z_windows_init(opts) z_windows_init(opts)
else else
z_shell_init(opts) z_shell_init(opts)
end end
@ -1976,8 +1942,8 @@ function main(argv)
end end
elseif options['--complete'] then elseif options['--complete'] then
local line = args[1] and args[1] or '' local line = args[1] and args[1] or ''
local head = line:sub(Z_CMD:len()+1):gsub('^%s+', '') local head = line:sub(Z_CMD:len() + 1):gsub('^%s+', '')
local M = z_match({head}, Z_METHOD, Z_SUBDIR) local M = z_match({ head }, Z_METHOD, Z_SUBDIR)
for _, item in pairs(M) do for _, item in pairs(M) do
print(item.name) print(item.name)
end end
@ -1987,7 +1953,6 @@ function main(argv)
return true return true
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- initialize from environment variable -- initialize from environment variable
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -2060,7 +2025,6 @@ function z_init()
end end
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- initialize clink hooks -- initialize clink hooks
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -2078,14 +2042,16 @@ function z_clink_init()
end end
z_add(clink.get_cwd()) z_add(clink.get_cwd())
end end
clink.prompt.register_filter(z_add_to_database, _zl_clink_prompt_priority) clink.prompt.register_filter(z_add_to_database, _zl_clink_prompt_priority)
function z_match_completion(word) function z_match_completion(word)
local M = z_match({word}, Z_METHOD, Z_SUBDIR) local M = z_match({ word }, Z_METHOD, Z_SUBDIR)
for _, item in pairs(M) do for _, item in pairs(M) do
clink.add_match(item.name) clink.add_match(item.name)
end end
return {} return {}
end end
local z_parser = clink.arg.new_parser() local z_parser = clink.arg.new_parser()
z_parser:set_arguments({ z_match_completion }) z_parser:set_arguments({ z_match_completion })
z_parser:set_flags("-c", "-r", "-i", "--cd", "-e", "-b", "--add", "-x", "--purge", z_parser:set_flags("-c", "-r", "-i", "--cd", "-e", "-b", "--add", "-x", "--purge",
@ -2093,7 +2059,6 @@ function z_clink_init()
clink.arg.register_parser("z", z_parser) clink.arg.register_parser("z", z_parser)
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- shell scripts -- shell scripts
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -2168,9 +2133,9 @@ esac
local script_init_bash_once = [[ local script_init_bash_once = [[
_zlua_precmd() { _zlua_precmd() {
[ "$_ZL_PREVIOUS_PWD" = "$PWD" ] && return [ "$_ZL_PREVIOUS_PWD" = "$PWD" ] && return
_ZL_PREVIOUS_PWD="$PWD" _ZL_PREVIOUS_PWD="$PWD"
(_zlua --add "$PWD" 2> /dev/null &) (_zlua --add "$PWD" 2> /dev/null &)
} }
case "$PROMPT_COMMAND" in case "$PROMPT_COMMAND" in
*_zlua_precmd*) ;; *_zlua_precmd*) ;;
@ -2187,9 +2152,9 @@ esac
local script_init_posix_once = [[ local script_init_posix_once = [[
_zlua_precmd() { _zlua_precmd() {
[ "$_ZL_PREVIOUS_PWD" = "$PWD" ] && return [ "$_ZL_PREVIOUS_PWD" = "$PWD" ] && return
_ZL_PREVIOUS_PWD="$PWD" _ZL_PREVIOUS_PWD="$PWD"
(_zlua --add "$PWD" 2> /dev/null &) (_zlua --add "$PWD" 2> /dev/null &)
} }
case "$PS1" in case "$PS1" in
*_zlua_precmd*) ;; *_zlua_precmd*) ;;
@ -2343,7 +2308,6 @@ function z_shell_init(opts)
end end
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- Fish shell init -- Fish shell init
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -2468,7 +2432,6 @@ function z_fish_init(opts)
end end
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- windows .cmd script -- windows .cmd script
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -2694,7 +2657,6 @@ function z_windows_init(opts)
end end
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- help -- help
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -2713,7 +2675,6 @@ function z_help()
print(cmd .. '-b foo # cd to the parent directory starting with foo') print(cmd .. '-b foo # cd to the parent directory starting with foo')
end end
----------------------------------------------------------------------- -----------------------------------------------------------------------
-- LFS optimize -- LFS optimize
----------------------------------------------------------------------- -----------------------------------------------------------------------
@ -2726,10 +2687,10 @@ if os.lfs.enable ~= nil then
os.lfs.status, os.lfs.pkg = pcall(require, 'lfs') os.lfs.status, os.lfs.pkg = pcall(require, 'lfs')
if os.lfs.status then if os.lfs.status then
local lfs = os.lfs.pkg local lfs = os.lfs.pkg
os.path.exists = function (name) os.path.exists = function(name)
return lfs.attributes(name) and true or false return lfs.attributes(name) and true or false
end end
os.path.isdir = function (name) os.path.isdir = function(name)
local mode = lfs.attributes(name) local mode = lfs.attributes(name)
if not mode then if not mode then
return false return false

View File

@ -1,6 +1,5 @@
#!/bin/zsh #!/bin/zsh
if [[ "$(tty)" = "/dev/tty1" ]]; then if [[ '$(tty)' = '/dev/tty1' ]]; then
pgrep awesome || sx pgrep awesome || sx
fi fi

View File

@ -1,21 +1,18 @@
# clear
# cd ~
# Flex on ubuntu users # Flex on ubuntu users
fastfetch fastfetch
# pfetch # pfetch
# Options # Options
# setopt correct # Auto correct mistakes # setopt correct # Auto correct mistakes
setopt extendedglob # Extended globaling. Allows using regular expressions with * setopt extendedglob # Extended globaling. Allows using regular expressions with *
setopt nocaseglob # Case insensative globbing setopt nocaseglob # Case insensative globbing
setopt numericglobsort # Sort filenames numeracally when it makse sense setopt numericglobsort # Sort filenames numeracally when it makse sense
setopt nobeep # No beep setopt nobeep # No beep
setopt appendhistory # Immediately append history instead of overwriting setopt appendhistory # Immediately append history instead of overwriting
setopt histignorealldups # If a new command is a duplicate, remove older one setopt histignorealldups # If a new command is a duplicate, remove older one
setopt autocd # If only directory path is entered, cd there setopt autocd # If only directory path is entered, cd there
setopt inc_append_history # Save commands are addded to the history immediately setopt inc_append_history # Save commands are addded to the history immediately
setopt histignorespace # Don't save commands that start with space setopt histignorespace # Don't save commands that start with space
autoload -U select-word-style autoload -U select-word-style
@ -24,7 +21,7 @@ autoload -U colors && colors
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case sensetive TAB completions zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case sensetive TAB completions
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Colored completion (different colors fr dirs/files/etc) zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Colored completion (different colors fr dirs/files/etc)
zstyle ':completion:*' rehash true # Automaticly find new executables in path zstyle ':completion:*' rehash true # Automaticly find new executables in path
# Speed up completions # Speed up completions
zstyle ':completion:*' accept-exact '*(N)' zstyle ':completion:*' accept-exact '*(N)'
zstyle ':completion:*' use-cache on zstyle ':completion:*' use-cache on
@ -33,13 +30,12 @@ zstyle ':completion:*' menu select
autoload -U compinit autoload -U compinit
zmodload zsh/complist zmodload zsh/complist
compinit compinit
_comp_options+=(globdots) # Include hidden files _comp_options+=(globdots) # Include hidden files
HISTFILE=~/.config/zsh/.zshistory HISTFILE=~/.config/zsh/.zshistory
HISTSIZE=10000 HISTSIZE=10000
SAVEHIST=10000 SAVEHIST=10000
WORDCHARS=${WORDCHARS//\/[&.;]} # Don't consider certain part of the word WORDCHARS=${WORDCHARS//\/[&.;]/} # Don't consider certain part of the word
# theme/plugins # theme/plugins
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh 2>/dev/null source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh 2>/dev/null
@ -53,52 +49,50 @@ bindkey -e
bindkey -v bindkey -v
export KEYTIMEOUT=1 export KEYTIMEOUT=1
# Change cursor shape for different vi modes. # Change cursor shape for different vi modes.
function zle-keymap-select { function zle-keymap-select {
case $KEYMAP in case $KEYMAP in
vicmd) echo -ne "\e[1 q";; # block vicmd) echo -ne '\e[1 q' ;; # block
viins|main) echo -ne "\e[5 q";; # beam viins | main) echo -ne '\e[5 q' ;; # beam
esac esac
} }
zle -N zle-keymap-select zle -N zle-keymap-select
zle-line-init() { zle-line-init() {
zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere) zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
echo -ne "\e[5 q" echo -ne '\e[5 q'
} }
zle -N zle-line-init zle -N zle-line-init
echo -ne "\e[5 q" # Use beam shape cursor on startup. echo -ne '\e[5 q' # Use beam shape cursor on startup.
preexec() { echo -ne "\e[5 q" ;} # Use beam shape cursor for each new prompt. preexec() { echo -ne '\e[5 q'; } # Use beam shape cursor for each new prompt.
# Run exa on directory change
function cd() { function cd() {
new_directory="$*"; new_directory="$*"
if [ $# -eq 0 ]; then if [ $# -eq 0 ]; then
new_directory=${HOME}; new_directory=${HOME}
fi; fi
builtin cd "${new_directory}" && exa -a --icons --group-directories-first builtin cd "${new_directory}" && exa -a --icons --group-directories-first
} }
# Use lf to switch directories and bind it to ctrl-o # Use lf to switch directories and bind it to ctrl-o
lfcd () { function lfcd() {
tmp="$(mktemp)" tmp="$(mktemp)"
lfrun -last-dir-path="$tmp" "$@" lfrun -last-dir-path="$tmp" "$@"
if [ -f "$tmp" ]; then if [ -f "$tmp" ]; then
dir="$(cat "$tmp")" dir="$(bat "$tmp")"
rm -f "$tmp" >/dev/null rm -f "$tmp" >/dev/null
[ -d "$dir" ] && [ "$dir" != "$(pwd)" ] && cd "$dir" [ -d "$dir" ] && [ "$dir" != "$(pwd)" ] && cd "$dir"
fi fi
} }
# Navigate words with CTRL+ARROW keys # Navigate words with CTRL+ARROW keys
bindkey '^[Oc' forward-word bindkey '^[Oc' forward-word
bindkey '^[Od' backward-word bindkey '^[Od' backward-word
bindkey '^[[1;5C' forward-word bindkey '^[[1;5C' forward-word
bindkey '^[[1;5D' backward-word bindkey '^[[1;5D' backward-word
bindkey '^H' backward-kill-word # delete previous word with CTRL+BACKSPACE bindkey '^H' backward-kill-word # delete previous word with CTRL+BACKSPACE
bindkey '^[[Z' undo # SHIFT+TAB undo last action bindkey '^[[Z' undo # SHIFT+TAB undo last action
bindkey "^[[3~" delete-char bindkey '^[[3~' delete-char
bindkey '^[[A' history-substring-search-up bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down bindkey '^[[B' history-substring-search-down
@ -110,24 +104,25 @@ bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history bindkey -M menuselect 'j' vi-down-line-or-history
bindkey -v '^?' backward-delete-char bindkey -v '^?' backward-delete-char
bindkey -s "^o" "^ulfcd\n" bindkey -s '^o' '^ulfcd\n'
bindkey -s "^a" "ubc -lq\n" # bindkey -s '^a' 'ubc -lq\n'
bindkey "^[[P" delete-char bindkey '^[[P' delete-char
# Edit line in vim with ctrl-e # Edit line in vim with ctrl-e
autoload edit-command-line; zle -N edit-command-line autoload edit-command-line
bindkey "^e" edit-command-line zle -N edit-command-line
bindkey -M vicmd "^[[P" vi-delete-char bindkey '^e' edit-command-line
bindkey -M vicmd "^e" edit-command-line bindkey -M vicmd '^[[P' vi-delete-char
bindkey -M visual "^[[P" vi-delete bindkey -M vicmd '^e' edit-command-line
bindkey -M visual '^[[P' vi-delete
# Aliases # Aliases
alias cp='cp -iv' # Confirm before overwriting something alias cp='cp -iv' # Confirm before overwriting something
alias mv="mv -iv" alias mv='mv -iv'
alias rm="rm -vI" alias rm='rm -vI'
alias mkdir="mkdir -pv" alias mkdir='mkdir -pv'
alias df='df -h' # Human-readable sizes alias df='df -h' # Human-readable sizes
alias free='free -m' # Show sizes in MB alias free='free -m' # Show sizes in MB
alias gitu='git add . && git commit && git push' alias gitu='git add . && git commit && git push'
alias ls='exa -a --icons --group-directories-first' alias ls='exa -a --icons --group-directories-first'
alias lf='lfrun' alias lf='lfrun'
@ -138,18 +133,18 @@ alias pman='doas pacman'
alias battery='acpi' alias battery='acpi'
alias airpods='bluetoothctl connect C8:B1:CD:E0:14:4F' alias airpods='bluetoothctl connect C8:B1:CD:E0:14:4F'
alias weather='curl wttr.in/' alias weather='curl wttr.in/'
alias ww="nvim ~/vimwiki/index.wiki" alias ww='nvim ~/vimwiki/index.wiki'
alias py="python" alias py='python'
alias grep="grep --color=auto" alias grep='grep --color=auto'
alias diff="diff --color=auto" alias diff='diff --color=auto'
alias ip="ip -color=auto" alias ip='ip -color=auto'
alias grep="rg" alias grep='rg'
alias code="vscodium" alias code='vscodium'
source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 2>/dev/null source /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh 2>/dev/null
autoload -U promptinit; promptinit autoload -U promptinit
promptinit
prompt spaceship prompt spaceship
# PROMPT # PROMPT
@ -225,4 +220,3 @@ SPACESHIP_VENV_SHOW=true
SPACESHIP_CONDA_SHOW=false SPACESHIP_CONDA_SHOW=false
SPACESHIP_PYENV_SHOW=true SPACESHIP_PYENV_SHOW=true
SPACESHIP_VI_MODE_SHOW=false SPACESHIP_VI_MODE_SHOW=false

2
.gitignore vendored
View File

@ -1 +1 @@
vscodium/extensions

View File

@ -2,15 +2,15 @@
- Very useful scripts are in `~/.local/bin/` - Very useful scripts are in `~/.local/bin/`
- Settings for: - Settings for:
- vim/nvim (text editor) - vim/nvim (text editor)
- zsh (shell) - zsh (shell)
- lf (file manager) - lf (file manager)
- nsxiv (image/gif viewer) - nsxiv (image/gif viewer)
- mpv (video player) - mpv (video player)
- I try to minimize what's directly in `~` so: - I try to minimize what's directly in `~` so:
- All configs that can be in `~/.config/` are. - All configs that can be in `~/.config/` are.
- Some environmental variables have been set in `~/.zprofile` to move configs into `~/.config/` - Some environmental variables have been set in `~/.zprofile` to move configs into `~/.config/`
## Credits ## Credits
- [lfimg by cirala](https://github.com/cirala/lfimg) - [lfimg by cirala](https://github.com/cirala/lfimg)