generated from nvim-lua/nvim-lua-plugin-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnvim-adapt.lua
168 lines (143 loc) · 5.13 KB
/
nvim-adapt.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
local M = {}
local loop = vim.loop
Working = true
Process_pid = 0
M.init = function()
GetDesktopValue()
end
GetDesktopValue = function()
-- Create a message for the method call we want to make.
local ldbus = require "ldbus"
local conn = assert ( ldbus.bus.get ( "session" ) )
assert ( ldbus.bus.request_name ( conn , "org.freedesktop.portal.Settings" , { replace_existing = true } ) )
local clock = os.clock
local function sleep(s)
local ntime = os.time() + s
repeat until os.time() > ntime
end
local msg = assert ( ldbus.message.new_method_call (
"org.freedesktop.portal.Desktop",
"/org/freedesktop/portal/desktop",
"org.freedesktop.portal.Settings" ,
"Read" ) , "Message Null" )
local iter = ldbus.message.iter.new ( )
msg:iter_init_append ( iter )
-- assert ( iter:append_basic ( {"org.freedesktop.appearance", "color-scheme"} ) , "Out of Memory" )
iter:append_basic("org.freedesktop.appearance")
iter:append_basic("color-scheme")
local reply = assert ( conn:send_with_reply_and_block ( msg ) )
-- here we have gotten the response from dbus.
-- the message is of type v (value) and idk what to do with it.
-- *fuck.*
assert ( reply:iter_init ( iter ) , "Message has no arguments" )
local subiter = ldbus.message.iter.new ( )
assert(iter:recurse(subiter), "No recursable")
local sub_sub_iter = ldbus.message.iter.new ( )
assert(subiter:recurse(sub_sub_iter), "sub-iter not recursable")
local theme_value = sub_sub_iter:get_basic()
if theme_value == 0 then
vim.o.background = "light"
elseif theme_value == 1 then
vim.o.background = "dark"
else
sleep(1)
end
end
M.ctx = loop.new_thread(function(v)
-- Create a message for the method call we want to make.
local ldbus = require "ldbus"
local conn = assert ( ldbus.bus.get ( "session" ) )
assert ( ldbus.bus.request_name ( conn , "org.freedesktop.portal.Settings" , { replace_existing = true } ) )
local msg = assert ( ldbus.message.new_method_call (
"org.freedesktop.portal.Desktop",
"/org/freedesktop/portal/desktop",
"org.freedesktop.portal.Settings" ,
"Read" ) , "Message Null" )
local iter = ldbus.message.iter.new ( )
msg:iter_init_append ( iter )
-- assert ( iter:append_basic ( {"org.freedesktop.appearance", "color-scheme"} ) , "Out of Memory" )
iter:append_basic("org.freedesktop.appearance")
iter:append_basic("color-scheme")
local reply = assert ( conn:send_with_reply_and_block ( msg ) )
-- here we have gotten the response from dbus.
-- the message is of type v (value) and idk what to do with it.
-- *fuck.*
assert ( reply:iter_init ( iter ) , "Message has no arguments" )
local subiter = ldbus.message.iter.new ( )
assert(iter:recurse(subiter), "No recursable")
local sub_sub_iter = ldbus.message.iter.new ( )
assert(subiter:recurse(sub_sub_iter), "sub-iter not recursable")
local theme_value = sub_sub_iter:get_basic()
if theme_value == 0 then
return 0
elseif theme_value == 1 then
return 1
end
-- local ldbus = require "ldbus"
-- local conn = assert ( ldbus.bus.get ( "session" ) )
-- local clock = os.clock
-- local function sleep(s)
-- local ntime = os.time() + s
-- repeat until os.time() > ntime
-- end
-- -- I don't know why, but this assertion causes restarting the work thread to error saying
-- -- it isn't the primary owner...not sure of the damages of disabling it as I don't understand it.
-- assert ( ldbus.bus.request_name ( conn , "org.freedesktop.portal.Settings" , { replace_existing = true } ) )
-- assert ( ldbus.bus.add_match ( conn , "type='signal',interface='org.freedesktop.portal.Settings'" ) )
-- conn:flush ( )
-- while conn:read_write ( 0 ) do
-- local msg = conn:pop_message ( )
-- if not msg then
-- sleep(0.2)
-- elseif msg:get_type ( ) == "signal" then
-- local iter = ldbus.message.iter.new ( )
-- assert ( msg:iter_init ( iter ) , "Message has no parameters" )
-- assert ( iter:get_arg_type ( ) == ldbus.types.string , "Argument is not a string" )
-- local val = iter:get_basic()
-- if iter:next() then
-- local secondVal = iter:get_basic()
-- end
-- if iter:next() then
-- local subiter = ldbus.message.iter.new ( )
-- iter:recurse(subiter)
-- local theme_value = subiter:get_basic()
-- if(theme_value == 0) then
-- print("Light Mode Selected.")
-- return 0
-- elseif(theme_value == 1) then
-- print("Dark Mode Selected")
-- return 1
-- end
-- end
-- end
-- end
end, -- Using vim.schedule_wrap as per the docs:
-- https://neovim.io/doc/user/lua.html
vim.schedule_wrap(function(v)
if v == 1 then
vim.o.background = "dark"
elseif v == 0 then
vim.o.background = "light"
else
print"error"
end
-- restart the work queue to wait for the next signal
local handle = loop.queue_work(M.ctx)
end))
M.start_listen = function()
-- queue the first listener instance. More instances will be made in the callback
-- function of the worker thread
loop.queue_work(M.ctx)
loop.run('default')
Process_pid = vim.loop.os_getpid()
end
M.init()
-- M.start_listen()
-- vim.api.nvim_create_autocmd("VimLeavePre", {
-- callback = function()
-- Working = false
-- print("closing")
-- -- vim.loop.close(Process_pid)
-- os.exit()
-- end
-- })