Итак, что я сейчас хочу сделать, так это реализовать rofi в awesome.
Причина, по которой я хочу это сделать, а не просто использовать rofi, заключается в том, что я хочу научиться «автогенерировать» виджеты в awesome. Это пригодится позже, когда я буду реализовывать такие вещи, как сетевые виджеты, которые при нажатии показывают вам панель, показывают вам точки доступа Wi-Fi, доступные в виде строк, и т. д. и т. д. Так что это просто для меня, чтобы узнать, как awesome работает лучше. Но также, я хочу программу запуска.
А еще, прежде чем кто-то предложит это, я уже знаю, что в awesome есть встроенный лаунчер, и я также знаю, что есть это. Это не то, что я ищу. Я хочу, чтобы у rofi и dmenu было то же самое: я хочу, чтобы предложения всплывали при нажатии клавиш. и я хочу иметь возможность нажимать на предложения и т. д. Я хочу что-то вроде этого: uhhhh< /а>
Итак, у меня проблемы: как мне автоматически генерировать строки? Я хочу иметь возможность указать только в одном месте, сколько строк мне нужно, а awesome сделает все остальное.
Я просмотрел гитхаб Эльва и нашел radical
, и хотя то, что он сделал, представляет собой систему меню, я подумал, что могу использовать часть его кода, чтобы делать то, что хочу. Но я не могу, ради бога, понять, как это работает. Не обижайтесь на него, но это не слишком хорошо документировано, даже для пользователей, и для фактического объяснения того, как работает код, документации нет.
Итак, мой вопрос: как я могу заставить это работать? Как мне сделать виджеты, которые автоматически действуют как строки?
TL;DR:
- Я хочу написать программу запуска, такую как rofi, в awesome
- я хочу иметь возможность указать только в одном месте количество строк
- поэтому, ((( я думаю))) мне нужно как-то автоматически генерировать виджеты как строки, как я могу это сделать?
РЕДАКТИРОВАТЬ:
Я хочу иметь возможность автоматически создавать строки моей программы запуска. Я знаю, что могу сам жестко закодировать строки, чтобы каждая строка имела свой идентификатор, а затем я могу написать функцию, которая при каждом нажатии клавиши будет обновлять каждый виджет наиболее релевантными совпадениями. Так что это будет что-то вроде (вообще не тестировалось):
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?
},
},
})
Если это недостаточно ясно, сообщите мне, что вы не понимаете, и я обновлю свой вопрос.
wibox.widget.textbox()
в нужном месте...? - person Uli Schlachter   schedule 05.04.2019