Итак, что я сейчас хочу сделать, это в значительной степени реализовать Rofi в Awesome.
Причина, по которой я хочу это сделать, а не просто использую rofi, заключается в том, что я хочу научиться «автоматически генерировать» виджеты в удивительном виде.
Это пригодится позже, когда я буду реализовывать такие вещи, как сетевые виджеты, которые при нажатии будут отображать панель, отображать точки доступа Wi-Fi, доступные в виде строк и т. Д., И т. Д. Так что я просто хочу узнать, как работает классно. Но я также хочу запускать программу.
И еще, прежде чем кто-то предложит это, я уже знаю, что есть встроенный лаунчер в awesome, и я также знаю, что есть это . Это не то, что я ищу. Я хочу, чтобы у rofi и dmenu было то же самое: я хочу, чтобы при нажатии клавиш появлялись предложения. и я хочу иметь возможность нажимать на предложения и т. д
То, что я хочу, это что-то вроде этого: ухххх
Итак, у меня проблемы: как мне автоматически сгенерировать строки? Я хочу иметь возможность указывать только в одном месте, сколько строк я хочу, и я должен сделать все остальное.
Я просмотрел элитный гитхуб и нашел radical
, и хотя он создал систему меню, я подумал, что могу использовать часть его кода, чтобы делать то, что я хочу. Но я не могу из любви к Богу понять, как это работает. Не обижайтесь на него, но он не слишком хорошо документирован, даже для пользователей, и для реального объяснения того, как работает код, нет документации.
Итак, мой вопрос: как я могу заставить эту работу? Как мне сделать так, чтобы виджеты автоматически выступали в роли строк?
TL; DR:
- Я хочу написать программный лаунчер, например, Rofi, в Awesome
- я хочу иметь возможность указывать только в одном месте количество строк
- поэтому (((я думаю))) Мне нужно как-то автоматически генерировать виджеты в виде строк, как я могу это сделать?
EDIT:
Я хочу, чтобы я мог автоматически создавать строки моего модуля запуска. Я знаю, что могу сам жестко закодировать строки, чтобы у каждой строки был свой идентификатор, а затем я мог бы написать функцию, которая при каждом нажатии клавиши будет обновлять каждый виджет с наиболее подходящими соответствиями. Так что это было бы что-то вроде (не проверено вообще):
local wibox = require("wibox")
local awful = require("awful")
local num_rows = 10
local row_height = 40
-- set the height of the background in accordance to how many rows there are,
-- and how high each row should be
local prompt_height = row_height * num_rows
local prompt_width = 300
-- make a widget in the middle of the screen
local background = wibox({
x = awful.screen.focused().geometry.width / 2 - prompt_width / 2,
y = awful.screen.focused().geometry.height / 2 - prompt_height / 2,
width = prompt_width,
height = prompt_height,
bg = "#111111",
visible = false,
ontop = false
})
local rofi_launcher = wibox.widget({
widget = background,
{
-- get a flexible layout so the searchbox and the suggestion boxes get
-- scaled to take up all the space of the background
layout = wibox.layout.flex.vertical,
{ -- the prompt you actually type in
-- set id here so we can adjust its ratio later, so the magnifying
-- glass will end up on the right, and the texbox will take up the left side
id = "searchbox_and_mangifying_glass",
layout = wibox.layout.ratio.horizontal,
{
-- set id so we can use it as a prompt later
id = "searchbox",
widget = wibox.widget.textbox,
},
{
widget = wibox.widget.imagebox,
icon = '~/path/to/magnifying_glass_icon.svg',
},
},
{ -- this is where I actually create the rows that will display suggestions
{ -- row number 1
-- make a background for the textbox to sit in, so you can change
-- background color later for the selected widget, etc etc.
widget = wibox.widget.background,
{
-- give it an id so we can change what's displayed in the
-- textbox when we press keys in the prompt
id = "suggestion_1",
widget = wibox.widget.textbox,
},
},
{ -- row number 2
-- background, again
widget = wibox.widget.background,
{
-- id and textbox again
id = "suggestion_2",
widget = wibox.widget.textbox,
},
},
-- and another 8 (according to the `num_rows` variable) of the same two
-- textboxes above. This is exactly my problem. How can I make these
-- textboxes automatically and still be able to interact with them to
-- display suggestions on the fly, as the user types keys into the prompt?
},
},
})
Если это не совсем понятно, пожалуйста, дайте мне знать, что вы не понимаете, и я обновлю свой вопрос.