Add explicit control over wezterm keyboard shortcuts
This commit is contained in:
parent
0664b2424e
commit
d3ed6bae04
|
@ -1,7 +1,240 @@
|
||||||
|
local wezterm = require('wezterm')
|
||||||
|
local act = wezterm.action
|
||||||
|
|
||||||
|
wezterm.on('update-right-status', function(window, pane)
|
||||||
|
local name = window:active_key_table()
|
||||||
|
if name then
|
||||||
|
name = 'TABLE: ' .. name
|
||||||
|
end
|
||||||
|
window:set_right_status(name or '')
|
||||||
|
end)
|
||||||
|
|
||||||
|
local function isViProcess(pane)
|
||||||
|
-- get_foreground_process_name On Linux, macOS and Windows,
|
||||||
|
-- the process can be queried to determine this path. Other operating systems
|
||||||
|
-- (notably, FreeBSD and other unix systems) are not currently supported
|
||||||
|
return pane:get_foreground_process_name():find('n?vim') ~= nil
|
||||||
|
-- return pane:get_title():find("n?vim") ~= nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local function conditionalActivatePane(window, pane, pane_direction, vim_direction)
|
||||||
|
if isViProcess(pane) then
|
||||||
|
window:perform_action(
|
||||||
|
-- This should match the keybinds you set in Neovim.
|
||||||
|
act.SendKey({ key = vim_direction, mods = 'ALT' }),
|
||||||
|
pane
|
||||||
|
)
|
||||||
|
else
|
||||||
|
window:perform_action(act.ActivatePaneDirection(pane_direction), pane)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
wezterm.on('ActivatePaneDirection-right', function(window, pane)
|
||||||
|
conditionalActivatePane(window, pane, 'Right', 'l')
|
||||||
|
end)
|
||||||
|
wezterm.on('ActivatePaneDirection-left', function(window, pane)
|
||||||
|
conditionalActivatePane(window, pane, 'Left', 'h')
|
||||||
|
end)
|
||||||
|
wezterm.on('ActivatePaneDirection-up', function(window, pane)
|
||||||
|
conditionalActivatePane(window, pane, 'Up', 'k')
|
||||||
|
end)
|
||||||
|
wezterm.on('ActivatePaneDirection-down', function(window, pane)
|
||||||
|
conditionalActivatePane(window, pane, 'Down', 'j')
|
||||||
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
local keys = {
|
||||||
|
{ key = 'h', mods = 'ALT', action = act.EmitEvent('ActivatePaneDirection-left') },
|
||||||
|
{ key = 'j', mods = 'ALT', action = act.EmitEvent('ActivatePaneDirection-down') },
|
||||||
|
{ key = 'k', mods = 'ALT', action = act.EmitEvent('ActivatePaneDirection-up') },
|
||||||
|
{ key = 'l', mods = 'ALT', action = act.EmitEvent('ActivatePaneDirection-right') },
|
||||||
|
{ key = 'Tab', mods = 'CTRL', action = act.ActivateTabRelative(1) },
|
||||||
|
{ key = 'Tab', mods = 'SHIFT|CTRL', action = act.ActivateTabRelative(-1) },
|
||||||
|
{ key = 'Enter', mods = 'SUPER', action = act.ToggleFullScreen },
|
||||||
|
{ key = '1', mods = 'ALT', action = act.ActivateTab(0) },
|
||||||
|
{ key = '2', mods = 'ALT', action = act.ActivateTab(1) },
|
||||||
|
{ key = '3', mods = 'ALT', action = act.ActivateTab(2) },
|
||||||
|
{ key = '4', mods = 'ALT', action = act.ActivateTab(3) },
|
||||||
|
{ key = '5', mods = 'ALT', action = act.ActivateTab(4) },
|
||||||
|
{ key = '6', mods = 'ALT', action = act.ActivateTab(5) },
|
||||||
|
{ key = '7', mods = 'ALT', action = act.ActivateTab(6) },
|
||||||
|
{ key = '8', mods = 'ALT', action = act.ActivateTab(7) },
|
||||||
|
{ key = '9', mods = 'ALT', action = act.ActivateTab(8) },
|
||||||
|
{ key = '0', mods = 'ALT', action = act.ActivateTab(-1) },
|
||||||
|
{ key = 'Enter', mods = 'ALT', action = act.SplitVertical{ domain = 'CurrentPaneDomain' } },
|
||||||
|
{ key = 'Enter', mods = 'SHIFT|ALT', action = act.SplitHorizontal{ domain = 'CurrentPaneDomain' } },
|
||||||
|
{ key = ')', mods = 'CTRL', action = act.ResetFontSize },
|
||||||
|
{ key = ')', mods = 'SHIFT|CTRL', action = act.ResetFontSize },
|
||||||
|
{ key = '0', mods = 'CTRL', action = act.ResetFontSize },
|
||||||
|
{ key = '0', mods = 'SHIFT|CTRL', action = act.ResetFontSize },
|
||||||
|
{ key = '+', mods = 'CTRL', action = act.IncreaseFontSize },
|
||||||
|
{ key = '+', mods = 'SHIFT|CTRL', action = act.IncreaseFontSize },
|
||||||
|
{ key = '-', mods = 'CTRL', action = act.DecreaseFontSize },
|
||||||
|
{ key = '-', mods = 'SHIFT|CTRL', action = act.DecreaseFontSize },
|
||||||
|
{ key = '=', mods = 'CTRL', action = act.IncreaseFontSize },
|
||||||
|
{ key = '=', mods = 'SHIFT|CTRL', action = act.IncreaseFontSize },
|
||||||
|
{ key = 'C', mods = 'CTRL', action = act.CopyTo 'Clipboard' },
|
||||||
|
{ key = 'C', mods = 'SHIFT|CTRL', action = act.CopyTo 'Clipboard' },
|
||||||
|
{ key = 'F', mods = 'CTRL', action = act.Search 'CurrentSelectionOrEmptyString' },
|
||||||
|
{ key = 'F', mods = 'SHIFT|CTRL', action = act.Search 'CurrentSelectionOrEmptyString' },
|
||||||
|
{ key = 'K', mods = 'CTRL', action = act.ClearScrollback 'ScrollbackOnly' },
|
||||||
|
{ key = 'K', mods = 'SHIFT|CTRL', action = act.ClearScrollback 'ScrollbackOnly' },
|
||||||
|
{ key = 'L', mods = 'CTRL', action = act.ShowDebugOverlay },
|
||||||
|
{ key = 'L', mods = 'SHIFT|CTRL', action = act.ShowDebugOverlay },
|
||||||
|
{ key = 'M', mods = 'CTRL', action = act.Hide },
|
||||||
|
{ key = 'M', mods = 'SHIFT|CTRL', action = act.Hide },
|
||||||
|
{ key = 'N', mods = 'CTRL', action = act.SpawnWindow },
|
||||||
|
{ key = 'N', mods = 'SHIFT|CTRL', action = act.SpawnWindow },
|
||||||
|
{ key = 'P', mods = 'CTRL', action = act.PaneSelect{ alphabet = '', mode = 'Activate' } },
|
||||||
|
{ key = 'P', mods = 'SHIFT|CTRL', action = act.PaneSelect{ alphabet = '', mode = 'Activate' } },
|
||||||
|
{ key = 'R', mods = 'CTRL', action = act.ReloadConfiguration },
|
||||||
|
{ key = 'R', mods = 'SHIFT|CTRL', action = act.ReloadConfiguration },
|
||||||
|
{ key = 'T', mods = 'CTRL', action = act.SpawnTab 'CurrentPaneDomain' },
|
||||||
|
{ key = 'T', mods = 'SHIFT|CTRL', action = act.SpawnTab 'CurrentPaneDomain' },
|
||||||
|
{ key = 'U', mods = 'CTRL', action = act.CharSelect{ copy_on_select = true, copy_to = 'ClipboardAndPrimarySelection' } },
|
||||||
|
{ key = 'U', mods = 'SHIFT|CTRL', action = act.CharSelect{ copy_on_select = true, copy_to = 'ClipboardAndPrimarySelection' } },
|
||||||
|
{ key = 'V', mods = 'CTRL', action = act.PasteFrom 'Clipboard' },
|
||||||
|
{ key = 'V', mods = 'SHIFT|CTRL', action = act.PasteFrom 'Clipboard' },
|
||||||
|
{ key = 'W', mods = 'CTRL', action = act.CloseCurrentTab{ confirm = true } },
|
||||||
|
{ key = 'W', mods = 'SHIFT|CTRL', action = act.CloseCurrentTab{ confirm = true } },
|
||||||
|
{ key = 'X', mods = 'CTRL', action = act.ActivateCopyMode },
|
||||||
|
{ key = 'X', mods = 'SHIFT|CTRL', action = act.ActivateCopyMode },
|
||||||
|
{ key = 'Z', mods = 'CTRL', action = act.TogglePaneZoomState },
|
||||||
|
{ key = 'Z', mods = 'SHIFT|CTRL', action = act.TogglePaneZoomState },
|
||||||
|
{ key = '[', mods = 'SHIFT|SUPER', action = act.ActivateTabRelative(-1) },
|
||||||
|
{ key = ']', mods = 'SHIFT|SUPER', action = act.ActivateTabRelative(1) },
|
||||||
|
{ key = '_', mods = 'CTRL', action = act.DecreaseFontSize },
|
||||||
|
{ key = '_', mods = 'SHIFT|CTRL', action = act.DecreaseFontSize },
|
||||||
|
{ key = 'c', mods = 'SHIFT|CTRL', action = act.CopyTo 'Clipboard' },
|
||||||
|
{ key = 'c', mods = 'SUPER', action = act.CopyTo 'Clipboard' },
|
||||||
|
{ key = 'f', mods = 'SHIFT|CTRL', action = act.Search 'CurrentSelectionOrEmptyString' },
|
||||||
|
{ key = 'f', mods = 'SUPER', action = act.Search 'CurrentSelectionOrEmptyString' },
|
||||||
|
{ key = 'k', mods = 'SHIFT|CTRL', action = act.ClearScrollback 'ScrollbackOnly' },
|
||||||
|
{ key = 'k', mods = 'SUPER', action = act.ClearScrollback 'ScrollbackOnly' },
|
||||||
|
{ key = 'l', mods = 'SHIFT|CTRL', action = act.ShowDebugOverlay },
|
||||||
|
{ key = 'm', mods = 'SHIFT|CTRL', action = act.Hide },
|
||||||
|
{ key = 'm', mods = 'SUPER', action = act.Hide },
|
||||||
|
{ key = 'n', mods = 'SHIFT|CTRL', action = act.SpawnWindow },
|
||||||
|
{ key = 'n', mods = 'SUPER', action = act.SpawnWindow },
|
||||||
|
{ key = 'p', mods = 'SHIFT|CTRL', action = act.PaneSelect{ alphabet = '', mode = 'Activate' } },
|
||||||
|
{ key = 'r', mods = 'SHIFT|CTRL', action = act.ReloadConfiguration },
|
||||||
|
{ key = 'r', mods = 'SUPER', action = act.ReloadConfiguration },
|
||||||
|
{ key = 't', mods = 'SHIFT|CTRL', action = act.SpawnTab 'CurrentPaneDomain' },
|
||||||
|
{ key = 't', mods = 'SUPER', action = act.SpawnTab 'CurrentPaneDomain' },
|
||||||
|
{ key = 'u', mods = 'SHIFT|CTRL', action = act.CharSelect{ copy_on_select = true, copy_to = 'ClipboardAndPrimarySelection' } },
|
||||||
|
{ key = 'v', mods = 'SHIFT|CTRL', action = act.PasteFrom 'Clipboard' },
|
||||||
|
{ key = 'v', mods = 'SUPER', action = act.PasteFrom 'Clipboard' },
|
||||||
|
{ key = 'w', mods = 'SHIFT|CTRL', action = act.CloseCurrentTab{ confirm = true } },
|
||||||
|
{ key = 'w', mods = 'SUPER', action = act.CloseCurrentTab{ confirm = true } },
|
||||||
|
{ key = 'x', mods = 'SHIFT|CTRL', action = act.ActivateCopyMode },
|
||||||
|
{ key = 'z', mods = 'SHIFT|CTRL', action = act.TogglePaneZoomState },
|
||||||
|
{ key = '{', mods = 'SUPER', action = act.ActivateTabRelative(-1) },
|
||||||
|
{ key = '{', mods = 'SHIFT|SUPER', action = act.ActivateTabRelative(-1) },
|
||||||
|
{ key = '}', mods = 'SUPER', action = act.ActivateTabRelative(1) },
|
||||||
|
{ key = '}', mods = 'SHIFT|SUPER', action = act.ActivateTabRelative(1) },
|
||||||
|
{ key = 'phys:Space', mods = 'SHIFT|CTRL', action = act.QuickSelect },
|
||||||
|
{ key = 'PageUp', mods = 'SHIFT', action = act.ScrollByPage(-1) },
|
||||||
|
{ key = 'PageUp', mods = 'CTRL', action = act.ActivateTabRelative(-1) },
|
||||||
|
{ key = 'PageUp', mods = 'SHIFT|CTRL', action = act.MoveTabRelative(-1) },
|
||||||
|
{ key = 'PageDown', mods = 'SHIFT', action = act.ScrollByPage(1) },
|
||||||
|
{ key = 'PageDown', mods = 'CTRL', action = act.ActivateTabRelative(1) },
|
||||||
|
{ key = 'PageDown', mods = 'SHIFT|CTRL', action = act.MoveTabRelative(1) },
|
||||||
|
{ key = 'LeftArrow', mods = 'SHIFT|CTRL', action = act.ActivatePaneDirection 'Left' },
|
||||||
|
{ key = 'LeftArrow', mods = 'SHIFT|ALT|CTRL', action = act.AdjustPaneSize{ 'Left', 1 } },
|
||||||
|
{ key = 'RightArrow', mods = 'SHIFT|CTRL', action = act.ActivatePaneDirection 'Right' },
|
||||||
|
{ key = 'RightArrow', mods = 'SHIFT|ALT|CTRL', action = act.AdjustPaneSize{ 'Right', 1 } },
|
||||||
|
{ key = 'UpArrow', mods = 'SHIFT|CTRL', action = act.ActivatePaneDirection 'Up' },
|
||||||
|
{ key = 'UpArrow', mods = 'SHIFT|ALT|CTRL', action = act.AdjustPaneSize{ 'Up', 1 } },
|
||||||
|
{ key = 'DownArrow', mods = 'SHIFT|CTRL', action = act.ActivatePaneDirection 'Down' },
|
||||||
|
{ key = 'DownArrow', mods = 'SHIFT|ALT|CTRL', action = act.AdjustPaneSize{ 'Down', 1 } },
|
||||||
|
{ key = 'Insert', mods = 'SHIFT', action = act.PasteFrom 'PrimarySelection' },
|
||||||
|
{ key = 'Insert', mods = 'CTRL', action = act.CopyTo 'PrimarySelection' },
|
||||||
|
{ key = 'Copy', mods = 'NONE', action = act.CopyTo 'Clipboard' },
|
||||||
|
{ key = 'Paste', mods = 'NONE', action = act.PasteFrom 'Clipboard' },
|
||||||
|
}
|
||||||
|
|
||||||
|
local key_tables = {
|
||||||
|
copy_mode = {
|
||||||
|
{ key = 'Tab', mods = 'NONE', action = act.CopyMode 'MoveForwardWord' },
|
||||||
|
{ key = 'Tab', mods = 'SHIFT', action = act.CopyMode 'MoveBackwardWord' },
|
||||||
|
{ key = 'Enter', mods = 'NONE', action = act.CopyMode 'MoveToStartOfNextLine' },
|
||||||
|
{ key = 'Escape', mods = 'NONE', action = act.CopyMode 'Close' },
|
||||||
|
{ key = 'Space', mods = 'NONE', action = act.CopyMode{ SetSelectionMode = 'Cell' } },
|
||||||
|
{ key = '$', mods = 'NONE', action = act.CopyMode 'MoveToEndOfLineContent' },
|
||||||
|
{ key = '$', mods = 'SHIFT', action = act.CopyMode 'MoveToEndOfLineContent' },
|
||||||
|
{ key = ',', mods = 'NONE', action = act.CopyMode 'JumpReverse' },
|
||||||
|
{ key = '0', mods = 'NONE', action = act.CopyMode 'MoveToStartOfLine' },
|
||||||
|
{ key = ';', mods = 'NONE', action = act.CopyMode 'JumpAgain' },
|
||||||
|
{ key = 'F', mods = 'NONE', action = act.CopyMode{ JumpBackward = { prev_char = false } } },
|
||||||
|
{ key = 'F', mods = 'SHIFT', action = act.CopyMode{ JumpBackward = { prev_char = false } } },
|
||||||
|
{ key = 'G', mods = 'NONE', action = act.CopyMode 'MoveToScrollbackBottom' },
|
||||||
|
{ key = 'G', mods = 'SHIFT', action = act.CopyMode 'MoveToScrollbackBottom' },
|
||||||
|
{ key = 'H', mods = 'NONE', action = act.CopyMode 'MoveToViewportTop' },
|
||||||
|
{ key = 'H', mods = 'SHIFT', action = act.CopyMode 'MoveToViewportTop' },
|
||||||
|
{ key = 'L', mods = 'NONE', action = act.CopyMode 'MoveToViewportBottom' },
|
||||||
|
{ key = 'L', mods = 'SHIFT', action = act.CopyMode 'MoveToViewportBottom' },
|
||||||
|
{ key = 'M', mods = 'NONE', action = act.CopyMode 'MoveToViewportMiddle' },
|
||||||
|
{ key = 'M', mods = 'SHIFT', action = act.CopyMode 'MoveToViewportMiddle' },
|
||||||
|
{ key = 'O', mods = 'NONE', action = act.CopyMode 'MoveToSelectionOtherEndHoriz' },
|
||||||
|
{ key = 'O', mods = 'SHIFT', action = act.CopyMode 'MoveToSelectionOtherEndHoriz' },
|
||||||
|
{ key = 'T', mods = 'NONE', action = act.CopyMode{ JumpBackward = { prev_char = true } } },
|
||||||
|
{ key = 'T', mods = 'SHIFT', action = act.CopyMode{ JumpBackward = { prev_char = true } } },
|
||||||
|
{ key = 'V', mods = 'NONE', action = act.CopyMode{ SetSelectionMode = 'Line' } },
|
||||||
|
{ key = 'V', mods = 'SHIFT', action = act.CopyMode{ SetSelectionMode = 'Line' } },
|
||||||
|
{ key = '^', mods = 'NONE', action = act.CopyMode 'MoveToStartOfLineContent' },
|
||||||
|
{ key = '^', mods = 'SHIFT', action = act.CopyMode 'MoveToStartOfLineContent' },
|
||||||
|
{ key = 'b', mods = 'NONE', action = act.CopyMode 'MoveBackwardWord' },
|
||||||
|
{ key = 'b', mods = 'ALT', action = act.CopyMode 'MoveBackwardWord' },
|
||||||
|
{ key = 'b', mods = 'CTRL', action = act.CopyMode 'PageUp' },
|
||||||
|
{ key = 'c', mods = 'CTRL', action = act.CopyMode 'Close' },
|
||||||
|
{ key = 'f', mods = 'NONE', action = act.CopyMode{ JumpForward = { prev_char = false } } },
|
||||||
|
{ key = 'f', mods = 'ALT', action = act.CopyMode 'MoveForwardWord' },
|
||||||
|
{ key = 'f', mods = 'CTRL', action = act.CopyMode 'PageDown' },
|
||||||
|
{ key = 'g', mods = 'NONE', action = act.CopyMode 'MoveToScrollbackTop' },
|
||||||
|
{ key = 'g', mods = 'CTRL', action = act.CopyMode 'Close' },
|
||||||
|
{ key = 'h', mods = 'NONE', action = act.CopyMode 'MoveLeft' },
|
||||||
|
{ key = 'j', mods = 'NONE', action = act.CopyMode 'MoveDown' },
|
||||||
|
{ key = 'k', mods = 'NONE', action = act.CopyMode 'MoveUp' },
|
||||||
|
{ key = 'l', mods = 'NONE', action = act.CopyMode 'MoveRight' },
|
||||||
|
{ key = 'm', mods = 'ALT', action = act.CopyMode 'MoveToStartOfLineContent' },
|
||||||
|
{ key = 'o', mods = 'NONE', action = act.CopyMode 'MoveToSelectionOtherEnd' },
|
||||||
|
{ key = 'q', mods = 'NONE', action = act.CopyMode 'Close' },
|
||||||
|
{ key = 't', mods = 'NONE', action = act.CopyMode{ JumpForward = { prev_char = true } } },
|
||||||
|
{ key = 'v', mods = 'NONE', action = act.CopyMode{ SetSelectionMode = 'Cell' } },
|
||||||
|
{ key = 'v', mods = 'CTRL', action = act.CopyMode{ SetSelectionMode = 'Block' } },
|
||||||
|
{ key = 'w', mods = 'NONE', action = act.CopyMode 'MoveForwardWord' },
|
||||||
|
{ key = 'y', mods = 'NONE', action = act.Multiple{ { CopyTo = 'ClipboardAndPrimarySelection' }, { CopyMode = 'Close' } } },
|
||||||
|
{ key = 'PageUp', mods = 'NONE', action = act.CopyMode 'PageUp' },
|
||||||
|
{ key = 'PageDown', mods = 'NONE', action = act.CopyMode 'PageDown' },
|
||||||
|
{ key = 'LeftArrow', mods = 'NONE', action = act.CopyMode 'MoveLeft' },
|
||||||
|
{ key = 'LeftArrow', mods = 'ALT', action = act.CopyMode 'MoveBackwardWord' },
|
||||||
|
{ key = 'RightArrow', mods = 'NONE', action = act.CopyMode 'MoveRight' },
|
||||||
|
{ key = 'RightArrow', mods = 'ALT', action = act.CopyMode 'MoveForwardWord' },
|
||||||
|
{ key = 'UpArrow', mods = 'NONE', action = act.CopyMode 'MoveUp' },
|
||||||
|
{ key = 'DownArrow', mods = 'NONE', action = act.CopyMode 'MoveDown' },
|
||||||
|
},
|
||||||
|
|
||||||
|
search_mode = {
|
||||||
|
{ key = 'Enter', mods = 'NONE', action = act.CopyMode 'PriorMatch' },
|
||||||
|
{ key = 'Escape', mods = 'NONE', action = act.CopyMode 'Close' },
|
||||||
|
{ key = 'n', mods = 'CTRL', action = act.CopyMode 'NextMatch' },
|
||||||
|
{ key = 'p', mods = 'CTRL', action = act.CopyMode 'PriorMatch' },
|
||||||
|
{ key = 'r', mods = 'CTRL', action = act.CopyMode 'CycleMatchType' },
|
||||||
|
{ key = 'u', mods = 'CTRL', action = act.CopyMode 'ClearPattern' },
|
||||||
|
{ key = 'PageUp', mods = 'NONE', action = act.CopyMode 'PriorMatchPage' },
|
||||||
|
{ key = 'PageDown', mods = 'NONE', action = act.CopyMode 'NextMatchPage' },
|
||||||
|
{ key = 'UpArrow', mods = 'NONE', action = act.CopyMode 'PriorMatch' },
|
||||||
|
{ key = 'DownArrow', mods = 'NONE', action = act.CopyMode 'NextMatch' },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
font_size = 14,
|
font_size = 14,
|
||||||
disable_default_key_bindings = true,
|
disable_default_key_bindings = true,
|
||||||
window_background_opacity = 0.95,
|
window_background_opacity = 0.95,
|
||||||
color_scheme = "nightfox",
|
color_scheme = "nightfox",
|
||||||
hide_tab_bar_if_only_one_tab = true,
|
hide_tab_bar_if_only_one_tab = true,
|
||||||
|
use_dead_keys = false,
|
||||||
|
keys = keys,
|
||||||
|
key_tables = key_tables,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
command -v pyenv && {
|
command -v pyenv > /dev/null && {
|
||||||
export PYENV_ROOT="$HOME/.pyenv"
|
export PYENV_ROOT="$HOME/.pyenv"
|
||||||
echo $PATH | grep -i pyenv > /dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
|
echo $PATH | grep -i pyenv > /dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
|
||||||
eval "$(pyenv init --path)"
|
eval "$(pyenv init --path)"
|
||||||
|
|
Loading…
Reference in a new issue