summaryrefslogtreecommitdiffstats
path: root/source/dialogs
diff options
context:
space:
mode:
authorDave Davenport <qball@gmpclient.org>2016-05-30 10:25:58 +0200
committerDave Davenport <qball@gmpclient.org>2016-05-30 10:25:58 +0200
commit1b5bcaa9f4a73adf07a3a4eb3c37f4f91032a417 (patch)
tree29289deedc989d79bddf5bfbc68184b4141ed40d /source/dialogs
parente84e387e9423404df028c41ffa0ad17c66a25b0e (diff)
Issue #411: Show list of Keyboard bindings with rofi, from rofi.
Diffstat (limited to 'source/dialogs')
-rw-r--r--source/dialogs/help-keys.c142
-rw-r--r--source/dialogs/window.c2
2 files changed, 143 insertions, 1 deletions
diff --git a/source/dialogs/help-keys.c b/source/dialogs/help-keys.c
new file mode 100644
index 00000000..6a633174
--- /dev/null
+++ b/source/dialogs/help-keys.c
@@ -0,0 +1,142 @@
+/**
+ * rofi
+ *
+ * MIT/X11 License
+ * Copyright 2013-2016 Qball Cow <qball@gmpclient.org>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+#include <config.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <unistd.h>
+#include <limits.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <dirent.h>
+#include <strings.h>
+#include <string.h>
+#include <errno.h>
+
+#include "rofi.h"
+#include "settings.h"
+#include "helper.h"
+#include "xrmoptions.h"
+#include "dialogs/help-keys.h"
+#include "textbox.h"
+
+typedef struct
+{
+ char **messages;
+ unsigned int messages_length;
+} KeysHelpModePrivateData;
+
+static void get_apps ( KeysHelpModePrivateData *pd )
+{
+ pd->messages = config_parser_return_display_help ( &( pd->messages_length ) );
+}
+
+static int help_keys_mode_init ( Mode *sw )
+{
+ if ( mode_get_private_data ( sw ) == NULL ) {
+ KeysHelpModePrivateData *pd = g_malloc0 ( sizeof ( *pd ) );
+ mode_set_private_data ( sw, (void *) pd );
+ get_apps ( pd );
+ }
+ return TRUE;
+}
+
+static ModeMode help_keys_mode_result ( G_GNUC_UNUSED Mode *sw,
+ int mretv,
+ G_GNUC_UNUSED char **input,
+ G_GNUC_UNUSED unsigned int selected_line )
+{
+ ModeMode retv = 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 );
+ }
+ return retv;
+}
+static void help_keys_mode_destroy ( Mode *sw )
+{
+ KeysHelpModePrivateData *rmpd = (KeysHelpModePrivateData *) mode_get_private_data ( sw );
+ if ( rmpd != NULL ) {
+ g_strfreev ( rmpd->messages );
+ g_free ( rmpd );
+ mode_set_private_data ( sw, NULL );
+ }
+}
+
+static char *_get_display_value ( const Mode *sw, unsigned int selected_line, int *state, int get_entry )
+{
+ KeysHelpModePrivateData *pd = (KeysHelpModePrivateData *) mode_get_private_data ( sw );
+ *state |= MARKUP;
+ if ( !get_entry ) {
+ return NULL;
+ }
+ return g_strdup ( pd->messages[selected_line] );
+}
+static int help_keys_token_match ( const Mode *data,
+ char **tokens,
+ int not_ascii,
+ int case_sensitive,
+ unsigned int index
+ )
+{
+ KeysHelpModePrivateData *rmpd = (KeysHelpModePrivateData *) mode_get_private_data ( data );
+ return token_match ( tokens, rmpd->messages[index], not_ascii, case_sensitive );
+}
+
+static unsigned int help_keys_mode_get_num_entries ( const Mode *sw )
+{
+ const KeysHelpModePrivateData *pd = (const KeysHelpModePrivateData *) mode_get_private_data ( sw );
+ return pd->messages_length;
+}
+static int help_keys_is_not_ascii ( const Mode *sw, unsigned int index )
+{
+ const KeysHelpModePrivateData *pd = (const KeysHelpModePrivateData *) mode_get_private_data ( sw );
+ return !g_str_is_ascii ( pd->messages[index] );
+}
+
+#include "mode-private.h"
+Mode help_keys_mode =
+{
+ .name = "keys",
+ .cfg_name_key = "display-keys",
+ ._init = help_keys_mode_init,
+ ._get_num_entries = help_keys_mode_get_num_entries,
+ ._result = help_keys_mode_result,
+ ._destroy = help_keys_mode_destroy,
+ ._token_match = help_keys_token_match,
+ ._get_completion = NULL,
+ ._get_display_value = _get_display_value,
+ ._is_not_ascii = help_keys_is_not_ascii,
+ .private_data = NULL,
+ .free = NULL
+};
diff --git a/source/dialogs/window.c b/source/dialogs/window.c
index 5e5dd63e..f228cbf7 100644
--- a/source/dialogs/window.c
+++ b/source/dialogs/window.c
@@ -534,7 +534,7 @@ static inline int act_on_window ( xcb_window_t window )
int argc = 0;
char window_str[100]; /* We are probably safe here */
- g_snprintf(window_str, sizeof window_str, "%d", window);
+ g_snprintf ( window_str, sizeof window_str, "%d", window );
helper_parse_setup ( config.window_command, &args, &argc, "{window}", window_str, NULL );