Move the -w switch to the configuration file
Update README accordingly. Woo, I get to remove code.
This commit is contained in:
parent
b3458d84a0
commit
38b463c883
18
README.adoc
18
README.adoc
@ -56,9 +56,7 @@ Note that for versions of CMake before 2.8.9, you need to prefix `cpack` with
|
||||
`fakeroot` or file ownership will end up wrong.
|
||||
|
||||
Having the program installed, simply run it with a StarDict '.ifo' file as an
|
||||
argument. If you want the application to watch the X11 primary selection for
|
||||
changes and automatically search for the selected text, use the `-w` switch.
|
||||
This feature requires GTK+.
|
||||
argument. It is however highly recommended to configure it, see below.
|
||||
|
||||
Extensions
|
||||
----------
|
||||
@ -78,14 +76,28 @@ with the following. Note that it is intended for black-on-white terminals.
|
||||
center-search = true
|
||||
underline-last = false
|
||||
hl-common-prefix = true
|
||||
watch-selection = true
|
||||
|
||||
[Colors]
|
||||
header = reverse
|
||||
header-active = underline
|
||||
search = ul
|
||||
even = 16 231
|
||||
odd = 16 255
|
||||
....
|
||||
|
||||
The `watch-selection` option makes the application watch the X11 primary
|
||||
selection for changes and automatically search for selected text.
|
||||
This feature requires GTK+ and it will never work on Wayland by its design.
|
||||
|
||||
You can also set up some dictionaries to be loaded at startup automatically:
|
||||
|
||||
....
|
||||
[Dictionaries]
|
||||
name1 = ~/path/to/dict.ifo
|
||||
name2 = ~/another/dict.ifo
|
||||
....
|
||||
|
||||
Dictionaries
|
||||
------------
|
||||
Unfortunately this application only really works with specific dictionaries.
|
||||
|
90
src/sdtui.c
90
src/sdtui.c
@ -184,8 +184,6 @@ typedef struct view_entry ViewEntry;
|
||||
typedef struct dictionary Dictionary;
|
||||
/// Encloses application data.
|
||||
typedef struct application Application;
|
||||
/// Application options.
|
||||
typedef struct app_options AppOptions;
|
||||
|
||||
struct view_entry
|
||||
{
|
||||
@ -240,12 +238,6 @@ struct application
|
||||
/// Shortcut to retrieve named terminal attributes
|
||||
#define APP_ATTR(name) self->attrs[ATTRIBUTE_ ## name].attrs
|
||||
|
||||
struct app_options
|
||||
{
|
||||
gboolean show_version; ///< Output version information and quit
|
||||
gint selection_watcher; ///< Interval in milliseconds, or -1
|
||||
};
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
/// Splits the entry and adds it to a pointer array.
|
||||
@ -454,6 +446,14 @@ app_load_config_values (Application *self, GKeyFile *kf)
|
||||
self->hl_prefix =
|
||||
app_load_bool (kf, "hl-common-prefix", self->hl_prefix);
|
||||
|
||||
guint64 timer;
|
||||
const gchar *watch_selection = "watch-selection";
|
||||
if (app_load_bool (kf, watch_selection, FALSE))
|
||||
self->selection_interval = 500;
|
||||
else if ((timer = g_key_file_get_uint64
|
||||
(kf, "Settings", watch_selection, NULL)) && timer <= G_MAXINT)
|
||||
self->selection_interval = timer;
|
||||
|
||||
#define XX(name, config, fg_, bg_, attrs_) \
|
||||
app_load_color (self, kf, config, ATTRIBUTE_ ## name);
|
||||
ATTRIBUTE_TABLE (XX)
|
||||
@ -524,25 +524,13 @@ app_init_attrs (Application *self)
|
||||
|
||||
/// Initialize the application core.
|
||||
static void
|
||||
app_init (Application *self, AppOptions *options, char **filenames)
|
||||
app_init (Application *self, char **filenames)
|
||||
{
|
||||
self->loop = NULL;
|
||||
self->selection_interval = options->selection_watcher;
|
||||
self->selection_interval = -1;
|
||||
self->selection_timer = 0;
|
||||
self->selection_contents = NULL;
|
||||
|
||||
#ifdef WITH_GTK
|
||||
if (gtk_init_check (0, NULL))
|
||||
{
|
||||
// So that we set the input only when it actually changes
|
||||
GtkClipboard *clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
|
||||
self->selection_contents = gtk_clipboard_wait_for_text (clipboard);
|
||||
rearm_selection_watcher (self);
|
||||
}
|
||||
else
|
||||
#endif // WITH_GTK
|
||||
self->loop = g_main_loop_new (NULL, FALSE);
|
||||
|
||||
self->tk = NULL;
|
||||
self->tk_timer = 0;
|
||||
|
||||
@ -586,6 +574,19 @@ app_init (Application *self, AppOptions *options, char **filenames)
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Now we have settings for the clipboard watcher, we can arm the timer
|
||||
#ifdef WITH_GTK
|
||||
if (gtk_init_check (0, NULL))
|
||||
{
|
||||
// So that we set the input only when it actually changes
|
||||
GtkClipboard *clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
|
||||
self->selection_contents = gtk_clipboard_wait_for_text (clipboard);
|
||||
rearm_selection_watcher (self);
|
||||
}
|
||||
else
|
||||
#endif // WITH_GTK
|
||||
self->loop = g_main_loop_new (NULL, FALSE);
|
||||
|
||||
// Dictionaries given on the command line override the configuration
|
||||
if (*filenames)
|
||||
{
|
||||
@ -1899,29 +1900,6 @@ on_selection_timer (gpointer data)
|
||||
app->selection_timer = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
on_watch_primary_selection (G_GNUC_UNUSED const gchar *option_name,
|
||||
const gchar *value, gpointer data, GError **error)
|
||||
{
|
||||
AppOptions *options = data;
|
||||
|
||||
if (!value)
|
||||
{
|
||||
options->selection_watcher = 500;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
unsigned long timer;
|
||||
if (!xstrtoul (&timer, value, 10) || !timer || timer > G_MAXINT)
|
||||
{
|
||||
g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED,
|
||||
_("Invalid timer value"));
|
||||
return FALSE;
|
||||
}
|
||||
options->selection_watcher = timer;
|
||||
return TRUE;
|
||||
}
|
||||
#endif // WITH_GTK
|
||||
|
||||
static void
|
||||
@ -1990,24 +1968,12 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
g_type_init ();
|
||||
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
|
||||
AppOptions options =
|
||||
{
|
||||
.show_version = FALSE,
|
||||
.selection_watcher = -1,
|
||||
};
|
||||
|
||||
gboolean show_version = FALSE;
|
||||
GOptionEntry entries[] =
|
||||
{
|
||||
{ "version", 0, G_OPTION_FLAG_IN_MAIN,
|
||||
G_OPTION_ARG_NONE, &options.show_version,
|
||||
G_OPTION_ARG_NONE, &show_version,
|
||||
N_("Output version information and exit"), NULL },
|
||||
#ifdef WITH_GTK
|
||||
{ "watch-primary-selection", 'w',
|
||||
G_OPTION_FLAG_IN_MAIN | G_OPTION_FLAG_OPTIONAL_ARG,
|
||||
G_OPTION_ARG_CALLBACK, (gpointer) on_watch_primary_selection,
|
||||
N_("Watch the value of the primary selection for input"),
|
||||
N_("TIMER") },
|
||||
#endif // WITH_GTK
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
@ -2021,7 +1987,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
GError *error = NULL;
|
||||
GOptionContext *ctx = g_option_context_new
|
||||
(N_("[dictionary.ifo]... - StarDict terminal UI"));
|
||||
GOptionGroup *group = g_option_group_new ("", "", "", &options, NULL);
|
||||
GOptionGroup *group = g_option_group_new ("", "", "", NULL, NULL);
|
||||
g_option_group_add_entries (group, entries);
|
||||
g_option_group_set_translation_domain (group, GETTEXT_PACKAGE);
|
||||
g_option_context_add_group (ctx, group);
|
||||
@ -2034,14 +2000,14 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
}
|
||||
g_option_context_free (ctx);
|
||||
|
||||
if (options.show_version)
|
||||
if (show_version)
|
||||
{
|
||||
g_print (PROJECT_NAME " " PROJECT_VERSION "\n");
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
Application app;
|
||||
app_init (&app, &options, argv + 1);
|
||||
app_init (&app, argv + 1);
|
||||
app_init_terminal (&app);
|
||||
app_redraw (&app);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user