launcher: better empty text

This commit is contained in:
2 * r + 2 * t 2025-01-14 18:29:55 +11:00
parent b5648cf986
commit 9c8d9aa975
2 changed files with 24 additions and 3 deletions

View file

@ -1,4 +1,4 @@
import { bind, execAsync, Gio, register, timeout, Variable } from "astal";
import { bind, execAsync, Gio, GLib, register, timeout, Variable } from "astal";
import { Astal, Gtk, Widget } from "astal/gtk3";
import fuzzysort from "fuzzysort";
import type AstalApps from "gi://AstalApps";
@ -45,6 +45,17 @@ const getIconFromMode = (mode: Mode) => {
}
};
const getEmptyTextFromMode = (mode: Mode) => {
switch (mode) {
case "apps":
return "No apps found";
case "files":
return GLib.find_program_in_path("fd") === null ? "File search requires `fd`" : "No files found";
case "math":
return "Type an expression";
}
};
const launchAndClose = (self: JSX.Element, astalApp: AstalApps.Application) => {
const toplevel = self.get_toplevel();
if (toplevel instanceof Widget.Window) toplevel.hide();
@ -196,8 +207,12 @@ const Results = ({ entry, mode }: { entry: Widget.Entry; mode: Variable<Mode> })
shown={bind(empty).as(t => (t ? "empty" : "list"))}
>
<box name="empty" className="empty" halign={Gtk.Align.CENTER} valign={Gtk.Align.CENTER}>
<label className="icon" label="apps_outage" />
<label label="No results" />
<label className="icon" label="bug_report" />
<label
label={bind(entry, "text").as(t =>
t.startsWith(">") ? "No matching subcommands" : getEmptyTextFromMode(mode.get())
)}
/>
</box>
<box
vertical

View file

@ -81,8 +81,14 @@
.empty {
color: scheme.$subtext0;
font-size: lib.s(18);
padding: lib.s(10) 0;
@include lib.spacing;
.icon {
color: scheme.$subtext0;
}
}
.result {