Compare commits
4 Commits
v2.1.1
...
24449fe721
| Author | SHA1 | Date | |
|---|---|---|---|
|
24449fe721
|
|||
|
60171cc5a3
|
|||
|
20502200d9
|
|||
|
e6de4f11e7
|
@@ -121,7 +121,8 @@ add_custom_command (OUTPUT ${actions}
|
|||||||
# Build the main executable and link it
|
# Build the main executable and link it
|
||||||
add_executable (${PROJECT_NAME} ${PROJECT_NAME}.c ${actions})
|
add_executable (${PROJECT_NAME} ${PROJECT_NAME}.c ${actions})
|
||||||
target_link_libraries (${PROJECT_NAME} ${Unistring_LIBRARIES}
|
target_link_libraries (${PROJECT_NAME} ${Unistring_LIBRARIES}
|
||||||
${Ncursesw_LIBRARIES} termo-static ${curl_LIBRARIES} ${extra_libraries})
|
${Ncursesw_LIBRARIES} ${Termo_LIBRARIES} ${curl_LIBRARIES}
|
||||||
|
${extra_libraries})
|
||||||
add_threads (${PROJECT_NAME})
|
add_threads (${PROJECT_NAME})
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2016 - 2023, Přemysl Eric Janouch <p@janouch.name>
|
Copyright (c) 2016 - 2024, Přemysl Eric Janouch <p@janouch.name>
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
purpose with or without fee is hereby granted.
|
purpose with or without fee is hereby granted.
|
||||||
|
|||||||
5
NEWS
5
NEWS
@@ -1,3 +1,8 @@
|
|||||||
|
Unreleased
|
||||||
|
|
||||||
|
* Made global search indicate the search terms, and match on filenames
|
||||||
|
|
||||||
|
|
||||||
2.1.1 (2024-02-27)
|
2.1.1 (2024-02-27)
|
||||||
|
|
||||||
* Fixed installation of Info tab plugins
|
* Fixed installation of Info tab plugins
|
||||||
|
|||||||
2
liberty
2
liberty
Submodule liberty updated: 969a4cfc3e...8a8437634a
51
nncmpp.c
51
nncmpp.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* nncmpp -- the MPD client you never knew you needed
|
* nncmpp -- the MPD client you never knew you needed
|
||||||
*
|
*
|
||||||
* Copyright (c) 2016 - 2023, Přemysl Eric Janouch <p@janouch.name>
|
* Copyright (c) 2016 - 2024, Přemysl Eric Janouch <p@janouch.name>
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for any
|
* Permission to use, copy, modify, and/or distribute this software for any
|
||||||
* purpose with or without fee is hereby granted.
|
* purpose with or without fee is hereby granted.
|
||||||
@@ -3599,17 +3599,36 @@ static void
|
|||||||
library_tab_on_search_data (const struct mpd_response *response,
|
library_tab_on_search_data (const struct mpd_response *response,
|
||||||
const struct strv *data, void *user_data)
|
const struct strv *data, void *user_data)
|
||||||
{
|
{
|
||||||
(void) user_data;
|
char *filter = user_data;
|
||||||
if (!g_library_tab.searching)
|
if (!g_library_tab.searching)
|
||||||
return;
|
goto out;
|
||||||
|
|
||||||
if (!response->success)
|
if (!response->success)
|
||||||
{
|
|
||||||
print_error ("cannot search: %s", response->message_text);
|
print_error ("cannot search: %s", response->message_text);
|
||||||
return;
|
else
|
||||||
|
{
|
||||||
|
cstr_set (&g_library_tab.super.header,
|
||||||
|
xstrdup_printf ("%s: %s", "Global search", filter));
|
||||||
|
library_tab_load_data (data);
|
||||||
}
|
}
|
||||||
|
|
||||||
library_tab_load_data (data);
|
out:
|
||||||
|
free (filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
mpd_quoted_filter_string (const char *value)
|
||||||
|
{
|
||||||
|
struct str quoted = str_make ();
|
||||||
|
str_append_c ("ed, '\'');
|
||||||
|
for (const char *p = value; *p; p++)
|
||||||
|
{
|
||||||
|
if (mpd_client_must_escape_in_quote (*p))
|
||||||
|
str_append_c ("ed, '\\');
|
||||||
|
str_append_c ("ed, *p);
|
||||||
|
}
|
||||||
|
str_append_c ("ed, '\'');
|
||||||
|
return str_steal ("ed);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -3619,10 +3638,26 @@ search_on_changed (void)
|
|||||||
|
|
||||||
size_t len;
|
size_t len;
|
||||||
char *u8 = (char *) u32_to_u8 (g.editor.line, g.editor.len + 1, NULL, &len);
|
char *u8 = (char *) u32_to_u8 (g.editor.line, g.editor.len + 1, NULL, &len);
|
||||||
|
mpd_client_list_begin (c);
|
||||||
mpd_client_send_command (c, "search", "any", u8, NULL);
|
mpd_client_send_command (c, "search", "any", u8, NULL);
|
||||||
free (u8);
|
|
||||||
|
|
||||||
mpd_client_add_task (c, library_tab_on_search_data, NULL);
|
// Just tag search doesn't consider filenames.
|
||||||
|
// Older MPD can do `search any X file X` but without the negation,
|
||||||
|
// which is necessary to avoid duplicates. Neither syntax supports OR.
|
||||||
|
// XXX: We should parse this, but it's probably not going to reach 100 soon,
|
||||||
|
// and it is not really documented what this should even look like.
|
||||||
|
if (strcmp (c->got_hello, "0.21.") > 1)
|
||||||
|
{
|
||||||
|
char *quoted = mpd_quoted_filter_string (u8);
|
||||||
|
char *expression = xstrdup_printf ("((!(any contains %s)) AND "
|
||||||
|
"(file contains %s))", quoted, quoted);
|
||||||
|
mpd_client_send_command (c, "search", expression, NULL);
|
||||||
|
free (expression);
|
||||||
|
free (quoted);
|
||||||
|
}
|
||||||
|
|
||||||
|
mpd_client_list_end (c);
|
||||||
|
mpd_client_add_task (c, library_tab_on_search_data, u8);
|
||||||
mpd_client_idle (c, 0);
|
mpd_client_idle (c, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user