aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2026-04-01 11:07:14 -0700
committerGravatar Tom Willemse2026-04-01 11:07:14 -0700
commit4987842abfc18b67633279d25ed3891b87a163dd (patch)
tree6e1ca011a1260c0696edc20c097c7d7e62d5cfd1
parent494e9717a3fde9a3419767779e8c0ba1d4c3b0a3 (diff)
downloadnew-dotfiles-4987842abfc18b67633279d25ed3891b87a163dd.tar.gz
new-dotfiles-4987842abfc18b67633279d25ed3891b87a163dd.zip
glide: Move sitesearch function to own file
-rw-r--r--glide/.config/glide/glide.ts149
-rw-r--r--glide/.config/glide/sitesearch.glide.ts147
2 files changed, 148 insertions, 148 deletions
diff --git a/glide/.config/glide/glide.ts b/glide/.config/glide/glide.ts
index 62c00cc..42812fc 100644
--- a/glide/.config/glide/glide.ts
+++ b/glide/.config/glide/glide.ts
@@ -269,154 +269,6 @@ glide.keymaps.set("normal", "gh", async () => {
});
}, { description: "Jump to heading in current page" });
-// From https://github.com/glide-browser/glide/discussions/147#discussioncomment-15337351
-
-/**
- * custom search providers
- */
-const search_info: Record<string, { url: string, sep: string }> = {
- 'youtube': {
- url: "https://www.youtube.com/results?search_query=", sep: "+"
- }
-} as const
-
-/*
- * pick tabs via a selection of bookmarks and history
- */
-glide.keymaps.set("normal", "<leader>t", async () => {
-
- //let combined: Array<Browser.Bookmarks.BookmarkTreeNode | Browser.History.HistoryItem> = []
- let combined = []
- const tabs = await browser.tabs.query({});
- tabs.forEach(entry => combined.push({
- title: entry.title ?? 'Unnamed Tab',
- url: entry.url,
- type: 'T',
- favIconUrl: entry.favIconUrl
- }));
-
- const bookmarks = await browser.bookmarks.search({});
- bookmarks
- .filter(bmark => bmark.type !== 'folder')
- .forEach(bmark => combined.push({ title: bmark.title, url: bmark.url, type: 'B', favIconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAE/ElEQVR4Xu2cW2wUVRjHvzPdXdou0gvUemniegnRQtquimBNa4kpJfrCJrQ+Gewjb5oQfJPLG8akjzxawpMtyeKDpuBDkWqEBNMFEcUINEQTTEVrwbZ7mTmeb9xZ5j6zZXbd7X4n2YdOz3xz5rf//3fOmZ1zGPgsyelvY7m0vIcz/jpw3iNOi/k8teKqMQYLHNg5YNJnI7teG3drIPNq/cTZb95lirKPAx/wqlul/5+TGLy/d6j/tF37HQEJMD0CzNgaBmPmMT6yu3/UfNAWkKoaLo9xDs1VqorVNtsCyQII4YAif+J0hXAoBO2bWqCxfh20Nm8wVNto+nu1rSzleXcXFuHXO/Pqx64IuyX0djMAOnXm/B6FQ9KpgZtjHRDreBzCobpS3kNZYi/eX4JLV6/D8krafL05YbWntYMFQMnp2eZc5t4tJ1v1vdwFG9Y3lqXx5bpINifDzKUrVkhS3ajWuxUATU59/R4HZcyucR2PtUH388+Wq91lvQ4qCSEZCmOnR4b6EnisAGjizMxsfnxjaeDAti5oa20qScNvdg8GGveZy19a4nFxRJYVyIoPFxYxl8s/3TDkJBwnDQ/1txgBTZ23npmPVO2ANCB4g+lMDhQTJEzcF1LXDNxEHlLF80BBLoBiT7bDtq2bA/2mtWDlUJC+4QhpRUAyK+nzcxdWDwjP3PLcU9DW0hS41coNCO8lJ6yWEQlaXx4aUEnkI4K+dPBooKG/++hDQzzMnbEn2gFdoLfacjpLgPQEmh+JQm+8E6IN9erhJQJkFSbOAgZ74yokAuRgXFTSYO+LpQe0vWdLILkjt+vtQOJoQUJnP4W//r4Hd+bvwuL9f2xjY4/86KbW0uagSgak3fn8nwtw8/ZvFkiYuF/peoEAIQEnSG8N7CBAGoEff5mz2I0A6fSBOennW7cNiiFApsxzMfUDAUIC2IvZFQKUp0KAPEZNBIgAPdzAmhRECiIFGQiUYrJK3byLyCgHUQ6iHEQ5qBgNUJL2oEWACFAxhrLWJQWRgkhBtgSq4WcffcPpiSI9UfRnZZqL0VzMn1KcapGCSEFWAlLiTfWgkvzCU141pyDW3gZ1x4+pYOT9HwD/3X4JgUau5gDVfXwIWFenev/8yjWQDxxxVVFNAUJrSfv3GYAox0+4Wq1mABWstT5qVIx4a8zNajUDSG8ts6fcrFYTgOysZYbkZLU1D8jRWmZCDlZb84DcrOXHakEAYmJF9PDuvp14PV+LWez61aAedygnT4FyclK9hPTOsPjs9RwM6iv4Pb+oxx12C+omXFb7lBKQGlt7n9ncYxWFyr2yb0CMpcRiurgW7X9XUIAMXEP5AYQL6UKRcDyx89U5AmR+T/qri6lwJJTQw6mIHFQpCorWR2z3ECCL5b8hAuTxnjQBcgGE457G+rA67jEXshiOvyRptCESGidAOgKFtRoMUtF1kcK4hxSUJ6ACYmxBioTiDYwVxj2OgCanZqaL2SsoqKlGObp5XHmIS6K0grvU7Ih3pqRIOOEGxzgO8tgWx3wj1QQIVx3iwroCoJamI29s7z7s58sxDI7c9u+oVkBLyyvw/fUbD5pvmmt5QTIAUjdyy2Rn/ew8VQ0KkmVZhZPO/LeJgN1cqyhAWBkhZTO5pNNOMFrASgeEysFVhhocQcd2rlU0IO0Er93vKhUQJuQ/RL7Rcg4OArkknfDaDtAJ1L+Y5wqFFVK3lAAAAABJRU5ErkJggg==' }));
-
- const topsites = await browser.topSites.get({includeFavicon: true});
- topsites
- .forEach(s => combined.push({ title: s.title, url: s.url, type: 'S', favIconUrl: s.favicon}));
-
- const history = await browser.history.search({ text: "", maxResults: 100 });
- history.forEach(entry => combined.push({ title: entry.title, url: entry.url, type: 'H', favIconUrl: null }));
-
- // filtering
- const newtab = (await browser.runtime.getManifest()).chrome_url_overrides?.newtab
- const startpage = glide.prefs.get("browser.startup.homepage")
-
- let filtered_combined = combined.filter(e => e.url !== startpage && e.url !== newtab)
-
- glide.commandline.show({
- title: "open",
- options: filtered_combined.map((entry) => ({
- label: entry.title,
- render() {
- return DOM.create_element("div", {
- style: {
- display: "flex",
- alignItems: "center",
- gap: "8px",
- },
- children: [
- entry.favIconUrl
- ? DOM.create_element("img", [], {
- src: entry.favIconUrl,
- style: {
- width: '16px',
- height: '16px',
- }
- })
- : DOM.create_element("span", [entry.type], {
- style: { color: "#777", fontSize: "0.9em" },
- }),
- DOM.create_element("span", [entry.title]),
- DOM.create_element("span", [entry.url], {
- style: { color: "#777", fontSize: "0.9em" },
- }),
- ],
- });
- },
- async execute({ input: input }) {
- if (entry.title.toLowerCase().includes(input.toLowerCase())) {
- const tab = await glide.tabs.get_first({
- url: entry.url,
- });
- if (tab) {
- const windowid = tab.windowId;
- if (windowid === undefined) {
- return
- }
- await browser.windows.update(windowid, {
- focused: true
- })
- await browser.tabs.update(tab.id, {
- active: true,
- });
- } else {
-
- await browser.tabs.create({
- active: true,
- url: entry.url,
- windowId: browser.windows.getCurrent().id,
- });
- }
- } else {
- const terms = input.split(" ",)
- const first = terms[0]
- if (terms.length > 1 && first !== undefined && first in search_info) {
- let info = search_info[first];
- let query = info?.url + terms.slice(1).join(info?.sep)
- browser.tabs.create({
- active: true,
- url: query
- });
- return;
- }
-
- let url: URL;
- try {
- url = new URL(input)
- } catch (_) {
- try {
- url = new URL("http://" + input) // firefox automatically makes this https
-
- // avoids single word searches becoming URLs
- if (url.hostname.split(".").length == 1 && url.hostname !== "localhost") {
- throw "probably not a hostname";
- }
- } catch (_) { // probably not a url
- browser.search.search({
- query: terms.filter(s => s).join(" "),
- disposition: "NEW_TAB",
- })
- return
- }
-
- }
- // so it IS a URL!
-
- const tab = await glide.tabs.get_first({ url });
-
- if (tab) {
- browser.tabs.update(tab.id, { active: true });
- }
- else {
- browser.tabs.create({ active: true, url });
- }
- }
-
- },
- })),
- });
-}, { description: "Open the site searcher" });
-
glide.keymaps.set('normal', 'ab', async () => {
const currentTab = await glide.tabs.get_first({ active: true });
@@ -490,6 +342,7 @@ glide.keymaps.set('normal', '<C-x>4b', 'split_window');
glide.keymaps.set('normal', '<C-x>1', 'unsplit_window');
glide.keymaps.set('normal', '<A-o>', 'other_window');
+glide.include('sitesearch.glide.ts');
glide.include('tabbar.glide.ts');
const toggle_reader_mode = glide.excmds.create({
diff --git a/glide/.config/glide/sitesearch.glide.ts b/glide/.config/glide/sitesearch.glide.ts
new file mode 100644
index 0000000..0004cf3
--- /dev/null
+++ b/glide/.config/glide/sitesearch.glide.ts
@@ -0,0 +1,147 @@
+// From https://github.com/glide-browser/glide/discussions/147#discussioncomment-15337351
+
+/**
+ * custom search providers
+ */
+const search_info: Record<string, { url: string, sep: string }> = {
+ 'youtube': {
+ url: "https://www.youtube.com/results?search_query=", sep: "+"
+ }
+} as const
+
+/*
+ * pick tabs via a selection of bookmarks and history
+ */
+glide.keymaps.set("normal", "<leader>t", async () => {
+
+ //let combined: Array<Browser.Bookmarks.BookmarkTreeNode | Browser.History.HistoryItem> = []
+ let combined = []
+ const tabs = await browser.tabs.query({});
+ tabs.forEach(entry => combined.push({
+ title: entry.title ?? 'Unnamed Tab',
+ url: entry.url,
+ type: 'T',
+ favIconUrl: entry.favIconUrl
+ }));
+
+ const bookmarks = await browser.bookmarks.search({});
+ bookmarks
+ .filter(bmark => bmark.type !== 'folder')
+ .forEach(bmark => combined.push({ title: bmark.title, url: bmark.url, type: 'B', favIconUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAE/ElEQVR4Xu2cW2wUVRjHvzPdXdou0gvUemniegnRQtquimBNa4kpJfrCJrQ+Gewjb5oQfJPLG8akjzxawpMtyeKDpuBDkWqEBNMFEcUINEQTTEVrwbZ7mTmeb9xZ5j6zZXbd7X4n2YdOz3xz5rf//3fOmZ1zGPgsyelvY7m0vIcz/jpw3iNOi/k8teKqMQYLHNg5YNJnI7teG3drIPNq/cTZb95lirKPAx/wqlul/5+TGLy/d6j/tF37HQEJMD0CzNgaBmPmMT6yu3/UfNAWkKoaLo9xDs1VqorVNtsCyQII4YAif+J0hXAoBO2bWqCxfh20Nm8wVNto+nu1rSzleXcXFuHXO/Pqx64IuyX0djMAOnXm/B6FQ9KpgZtjHRDreBzCobpS3kNZYi/eX4JLV6/D8krafL05YbWntYMFQMnp2eZc5t4tJ1v1vdwFG9Y3lqXx5bpINifDzKUrVkhS3ajWuxUATU59/R4HZcyucR2PtUH388+Wq91lvQ4qCSEZCmOnR4b6EnisAGjizMxsfnxjaeDAti5oa20qScNvdg8GGveZy19a4nFxRJYVyIoPFxYxl8s/3TDkJBwnDQ/1txgBTZ23npmPVO2ANCB4g+lMDhQTJEzcF1LXDNxEHlLF80BBLoBiT7bDtq2bA/2mtWDlUJC+4QhpRUAyK+nzcxdWDwjP3PLcU9DW0hS41coNCO8lJ6yWEQlaXx4aUEnkI4K+dPBooKG/++hDQzzMnbEn2gFdoLfacjpLgPQEmh+JQm+8E6IN9erhJQJkFSbOAgZ74yokAuRgXFTSYO+LpQe0vWdLILkjt+vtQOJoQUJnP4W//r4Hd+bvwuL9f2xjY4/86KbW0uagSgak3fn8nwtw8/ZvFkiYuF/peoEAIQEnSG8N7CBAGoEff5mz2I0A6fSBOennW7cNiiFApsxzMfUDAUIC2IvZFQKUp0KAPEZNBIgAPdzAmhRECiIFGQiUYrJK3byLyCgHUQ6iHEQ5qBgNUJL2oEWACFAxhrLWJQWRgkhBtgSq4WcffcPpiSI9UfRnZZqL0VzMn1KcapGCSEFWAlLiTfWgkvzCU141pyDW3gZ1x4+pYOT9HwD/3X4JgUau5gDVfXwIWFenev/8yjWQDxxxVVFNAUJrSfv3GYAox0+4Wq1mABWstT5qVIx4a8zNajUDSG8ts6fcrFYTgOysZYbkZLU1D8jRWmZCDlZb84DcrOXHakEAYmJF9PDuvp14PV+LWez61aAedygnT4FyclK9hPTOsPjs9RwM6iv4Pb+oxx12C+omXFb7lBKQGlt7n9ncYxWFyr2yb0CMpcRiurgW7X9XUIAMXEP5AYQL6UKRcDyx89U5AmR+T/qri6lwJJTQw6mIHFQpCorWR2z3ECCL5b8hAuTxnjQBcgGE457G+rA67jEXshiOvyRptCESGidAOgKFtRoMUtF1kcK4hxSUJ6ACYmxBioTiDYwVxj2OgCanZqaL2SsoqKlGObp5XHmIS6K0grvU7Ih3pqRIOOEGxzgO8tgWx3wj1QQIVx3iwroCoJamI29s7z7s58sxDI7c9u+oVkBLyyvw/fUbD5pvmmt5QTIAUjdyy2Rn/ew8VQ0KkmVZhZPO/LeJgN1cqyhAWBkhZTO5pNNOMFrASgeEysFVhhocQcd2rlU0IO0Er93vKhUQJuQ/RL7Rcg4OArkknfDaDtAJ1L+Y5wqFFVK3lAAAAABJRU5ErkJggg==' }));
+
+ const topsites = await browser.topSites.get({includeFavicon: true});
+ topsites
+ .forEach(s => combined.push({ title: s.title, url: s.url, type: 'S', favIconUrl: s.favicon}));
+
+ const history = await browser.history.search({ text: "", maxResults: 100 });
+ history.forEach(entry => combined.push({ title: entry.title, url: entry.url, type: 'H', favIconUrl: null }));
+
+ // filtering
+ const newtab = (await browser.runtime.getManifest()).chrome_url_overrides?.newtab
+ const startpage = glide.prefs.get("browser.startup.homepage")
+
+ let filtered_combined = combined.filter(e => e.url !== startpage && e.url !== newtab)
+
+ glide.commandline.show({
+ title: "open",
+ options: filtered_combined.map((entry) => ({
+ label: entry.title,
+ render() {
+ return DOM.create_element("div", {
+ style: {
+ display: "flex",
+ alignItems: "center",
+ gap: "8px",
+ },
+ children: [
+ entry.favIconUrl
+ ? DOM.create_element("img", [], {
+ src: entry.favIconUrl,
+ style: {
+ width: '16px',
+ height: '16px',
+ }
+ })
+ : DOM.create_element("span", [entry.type], {
+ style: { color: "#777", fontSize: "0.9em" },
+ }),
+ DOM.create_element("span", [entry.title]),
+ DOM.create_element("span", [entry.url], {
+ style: { color: "#777", fontSize: "0.9em" },
+ }),
+ ],
+ });
+ },
+ async execute({ input: input }) {
+ if (entry.title.toLowerCase().includes(input.toLowerCase())) {
+ const tab = await glide.tabs.get_first({
+ url: entry.url,
+ });
+ if (tab) {
+ const windowid = tab.windowId;
+ if (windowid === undefined) {
+ return
+ }
+ await browser.windows.update(windowid, {
+ focused: true
+ })
+ await browser.tabs.update(tab.id, {
+ active: true,
+ });
+ } else {
+
+ await browser.tabs.create({
+ active: true,
+ url: entry.url,
+ windowId: browser.windows.getCurrent().id,
+ });
+ }
+ } else {
+ const terms = input.split(" ",)
+ const first = terms[0]
+ if (terms.length > 1 && first !== undefined && first in search_info) {
+ let info = search_info[first];
+ let query = info?.url + terms.slice(1).join(info?.sep)
+ browser.tabs.create({
+ active: true,
+ url: query
+ });
+ return;
+ }
+
+ let url: URL;
+ try {
+ url = new URL(input)
+ } catch (_) {
+ try {
+ url = new URL("http://" + input) // firefox automatically makes this https
+
+ // avoids single word searches becoming URLs
+ if (url.hostname.split(".").length == 1 && url.hostname !== "localhost") {
+ throw "probably not a hostname";
+ }
+ } catch (_) { // probably not a url
+ browser.search.search({
+ query: terms.filter(s => s).join(" "),
+ disposition: "NEW_TAB",
+ })
+ return
+ }
+
+ }
+ // so it IS a URL!
+
+ const tab = await glide.tabs.get_first({ url });
+
+ if (tab) {
+ browser.tabs.update(tab.id, { active: true });
+ }
+ else {
+ browser.tabs.create({ active: true, url });
+ }
+ }
+
+ },
+ })),
+ });
+}, { description: "Open the site searcher" });