Compare commits

...

10 Commits

Author SHA1 Message Date
Jakub Jirutka e488fbb6bf
Merge 34d5779d41 into 6c38a49d54 2024-03-31 22:57:15 -04:00
Dave Davenport 6c38a49d54 [Doc] Fix typo, thx to @Nickwiz 2024-03-16 11:53:12 +01:00
Dave Davenport 94f8c88336 [github] update lock config. 2024-03-15 10:29:04 +01:00
Qball Cow 81e06d7157 [github] bump lock-threads flow version 2024-03-13 07:18:08 +01:00
Dave Davenport 839ee0d7d9 [Doc] Fix copy/paste error in template. 2024-03-11 15:49:19 +01:00
Dave Davenport 76154cc1ff [Doc] Fix typo in issue template. 2024-03-11 15:48:25 +01:00
Dave Davenport 1063b6ec05 [Run] Store display and exec string 2024-03-11 12:32:12 +01:00
Dave Davenport 04f16052a9 [Run] Don't re-quote history items. 2024-03-11 12:04:08 +01:00
lbonn 9cae4a9b61
[Modes] Remove dead code in mode implems (#1960)
NEXT, PREVIOUS and QUICK_SWITCH are handled in mode.c since
96cd34d24f (#1184)
2024-03-11 11:07:29 +01:00
Jakub Jirutka 34d5779d41 [rofi-sensible-terminal] Use /bin/sh instead of /usr/bin/env bash
This script is fully POSIX-sh compatible, i.e. it's portable and can be
run in any shell, not just bash. It's incorrect to assume that bash is
available on every *nix system (it's not), but /bin/sh is.
2021-09-27 01:05:25 +02:00
7 changed files with 79 additions and 66 deletions

View File

@ -13,7 +13,7 @@ body:
consider youre wrong and still fill the full report. Any report
missing required informations will be labeled as “Incomplete Report -
Please follow the guidelines” and will be closed. If you ask a
question, enter dummy information in required fields to get passed the
question, enter dummy information in required fields to get past the
checks or in general completely ignore the guidelines, the issue will
be closed and locked as spam.
@ -37,21 +37,26 @@ body:
- type: input
attributes:
label: "Configuration"
description: "Please use https://gist.github.com and include output of `rofi -dump-config`."
description: |
Please use https://gist.github.com and include output of `rofi -dump-config`.
n/a is not a valid config.
placeholder: "Gist URL"
validations:
required: true
- type: input
attributes:
label: "Theme"
description: "Please use https://gist.github.com and include output of `rofi -dump-theme`."
description: |
Please use https://gist.github.com and include output of `rofi -dump-theme`.
n/a is not a valid theme.
placeholder: "Gist URL"
validations:
required: true
- type: input
attributes:
label: "Timing report"
description: "Please use https://gist.github.com and include output of your command with G_MESSAGES_DEBUG=Timings set."
description: |
Please use https://gist.github.com and include output of your command with G_MESSAGES_DEBUG=Timings set.
placeholder: "Gist URL"
validations:
required: false

View File

@ -1,32 +1,41 @@
name: 'Lock threads'
name: 'Lock Threads'
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
permissions:
issues: write
pull-requests: write
discussions: write
concurrency:
group: lock-threads
jobs:
lock:
action:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v2
- uses: dessant/lock-threads@v5
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
issue-lock-inactive-days: '31'
issue-exclude-created-before: ''
issue-exclude-labels: ''
issue-lock-labels: ''
issue-lock-reason: 'resolved'
issue-lock-comment: >
This issue has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new issue for related bugs.
pr-lock-inactive-days: '31'
pr-exclude-created-before: ''
pr-exclude-labels: ''
pr-lock-labels: ''
pr-lock-reason: 'resolved'
pr-lock-comment: >
process-only: 'issues'
github-token: ${{ github.token }}
issue-inactive-days: '31'
exclude-issue-created-before: ''
exclude-issue-created-after: ''
exclude-issue-created-between: ''
exclude-issue-closed-before: ''
exclude-issue-closed-after: ''
exclude-issue-closed-between: ''
include-any-issue-labels: ''
include-all-issue-labels: ''
exclude-any-issue-labels: ''
add-issue-labels: ''
remove-issue-labels: ''
issue-comment: >
This pull request has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new issue for related bugs.
process-only: ''
issue-lock-reason: 'resolved'
log-output: false

View File

@ -143,7 +143,7 @@ The following options are supported:
- **nonselectable**: If true the row cannot activated.
- **permantent**: If true the row always shows, independent of filter.
- **permanent**: If true the row always shows, independent of filter.
- **info**: Info that, on selection, gets placed in the `ROFI_INFO`
environment variable. This entry does not get searched for filtering.

View File

@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/bin/sh
#
# This code is released in public domain by Han Boetes <han@mijncomputer.nl>
# Updated by Dave Davenport <qball@gmpclient.org>

View File

@ -473,13 +473,7 @@ static ModeMode file_browser_mode_result(Mode *sw, int mretv, char **input,
}
gboolean special_command =
((mretv & MENU_CUSTOM_ACTION) == MENU_CUSTOM_ACTION);
if (mretv & MENU_NEXT) {
retv = NEXT_DIALOG;
} else if (mretv & MENU_PREVIOUS) {
retv = PREVIOUS_DIALOG;
} else if (mretv & MENU_QUICK_SWITCH) {
retv = (mretv & MENU_LOWER_MASK);
} else if (mretv & MENU_CUSTOM_COMMAND) {
if (mretv & MENU_CUSTOM_COMMAND) {
retv = (mretv & MENU_LOWER_MASK);
} else if ((mretv & MENU_OK)) {
if (selected_line < pd->array_length) {
@ -657,13 +651,7 @@ ModeMode file_browser_mode_completer(Mode *sw, int mretv, char **input,
ModeMode retv = MODE_EXIT;
FileBrowserModePrivateData *pd =
(FileBrowserModePrivateData *)mode_get_private_data(sw);
if (mretv & MENU_NEXT) {
retv = NEXT_DIALOG;
} else if (mretv & MENU_PREVIOUS) {
retv = PREVIOUS_DIALOG;
} else if (mretv & MENU_QUICK_SWITCH) {
retv = (mretv & MENU_LOWER_MASK);
} else if ((mretv & MENU_OK)) {
if ((mretv & MENU_OK)) {
if (selected_line < pd->array_length) {
if (pd->array[selected_line].type == UP) {
GFile *new = g_file_get_parent(pd->current_dir);

View File

@ -351,13 +351,7 @@ static ModeMode recursive_browser_mode_result(Mode *sw, int mretv, G_GNUC_UNUSED
return MODE_EXIT;
}
if (mretv & MENU_NEXT) {
retv = NEXT_DIALOG;
} else if (mretv & MENU_PREVIOUS) {
retv = PREVIOUS_DIALOG;
} else if (mretv & MENU_QUICK_SWITCH) {
retv = (mretv & MENU_LOWER_MASK);
} else if (mretv & MENU_CUSTOM_COMMAND) {
if (mretv & MENU_CUSTOM_COMMAND) {
retv = (mretv & MENU_LOWER_MASK);
} else if ((mretv & MENU_OK)) {
if (selected_line < pd->array_length) {
@ -495,13 +489,7 @@ ModeMode recursive_browser_mode_completer(Mode *sw, int mretv, char **input,
ModeMode retv = MODE_EXIT;
FileBrowserModePrivateData *pd =
(FileBrowserModePrivateData *)mode_get_private_data(sw);
if (mretv & MENU_NEXT) {
retv = NEXT_DIALOG;
} else if (mretv & MENU_PREVIOUS) {
retv = PREVIOUS_DIALOG;
} else if (mretv & MENU_QUICK_SWITCH) {
retv = (mretv & MENU_LOWER_MASK);
} else if ((mretv & MENU_OK)) {
if ((mretv & MENU_OK)) {
if (selected_line < pd->array_length) {
if (pd->array[selected_line].type == RFILE) {
*path = g_strescape(pd->array[selected_line].path, NULL);

View File

@ -60,12 +60,14 @@
/**
* Name of the history file where previously chosen commands are stored.
*/
#define RUN_CACHE_FILE "rofi-3.runcache"
#define RUN_CACHE_FILE "rofi-4.runcache"
typedef struct {
char *entry;
char *exec;
uint32_t icon_fetch_uid;
uint32_t icon_fetch_size;
gboolean from_history;
/* Surface holding the icon. */
cairo_surface_t *icon;
} RunEntry;
@ -113,6 +115,7 @@ static gboolean exec_cmd(const char *cmd, int run_in_term, const char *orig) {
char *path = g_build_filename(cache_dir, RUN_CACHE_FILE, NULL);
RofiHelperExecuteContext context = {.name = NULL};
char *hist = g_strdup_printf("%s\x1f%s", orig, cmd);
// FIXME: assume startup notification support for terminals
if (helper_execute_command(NULL, lf_cmd, run_in_term,
run_in_term ? &context : NULL)) {
@ -121,12 +124,14 @@ static gboolean exec_cmd(const char *cmd, int run_in_term, const char *orig) {
* It is allowed to be a bit slower.
*/
history_set(path, orig);
history_set(path, hist);
g_free(path);
g_free(lf_cmd);
g_free(hist);
return TRUE;
}
history_remove(path, orig);
history_remove(path, hist);
g_free(hist);
g_free(path);
g_free(lf_cmd);
return FALSE;
@ -140,8 +145,9 @@ static gboolean exec_cmd(const char *cmd, int run_in_term, const char *orig) {
static void delete_entry(const RunEntry *cmd) {
char *path = g_build_filename(cache_dir, RUN_CACHE_FILE, NULL);
history_remove(path, cmd->entry);
char *hist = g_strdup_printf("%s\x1f%s", cmd->entry, cmd->exec);
history_remove(path, hist);
g_free(hist);
g_free(path);
}
@ -205,6 +211,8 @@ static RunEntry *get_apps_external(RunEntry *retv, unsigned int *length,
// No duplicate, add it.
retv = g_realloc(retv, ((*length) + 2) * sizeof(RunEntry));
retv[(*length)].entry = g_strdup(buffer);
retv[(*length)].exec = g_shell_quote(buffer);
retv[(*length)].from_history = FALSE;
retv[(*length)].icon = NULL;
retv[(*length)].icon_fetch_uid = 0;
retv[(*length)].icon_fetch_size = 0;
@ -221,6 +229,8 @@ static RunEntry *get_apps_external(RunEntry *retv, unsigned int *length,
}
}
retv[(*length)].entry = NULL;
retv[(*length)].exec = NULL;
retv[(*length)].from_history = FALSE;
retv[(*length)].icon = NULL;
retv[(*length)].icon_fetch_uid = 0;
retv[(*length)].icon_fetch_size = 0;
@ -244,7 +254,14 @@ static RunEntry *get_apps(unsigned int *length) {
char **hretv = history_get_list(path, length);
retv = (RunEntry *)g_malloc0((*length + 1) * sizeof(RunEntry));
for (unsigned int i = 0; i < *length; i++) {
retv[i].entry = hretv[i];
gchar **rs = g_strsplit(hretv[i], "\x1f", 2);
retv[i].entry = rs[0];
retv[i].exec = rs[1];
if (retv[i].exec == NULL) {
retv[i].exec = g_strdup(rs[0]);
}
retv[i].from_history = TRUE;
g_free(rs);
}
g_free(hretv);
g_free(path);
@ -259,6 +276,7 @@ static RunEntry *get_apps(unsigned int *length) {
g_debug("Failed to convert homedir to UTF-8: %s", error->message);
for (unsigned int i = 0; retv[i].entry != NULL; i++) {
g_free(retv[i].entry);
g_free(retv[i].exec);
}
g_free(retv);
g_clear_error(&error);
@ -332,10 +350,14 @@ static RunEntry *get_apps(unsigned int *length) {
retv = g_realloc(retv, ((*length) + 2) * sizeof(RunEntry));
retv[(*length)].entry = name;
retv[(*length)].exec = g_shell_quote(name);
retv[(*length)].from_history = FALSE;
retv[(*length)].icon = NULL;
retv[(*length)].icon_fetch_uid = 0;
retv[(*length)].icon_fetch_size = 0;
retv[(*length) + 1].entry = NULL;
retv[(*length) + 1].exec = NULL;
retv[(*length) + 1].from_history = FALSE;
retv[(*length) + 1].icon = NULL;
retv[(*length) + 1].icon_fetch_uid = 0;
retv[(*length) + 1].icon_fetch_size = 0;
@ -367,6 +389,8 @@ static RunEntry *get_apps(unsigned int *length) {
if (g_strcmp0(retv[index].entry, retv[index + 1].entry) == 0) {
g_free(retv[index].entry);
retv[index].entry = NULL;
g_free(retv[index].exec);
retv[index].exec = NULL;
removed++;
}
}
@ -397,6 +421,7 @@ static void run_mode_destroy(Mode *sw) {
if (rmpd != NULL) {
for (unsigned int i = 0; i < rmpd->cmd_list_length; i++) {
g_free(rmpd->cmd_list[i].entry);
g_free(rmpd->cmd_list[i].exec);
if (rmpd->cmd_list[i].icon != NULL) {
cairo_surface_destroy(rmpd->cmd_list[i].icon);
}
@ -447,16 +472,14 @@ static ModeMode run_mode_result(Mode *sw, int mretv, char **input,
&path);
if (retv == MODE_EXIT) {
if (path == NULL) {
char *arg = g_shell_quote(rmpd->cmd_list[rmpd->selected_line].entry);
char *arg = rmpd->cmd_list[rmpd->selected_line].exec;
exec_cmd(arg, run_in_term, rmpd->cmd_list[rmpd->selected_line].entry);
g_free(arg);
} else {
char *earg = g_shell_quote(rmpd->cmd_list[rmpd->selected_line].entry);
char *earg = rmpd->cmd_list[rmpd->selected_line].exec;
char *epath = g_shell_quote(path);
char *arg = g_strdup_printf("%s %s", earg, epath);
exec_cmd(arg, run_in_term, arg);
g_free(arg);
g_free(earg);
g_free(epath);
}
}
@ -466,11 +489,11 @@ static ModeMode run_mode_result(Mode *sw, int mretv, char **input,
}
if ((mretv & MENU_OK) && rmpd->cmd_list[selected_line].entry != NULL) {
char *earg = g_shell_quote(rmpd->cmd_list[selected_line].entry);
char *earg = NULL;
earg = rmpd->cmd_list[selected_line].exec;
if (!exec_cmd(earg, run_in_term, rmpd->cmd_list[selected_line].entry)) {
retv = RELOAD_DIALOG;
}
g_free(earg);
} else if ((mretv & MENU_CUSTOM_INPUT) && *input != NULL &&
*input[0] != '\0') {
if (!exec_cmd(*input, run_in_term, *input)) {