mirror of
https://codeberg.org/dwl/dwl.git
synced 2025-10-29 19:14:15 +00:00
wip
This commit is contained in:
parent
11f5f44ae6
commit
d0a925a12a
@ -7,7 +7,7 @@ PREFIX = /usr/local
|
|||||||
# Uncomment to build XWayland support
|
# Uncomment to build XWayland support
|
||||||
CFLAGS += -DXWAYLAND
|
CFLAGS += -DXWAYLAND
|
||||||
|
|
||||||
JL_BIN = ./julia/julia
|
JL_BIN = julia-latest #~/Documents/Julia/julia/julia #./julia/julia
|
||||||
JL_SHARE = $(shell $(JL_BIN) -e 'print(joinpath(Sys.BINDIR, Base.DATAROOTDIR, "julia"))')
|
JL_SHARE = $(shell $(JL_BIN) -e 'print(joinpath(Sys.BINDIR, Base.DATAROOTDIR, "julia"))')
|
||||||
CFLAGS += $(shell $(JL_BIN) $(JL_SHARE)/julia-config.jl --cflags)
|
CFLAGS += $(shell $(JL_BIN) $(JL_SHARE)/julia-config.jl --cflags)
|
||||||
CXXFLAGS += $(shell $(JL_BIN) $(JL_SHARE)/julia-config.jl --cflags)
|
CXXFLAGS += $(shell $(JL_BIN) $(JL_SHARE)/julia-config.jl --cflags)
|
||||||
|
|||||||
117
dwl.jl
117
dwl.jl
@ -1,14 +1,10 @@
|
|||||||
module DWL
|
module DWL
|
||||||
|
Base.Experimental.@compiler_options compile=min optimize=0 infer=false
|
||||||
|
|
||||||
const xkb_keysym_t = UInt32
|
const xkb_keysym_t = UInt32
|
||||||
#struct xkb_keysym_t
|
|
||||||
# x::UInt32
|
|
||||||
#end
|
|
||||||
|
|
||||||
struct Arg
|
struct Arg
|
||||||
x::UInt
|
x::UInt
|
||||||
end
|
end
|
||||||
|
|
||||||
struct Key
|
struct Key
|
||||||
mod::UInt32
|
mod::UInt32
|
||||||
keysym::xkb_keysym_t
|
keysym::xkb_keysym_t
|
||||||
@ -27,49 +23,106 @@ const WLR_MODIFIER_MOD3 = xkb_keysym_t(1 << 5)
|
|||||||
const WLR_MODIFIER_LOGO = xkb_keysym_t(1 << 6)
|
const WLR_MODIFIER_LOGO = xkb_keysym_t(1 << 6)
|
||||||
const WLR_MODIFIER_MOD5 = xkb_keysym_t(1 << 7)
|
const WLR_MODIFIER_MOD5 = xkb_keysym_t(1 << 7)
|
||||||
|
|
||||||
|
macro dwl_function(jl_name, c_name, argtype)
|
||||||
|
return esc(quote
|
||||||
|
struct $jl_name
|
||||||
|
x::Ref{$argtype}
|
||||||
|
$jl_name(x) = new(Ref{$argtype}(x))
|
||||||
|
end
|
||||||
|
(f::$jl_name)() = @ccall $c_name(f.x::Ref{$argtype})::Cvoid
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
macro dwl_function(name)
|
||||||
|
return esc(quote
|
||||||
|
$name() = @ccall $name(C_NULL::Ptr{Cvoid})::Cvoid
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
macro MOD(key)
|
||||||
|
return :(MODKEY, $(keysym(key)))
|
||||||
|
end
|
||||||
|
macro MOD_SHIFT(key)
|
||||||
|
return :(MODKEY | WLR_MODIFIER_SHIFT, $(keysym(key)))
|
||||||
|
end
|
||||||
|
macro MOD_CTRL(key)
|
||||||
|
return :(MODKEY | WLR_MODIFIER_CTRL, $(keysym(key)))
|
||||||
|
end
|
||||||
|
macro MOD_CTRL_SHIFT(key)
|
||||||
|
return :(MODKEY | WLR_MODIFIER_CTRL | WLR_MODIFIER_SHIFT, $(keysym(key)))
|
||||||
|
end
|
||||||
|
macro TAG_KEYS(key, skey, tag)
|
||||||
|
return esc(:((
|
||||||
|
@MOD($key) => View(1 << $tag),
|
||||||
|
@MOD_CTRL($key) => ToggleView(1 << $tag),
|
||||||
|
@MOD_SHIFT($skey) => Tag(1 << $tag),
|
||||||
|
@MOD_CTRL_SHIFT($skey) => ToggleTag(1 << $tag),
|
||||||
|
)...))
|
||||||
|
end
|
||||||
|
|
||||||
const MODKEY = WLR_MODIFIER_ALT
|
const MODKEY = WLR_MODIFIER_ALT
|
||||||
|
|
||||||
#const keys = @show unsafe_wrap(Array, cglobal(:keys, Key), unsafe_load(cglobal(:KEYS_LEN, Cint)))
|
struct Spawn
|
||||||
|
cmd::Vector{String}
|
||||||
|
ptrs::Vector{Ptr{UInt8}}
|
||||||
|
|
||||||
function spawn(cmd::Vector{String})
|
function Spawn(cmd::Cmd)
|
||||||
cmd = Base.cconvert.(Cstring, cmd)
|
cmd = Base.cconvert.(Cstring, cmd.exec)
|
||||||
ptrs = push!(pointer.(cmd), C_NULL)
|
ptrs = push!(pointer.(cmd), C_NULL)
|
||||||
@ccall spawn(pointer(ptrs)::Ref{Ptr{Cstring}})::Cvoid
|
return new(cmd, ptrs)
|
||||||
GC.@preserve cmd ptrs
|
end
|
||||||
end
|
end
|
||||||
focusstack(x::Int) = @ccall focusstack(x::Ref{Cint})::Cvoid
|
function (s::Spawn)()
|
||||||
killclient() = @ccall killclient(C_NULL::Ptr{Cvoid})::Cvoid
|
@ccall spawn(s.ptrs::Vector{Ptr{UInt8}})::Cvoid
|
||||||
quit() = @ccall quit(C_NULL::Ptr{Cvoid})::Cvoid
|
GC.@preserve s
|
||||||
|
end
|
||||||
|
|
||||||
|
@dwl_function FocusStack focusstack Cint
|
||||||
|
@dwl_function IncNMaster incnmaster Cint
|
||||||
|
@dwl_function SetMFact setmfac Cfloat
|
||||||
|
@dwl_function View view Cuint
|
||||||
|
@dwl_function ToggleView toggleview Cuint
|
||||||
|
@dwl_function Tag tag Cuint
|
||||||
|
@dwl_function ToggleTag toggletag Cuint
|
||||||
|
@dwl_function zoom
|
||||||
|
@dwl_function killclient
|
||||||
|
@dwl_function togglefloating
|
||||||
|
@dwl_function togglefullscreen
|
||||||
|
@dwl_function quit
|
||||||
|
|
||||||
const keys = Dict{Tuple{UInt32, xkb_keysym_t}, Any}(
|
const keys = Dict{Tuple{UInt32, xkb_keysym_t}, Any}(
|
||||||
(MODKEY, keysym(:p)) => () -> spawn(["dmenu_run"]),
|
@MOD(p) => Spawn(`dmenu_run`),
|
||||||
(MODKEY | WLR_MODIFIER_SHIFT, keysym(:Return)) => () -> spawn(["alacritty"]),
|
@MOD_SHIFT(Return) => Spawn(`alacritty`),
|
||||||
(MODKEY, keysym(:j)) => () -> focusstack(+1),
|
@MOD(j) => FocusStack(+1),
|
||||||
(MODKEY, keysym(:k)) => () -> focusstack(-1),
|
@MOD(k) => FocusStack(-1),
|
||||||
(MODKEY | WLR_MODIFIER_SHIFT, keysym(:C)) => killclient,
|
@MOD(i) => IncNMaster(+1),
|
||||||
(MODKEY | WLR_MODIFIER_SHIFT, keysym(:Q)) => quit,
|
@MOD(d) => IncNMaster(-1),
|
||||||
|
@MOD(h) => SetMFact(+0.05),
|
||||||
|
@MOD(l) => SetMFact(-0.05),
|
||||||
|
@MOD(Return) => zoom,
|
||||||
|
@MOD(Tab) => View(0),
|
||||||
|
@MOD_SHIFT(C) => killclient,
|
||||||
|
@MOD_SHIFT(space) => togglefloating,
|
||||||
|
@MOD(e) => togglefullscreen,
|
||||||
|
@MOD_SHIFT(Q) => quit,
|
||||||
|
|
||||||
|
@TAG_KEYS(1, exclam, 0),
|
||||||
|
@TAG_KEYS(2, at, 1),
|
||||||
|
@TAG_KEYS(3, numbersign, 2),
|
||||||
|
@TAG_KEYS(4, dollar, 3),
|
||||||
|
@TAG_KEYS(5, percent, 4),
|
||||||
|
@TAG_KEYS(6, caret, 5),
|
||||||
|
@TAG_KEYS(7, ampersand, 6),
|
||||||
|
@TAG_KEYS(8, asterisk, 7),
|
||||||
|
@TAG_KEYS(9, parenleft, 8),
|
||||||
)
|
)
|
||||||
|
|
||||||
#const WLR_MODIFIER_CAPS = @show unsafe_load(cglobal(:_WLR_MODIFIER_CAPS, UInt32))
|
|
||||||
cleanmask(x) = x & ~WLR_MODIFIER_CAPS
|
cleanmask(x) = x & ~WLR_MODIFIER_CAPS
|
||||||
|
|
||||||
function keybinding(mods::UInt32, sym::xkb_keysym_t)::Cint
|
function keybinding(mods::UInt32, sym::xkb_keysym_t)::Cint
|
||||||
#function keybinding(ptr::Ptr{Cvoid})::Cint
|
|
||||||
# mods = unsafe_load(unsafe_load(Ptr{Ptr{UInt32}}(ptr)), 1)
|
|
||||||
# sym = unsafe_load(unsafe_load(Ptr{Ptr{xkb_keysym_t}}(ptr)), 2)
|
|
||||||
#@show mods sym
|
|
||||||
f = get(keys, (cleanmask(mods), sym), nothing)
|
f = get(keys, (cleanmask(mods), sym), nothing)
|
||||||
f === nothing && return false
|
f === nothing && return false
|
||||||
try Base.invokelatest(f) catch e; @show e end
|
try Base.invokelatest(f) catch e; @show e end
|
||||||
return true
|
return true
|
||||||
# handled = false
|
|
||||||
# for k in keys
|
|
||||||
# if cleanmask(mods) == cleanmask(k.mod) && sym == k.keysym && k.func != C_NULL
|
|
||||||
# ccall(k.func, Cvoid, (Ptr{Arg},), Ref(k.arg))
|
|
||||||
# handled = true
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
# return @show handled
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user