mirror of
https://github.com/davatorium/rofi.git
synced 2024-11-18 13:54:36 -05:00
First cleanup steps.
This commit is contained in:
parent
51b5511017
commit
e8daff0f6a
14 changed files with 365 additions and 255 deletions
|
@ -32,6 +32,7 @@ AM_CFLAGS=\
|
||||||
|
|
||||||
rofi_SOURCES=\
|
rofi_SOURCES=\
|
||||||
source/rofi.c\
|
source/rofi.c\
|
||||||
|
source/mode.c\
|
||||||
source/keyb.c\
|
source/keyb.c\
|
||||||
config/config.c\
|
config/config.c\
|
||||||
source/helper.c\
|
source/helper.c\
|
||||||
|
@ -50,6 +51,8 @@ rofi_SOURCES=\
|
||||||
source/dialogs/window.c\
|
source/dialogs/window.c\
|
||||||
source/dialogs/script.c\
|
source/dialogs/script.c\
|
||||||
include/rofi.h\
|
include/rofi.h\
|
||||||
|
include/mode.h\
|
||||||
|
include/mode-private.h\
|
||||||
include/settings.h\
|
include/settings.h\
|
||||||
include/keyb.h\
|
include/keyb.h\
|
||||||
include/helper.h\
|
include/helper.h\
|
||||||
|
@ -132,6 +135,8 @@ rofi_test_SOURCES=\
|
||||||
source/history.c\
|
source/history.c\
|
||||||
config/config.c\
|
config/config.c\
|
||||||
include/rofi.h\
|
include/rofi.h\
|
||||||
|
include/mode.h\
|
||||||
|
include/mode-private.h\
|
||||||
include/settings.h\
|
include/settings.h\
|
||||||
include/history.h\
|
include/history.h\
|
||||||
test/history-test.c
|
test/history-test.c
|
||||||
|
@ -145,6 +150,8 @@ textbox_test_SOURCES=\
|
||||||
source/helper.c\
|
source/helper.c\
|
||||||
include/keyb.h\
|
include/keyb.h\
|
||||||
include/rofi.h\
|
include/rofi.h\
|
||||||
|
include/mode.h\
|
||||||
|
include/mode-private.h\
|
||||||
include/settings.h\
|
include/settings.h\
|
||||||
include/textbox.h\
|
include/textbox.h\
|
||||||
include/x11-helper.h\
|
include/x11-helper.h\
|
||||||
|
@ -155,6 +162,8 @@ textbox_test_SOURCES=\
|
||||||
helper_test_SOURCES=\
|
helper_test_SOURCES=\
|
||||||
config/config.c\
|
config/config.c\
|
||||||
include/rofi.h\
|
include/rofi.h\
|
||||||
|
include/mode.h\
|
||||||
|
include/mode-private.h\
|
||||||
source/helper.c\
|
source/helper.c\
|
||||||
include/helper.h\
|
include/helper.h\
|
||||||
include/xrmoptions.h\
|
include/xrmoptions.h\
|
||||||
|
|
79
include/mode-private.h
Normal file
79
include/mode-private.h
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
#ifndef ROFI_MODE_PRIVATE_H
|
||||||
|
#define ROFI_MODE_PRIVATE_H
|
||||||
|
|
||||||
|
typedef void ( *switcher_free )( Mode *data );
|
||||||
|
|
||||||
|
typedef char * ( *switcher_get_display_value )( const Mode *sw, unsigned int selected_line, int *state, int get_entry );
|
||||||
|
|
||||||
|
typedef char * ( *switcher_get_completion )( const Mode *sw, unsigned int selected_line );
|
||||||
|
/**
|
||||||
|
* @param tokens List of (input) tokens to match.
|
||||||
|
* @param input The entry to match against.
|
||||||
|
* @param case_sensitive Whether case is significant.
|
||||||
|
* @param index The current selected index.
|
||||||
|
* @param data User data.
|
||||||
|
*
|
||||||
|
* Function prototype for the matching algorithm.
|
||||||
|
*
|
||||||
|
* @returns 1 when it matches, 0 if not.
|
||||||
|
*/
|
||||||
|
typedef int ( *switcher_token_match )( const Mode *data, char **tokens, int not_ascii, int case_sensitive, unsigned int index );
|
||||||
|
|
||||||
|
typedef void ( *__mode_init )( Mode *sw );
|
||||||
|
|
||||||
|
typedef unsigned int ( *__mode_get_num_entries )( const Mode *sw );
|
||||||
|
|
||||||
|
typedef void ( *__mode_destroy )( Mode *sw );
|
||||||
|
|
||||||
|
typedef ModeMode ( *switcher_result )( Mode *sw, int menu_retv, char **input, unsigned int selected_line );
|
||||||
|
|
||||||
|
typedef int ( *switcher_is_not_ascii )( const Mode *sw, unsigned int index );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Structure defining a switcher.
|
||||||
|
* It consists of a name, callback and if enabled
|
||||||
|
* a textbox for the sidebar-mode.
|
||||||
|
*/
|
||||||
|
struct _Mode
|
||||||
|
{
|
||||||
|
/** Name (max 31 char long) */
|
||||||
|
char name[32];
|
||||||
|
/** Keybindings (keysym and modmask) */
|
||||||
|
char * keycfg;
|
||||||
|
char * keystr;
|
||||||
|
KeySym keysym;
|
||||||
|
unsigned int modmask;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A switcher normally consists of the following parts:
|
||||||
|
*/
|
||||||
|
/** Initialize the Mode */
|
||||||
|
__mode_init _init;
|
||||||
|
/** Destroy the switcher, e.g. free all its memory. */
|
||||||
|
__mode_destroy _destroy;
|
||||||
|
/** Get number of entries to display. (unfiltered). */
|
||||||
|
__mode_get_num_entries _get_num_entries;
|
||||||
|
/** Check if the element is ascii. */
|
||||||
|
switcher_is_not_ascii is_not_ascii;
|
||||||
|
/** Process the result of the user selection. */
|
||||||
|
switcher_result result;
|
||||||
|
/** Token match. */
|
||||||
|
switcher_token_match token_match;
|
||||||
|
/** Get the string to display for the entry. */
|
||||||
|
switcher_get_display_value mgrv;
|
||||||
|
/** Get the 'completed' entry. */
|
||||||
|
switcher_get_completion get_completion;
|
||||||
|
|
||||||
|
/** Pointer to private data. */
|
||||||
|
void *private_data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Free SWitcher
|
||||||
|
* Only to be used when the switcher object itself is dynamic.
|
||||||
|
* And has data in `ed`
|
||||||
|
*/
|
||||||
|
switcher_free free;
|
||||||
|
/** Extra fields for script */
|
||||||
|
void *ed;
|
||||||
|
};
|
||||||
|
#endif // ROFI_MODE_PRIVATE_H
|
87
include/mode.h
Normal file
87
include/mode.h
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
#ifndef ROFI_MODE_H
|
||||||
|
#define ROFI_MODE_H
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @defgroup MODE Mode
|
||||||
|
*
|
||||||
|
* The 'object' that makes a mode in rofi.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
typedef struct _Mode Mode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enum used to sum the possible states of ROFI.
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
/** Exit. */
|
||||||
|
MODE_EXIT = 1000,
|
||||||
|
/** Skip to the next cycle-able dialog. */
|
||||||
|
NEXT_DIALOG = 1001,
|
||||||
|
/** Reload current DIALOG */
|
||||||
|
RELOAD_DIALOG = 1002,
|
||||||
|
/** Previous dialog */
|
||||||
|
PREVIOUS_DIALOG = 1003
|
||||||
|
} ModeMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* State returned by the rofi window.
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
/** Entry is selected. */
|
||||||
|
MENU_OK = 0x00010000,
|
||||||
|
/** User canceled the operation. (e.g. pressed escape) */
|
||||||
|
MENU_CANCEL = 0x00020000,
|
||||||
|
/** User requested a mode switch */
|
||||||
|
MENU_NEXT = 0x00040000,
|
||||||
|
/** Custom (non-matched) input was entered. */
|
||||||
|
MENU_CUSTOM_INPUT = 0x00080000,
|
||||||
|
/** User wanted to delete entry from history. */
|
||||||
|
MENU_ENTRY_DELETE = 0x00100000,
|
||||||
|
/** User wants to jump to another switcher. */
|
||||||
|
MENU_QUICK_SWITCH = 0x00200000,
|
||||||
|
/** Go to the previous menu. */
|
||||||
|
MENU_PREVIOUS = 0x00400000,
|
||||||
|
/** Modifiers */
|
||||||
|
MENU_SHIFT = 0x10000000,
|
||||||
|
/** Mask */
|
||||||
|
MENU_LOWER_MASK = 0x0000FFFF
|
||||||
|
} MenuReturn;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mode The mode to initialize
|
||||||
|
*
|
||||||
|
* Initialize mode
|
||||||
|
*/
|
||||||
|
void mode_init ( Mode *mode );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mode The mode to destroy
|
||||||
|
*
|
||||||
|
* Destroy the mode
|
||||||
|
*/
|
||||||
|
void mode_destroy ( Mode *mode );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mode The mode to query
|
||||||
|
*
|
||||||
|
* Get the number of entries in the mode.
|
||||||
|
*
|
||||||
|
* @returns an unsigned in with the number of entries.
|
||||||
|
*/
|
||||||
|
unsigned int mode_get_num_entries ( const Mode *sw );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mode The mode to query
|
||||||
|
* @param selected_line The entry to query
|
||||||
|
* @param state The state of the entry [out]
|
||||||
|
* @param get_entry If the should be returned.
|
||||||
|
*
|
||||||
|
* Returns the string as it should be displayed for the entry and the state of how it should be displayed.
|
||||||
|
*
|
||||||
|
* @returns allocated new string and state when get_entry is TRUE otherwise just the state.
|
||||||
|
*/
|
||||||
|
char * mode_get_display_value ( const Mode *mode, unsigned int selected_line, int *state, int get_entry );
|
||||||
|
/*@}*/
|
||||||
|
#endif
|
142
include/rofi.h
142
include/rofi.h
|
@ -9,6 +9,7 @@
|
||||||
#include <cairo-xlib.h>
|
#include <cairo-xlib.h>
|
||||||
#include "timings.h"
|
#include "timings.h"
|
||||||
#include "keyb.h"
|
#include "keyb.h"
|
||||||
|
#include "mode.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @defgroup Widgets Widgets
|
* @defgroup Widgets Widgets
|
||||||
|
@ -23,53 +24,13 @@
|
||||||
*/
|
*/
|
||||||
extern const char *cache_dir;
|
extern const char *cache_dir;
|
||||||
|
|
||||||
typedef struct _Mode Mode;
|
|
||||||
/**
|
/**
|
||||||
* Enum used to sum the possible states of ROFI.
|
* @param msg The error message to show.
|
||||||
*/
|
* @param markup The error message uses pango markup.
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
/** Exit. */
|
|
||||||
MODE_EXIT = 1000,
|
|
||||||
/** Skip to the next cycle-able dialog. */
|
|
||||||
NEXT_DIALOG = 1001,
|
|
||||||
/** Reload current DIALOG */
|
|
||||||
RELOAD_DIALOG = 1002,
|
|
||||||
/** Previous dialog */
|
|
||||||
PREVIOUS_DIALOG = 1003
|
|
||||||
} ModeMode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* State returned by the rofi window.
|
|
||||||
*/
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
/** Entry is selected. */
|
|
||||||
MENU_OK = 0x00010000,
|
|
||||||
/** User canceled the operation. (e.g. pressed escape) */
|
|
||||||
MENU_CANCEL = 0x00020000,
|
|
||||||
/** User requested a mode switch */
|
|
||||||
MENU_NEXT = 0x00040000,
|
|
||||||
/** Custom (non-matched) input was entered. */
|
|
||||||
MENU_CUSTOM_INPUT = 0x00080000,
|
|
||||||
/** User wanted to delete entry from history. */
|
|
||||||
MENU_ENTRY_DELETE = 0x00100000,
|
|
||||||
/** User wants to jump to another switcher. */
|
|
||||||
MENU_QUICK_SWITCH = 0x00200000,
|
|
||||||
/** Go to the previous menu. */
|
|
||||||
MENU_PREVIOUS = 0x00400000,
|
|
||||||
/** Modifiers */
|
|
||||||
MENU_SHIFT = 0x10000000,
|
|
||||||
/** Mask */
|
|
||||||
MENU_LOWER_MASK = 0x0000FFFF
|
|
||||||
} MenuReturn;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param sig The caught signal
|
|
||||||
*
|
*
|
||||||
* Catch the exit signal generated by X.
|
* The error message to show.
|
||||||
*/
|
*/
|
||||||
void catch_exit ( __attribute__( ( unused ) ) int sig );
|
void error_dialog ( const char *msg, int markup );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param sw the Mode to show.
|
* @param sw the Mode to show.
|
||||||
|
@ -90,90 +51,6 @@ void catch_exit ( __attribute__( ( unused ) ) int sig );
|
||||||
MenuReturn menu ( Mode *sw, char **input, char *prompt, unsigned int *selected_line, unsigned int *next_pos, const char *message )
|
MenuReturn menu ( Mode *sw, char **input, char *prompt, unsigned int *selected_line, unsigned int *next_pos, const char *message )
|
||||||
__attribute__ ( ( nonnull ( 1, 2, 3, 4 ) ) );
|
__attribute__ ( ( nonnull ( 1, 2, 3, 4 ) ) );
|
||||||
|
|
||||||
/**
|
|
||||||
* @param msg The error message to show.
|
|
||||||
* @param markup The error message uses pango markup.
|
|
||||||
*
|
|
||||||
* The error message to show.
|
|
||||||
*/
|
|
||||||
void error_dialog ( const char *msg, int markup );
|
|
||||||
|
|
||||||
typedef void ( *switcher_free )( Mode *data );
|
|
||||||
|
|
||||||
typedef char * ( *switcher_get_display_value )( const Mode *sw, unsigned int selected_line, int *state, int get_entry );
|
|
||||||
|
|
||||||
typedef char * ( *switcher_get_completion )( const Mode *sw, unsigned int selected_line );
|
|
||||||
/**
|
|
||||||
* @param tokens List of (input) tokens to match.
|
|
||||||
* @param input The entry to match against.
|
|
||||||
* @param case_sensitive Whether case is significant.
|
|
||||||
* @param index The current selected index.
|
|
||||||
* @param data User data.
|
|
||||||
*
|
|
||||||
* Function prototype for the matching algorithm.
|
|
||||||
*
|
|
||||||
* @returns 1 when it matches, 0 if not.
|
|
||||||
*/
|
|
||||||
typedef int ( *switcher_token_match )( const Mode *data, char **tokens, int not_ascii, int case_sensitive, unsigned int index );
|
|
||||||
|
|
||||||
typedef void ( *switcher_init )( Mode *sw );
|
|
||||||
|
|
||||||
typedef unsigned int ( *switcher_get_num_entries )( const Mode *sw );
|
|
||||||
|
|
||||||
typedef void ( *switcher_destroy )( Mode *sw );
|
|
||||||
|
|
||||||
typedef ModeMode ( *switcher_result )( Mode *sw, int menu_retv, char **input, unsigned int selected_line );
|
|
||||||
|
|
||||||
typedef int ( *switcher_is_not_ascii )( const Mode *sw, unsigned int index );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Structure defining a switcher.
|
|
||||||
* It consists of a name, callback and if enabled
|
|
||||||
* a textbox for the sidebar-mode.
|
|
||||||
*/
|
|
||||||
struct _Mode
|
|
||||||
{
|
|
||||||
/** Name (max 31 char long) */
|
|
||||||
char name[32];
|
|
||||||
/** Keybindings (keysym and modmask) */
|
|
||||||
char * keycfg;
|
|
||||||
char * keystr;
|
|
||||||
KeySym keysym;
|
|
||||||
unsigned int modmask;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A switcher normally consists of the following parts:
|
|
||||||
*/
|
|
||||||
/** Initialize the Mode */
|
|
||||||
switcher_init init;
|
|
||||||
/** Destroy the switcher, e.g. free all its memory. */
|
|
||||||
switcher_destroy destroy;
|
|
||||||
/** Get number of entries to display. (unfiltered). */
|
|
||||||
switcher_get_num_entries get_num_entries;
|
|
||||||
/** Check if the element is ascii. */
|
|
||||||
switcher_is_not_ascii is_not_ascii;
|
|
||||||
/** Process the result of the user selection. */
|
|
||||||
switcher_result result;
|
|
||||||
/** Token match. */
|
|
||||||
switcher_token_match token_match;
|
|
||||||
/** Get the string to display for the entry. */
|
|
||||||
switcher_get_display_value mgrv;
|
|
||||||
/** Get the 'completed' entry. */
|
|
||||||
switcher_get_completion get_completion;
|
|
||||||
|
|
||||||
/** Pointer to private data. */
|
|
||||||
void *private_data;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Free SWitcher
|
|
||||||
* Only to be used when the switcher object itself is dynamic.
|
|
||||||
* And has data in `ed`
|
|
||||||
*/
|
|
||||||
switcher_free free;
|
|
||||||
/** Extra fields for script */
|
|
||||||
void *ed;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Reset terminal */
|
/** Reset terminal */
|
||||||
#define color_reset "\033[0m"
|
#define color_reset "\033[0m"
|
||||||
/** Set terminal text bold */
|
/** Set terminal text bold */
|
||||||
|
@ -182,6 +59,15 @@ struct _Mode
|
||||||
#define color_italic "\033[2m"
|
#define color_italic "\033[2m"
|
||||||
/** Set terminal foreground text green */
|
/** Set terminal foreground text green */
|
||||||
#define color_green "\033[0;32m"
|
#define color_green "\033[0;32m"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param msg The error message to show.
|
||||||
|
* @param markup If the message contains pango markup.
|
||||||
|
*
|
||||||
|
* Create a dialog showing the msg.
|
||||||
|
*
|
||||||
|
* @returns EXIT_FAILURE if failed to create dialog, EXIT_SUCCESS if succesfull
|
||||||
|
*/
|
||||||
int show_error_message ( const char *msg, int markup );
|
int show_error_message ( const char *msg, int markup );
|
||||||
/*@}*/
|
/*@}*/
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -39,14 +39,14 @@ typedef struct
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TB_AUTOHEIGHT = 1 << 0,
|
TB_AUTOHEIGHT = 1 << 0,
|
||||||
TB_AUTOWIDTH = 1 << 1,
|
TB_AUTOWIDTH = 1 << 1,
|
||||||
TB_LEFT = 1 << 16,
|
TB_LEFT = 1 << 16,
|
||||||
TB_RIGHT = 1 << 17,
|
TB_RIGHT = 1 << 17,
|
||||||
TB_CENTER = 1 << 18,
|
TB_CENTER = 1 << 18,
|
||||||
TB_EDITABLE = 1 << 19,
|
TB_EDITABLE = 1 << 19,
|
||||||
TB_MARKUP = 1 << 20,
|
TB_MARKUP = 1 << 20,
|
||||||
TB_WRAP = 1 << 21,
|
TB_WRAP = 1 << 21,
|
||||||
} TextboxFlags;
|
} TextboxFlags;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
|
|
||||||
#include <dialogs/dialogs.h>
|
#include <dialogs/dialogs.h>
|
||||||
|
|
||||||
|
#include "mode-private.h"
|
||||||
/**
|
/**
|
||||||
* Combi Mode
|
* Combi Mode
|
||||||
*/
|
*/
|
||||||
|
@ -108,12 +109,12 @@ static void combi_mode_init ( Mode *sw )
|
||||||
pd->starts = g_malloc0 ( sizeof ( int ) * pd->num_switchers );
|
pd->starts = g_malloc0 ( sizeof ( int ) * pd->num_switchers );
|
||||||
pd->lengths = g_malloc0 ( sizeof ( int ) * pd->num_switchers );
|
pd->lengths = g_malloc0 ( sizeof ( int ) * pd->num_switchers );
|
||||||
for ( unsigned int i = 0; i < pd->num_switchers; i++ ) {
|
for ( unsigned int i = 0; i < pd->num_switchers; i++ ) {
|
||||||
pd->switchers[i]->init ( pd->switchers[i] );
|
mode_init ( pd->switchers[i] );
|
||||||
}
|
}
|
||||||
if ( pd->cmd_list_length == 0 ) {
|
if ( pd->cmd_list_length == 0 ) {
|
||||||
pd->cmd_list_length = 0;
|
pd->cmd_list_length = 0;
|
||||||
for ( unsigned int i = 0; i < pd->num_switchers; i++ ) {
|
for ( unsigned int i = 0; i < pd->num_switchers; i++ ) {
|
||||||
unsigned int length = pd->switchers[i]->get_num_entries ( pd->switchers[i] );;
|
unsigned int length = mode_get_num_entries ( pd->switchers[i] );
|
||||||
pd->starts[i] = pd->cmd_list_length;
|
pd->starts[i] = pd->cmd_list_length;
|
||||||
pd->lengths[i] = length;
|
pd->lengths[i] = length;
|
||||||
pd->cmd_list_length += length;
|
pd->cmd_list_length += length;
|
||||||
|
@ -134,7 +135,7 @@ static void combi_mode_destroy ( Mode *sw )
|
||||||
g_free ( pd->lengths );
|
g_free ( pd->lengths );
|
||||||
// Cleanup switchers.
|
// Cleanup switchers.
|
||||||
for ( unsigned int i = 0; i < pd->num_switchers; i++ ) {
|
for ( unsigned int i = 0; i < pd->num_switchers; i++ ) {
|
||||||
pd->switchers[i]->destroy ( pd->switchers[i] );
|
mode_destroy ( pd->switchers[i] );
|
||||||
}
|
}
|
||||||
g_free ( pd->switchers );
|
g_free ( pd->switchers );
|
||||||
g_free ( pd );
|
g_free ( pd );
|
||||||
|
@ -260,18 +261,18 @@ static char * combi_get_completion ( const Mode *sw, unsigned int index )
|
||||||
|
|
||||||
Mode combi_mode =
|
Mode combi_mode =
|
||||||
{
|
{
|
||||||
.name = "combi",
|
.name = "combi",
|
||||||
.keycfg = NULL,
|
.keycfg = NULL,
|
||||||
.keystr = NULL,
|
.keystr = NULL,
|
||||||
.modmask = AnyModifier,
|
.modmask = AnyModifier,
|
||||||
.init = combi_mode_init,
|
._init = combi_mode_init,
|
||||||
.get_num_entries = combi_mode_get_num_entries,
|
._get_num_entries = combi_mode_get_num_entries,
|
||||||
.result = combi_mode_result,
|
.result = combi_mode_result,
|
||||||
.destroy = combi_mode_destroy,
|
._destroy = combi_mode_destroy,
|
||||||
.token_match = combi_mode_match,
|
.token_match = combi_mode_match,
|
||||||
.get_completion = combi_get_completion,
|
.get_completion = combi_get_completion,
|
||||||
.mgrv = combi_mgrv,
|
.mgrv = combi_mgrv,
|
||||||
.is_not_ascii = combi_is_not_ascii,
|
.is_not_ascii = combi_is_not_ascii,
|
||||||
.private_data = NULL,
|
.private_data = NULL,
|
||||||
.free = NULL
|
.free = NULL
|
||||||
};
|
};
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include "helper.h"
|
#include "helper.h"
|
||||||
#include "xrmoptions.h"
|
#include "xrmoptions.h"
|
||||||
|
|
||||||
|
#include "mode-private.h"
|
||||||
// We limit at 1000000 rows for now.
|
// We limit at 1000000 rows for now.
|
||||||
#define DMENU_MAX_ROWS 1000000
|
#define DMENU_MAX_ROWS 1000000
|
||||||
|
|
||||||
|
@ -326,25 +327,25 @@ static int dmenu_is_not_ascii ( const Mode *sw, unsigned int index )
|
||||||
|
|
||||||
Mode dmenu_mode =
|
Mode dmenu_mode =
|
||||||
{
|
{
|
||||||
.name = "dmenu",
|
.name = "dmenu",
|
||||||
.keycfg = NULL,
|
.keycfg = NULL,
|
||||||
.keystr = NULL,
|
.keystr = NULL,
|
||||||
.modmask = AnyModifier,
|
.modmask = AnyModifier,
|
||||||
.init = dmenu_mode_init,
|
._init = dmenu_mode_init,
|
||||||
.get_num_entries = dmenu_mode_get_num_entries,
|
._get_num_entries = dmenu_mode_get_num_entries,
|
||||||
.result = NULL,
|
.result = NULL,
|
||||||
.destroy = dmenu_mode_free,
|
._destroy = dmenu_mode_free,
|
||||||
.token_match = dmenu_token_match,
|
.token_match = dmenu_token_match,
|
||||||
.mgrv = get_display_data,
|
.mgrv = get_display_data,
|
||||||
.get_completion = NULL,
|
.get_completion = NULL,
|
||||||
.is_not_ascii = dmenu_is_not_ascii,
|
.is_not_ascii = dmenu_is_not_ascii,
|
||||||
.private_data = NULL,
|
.private_data = NULL,
|
||||||
.free = NULL
|
.free = NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
int dmenu_switcher_dialog ( void )
|
int dmenu_switcher_dialog ( void )
|
||||||
{
|
{
|
||||||
dmenu_mode.init ( &dmenu_mode );
|
mode_init ( &dmenu_mode );
|
||||||
DmenuModePrivateData *pd = (DmenuModePrivateData *) dmenu_mode.private_data;
|
DmenuModePrivateData *pd = (DmenuModePrivateData *) dmenu_mode.private_data;
|
||||||
char *input = NULL;
|
char *input = NULL;
|
||||||
int retv = FALSE;
|
int retv = FALSE;
|
||||||
|
@ -468,7 +469,7 @@ int dmenu_switcher_dialog ( void )
|
||||||
} while ( restart );
|
} while ( restart );
|
||||||
|
|
||||||
g_free ( input );
|
g_free ( input );
|
||||||
dmenu_mode.destroy ( &dmenu_mode );
|
mode_destroy ( &dmenu_mode );
|
||||||
return retv;
|
return retv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,8 @@
|
||||||
#include "helper.h"
|
#include "helper.h"
|
||||||
#include "dialogs/drun.h"
|
#include "dialogs/drun.h"
|
||||||
|
|
||||||
|
#include "mode-private.h"
|
||||||
|
|
||||||
#define RUN_CACHE_FILE "rofi-2.runcache"
|
#define RUN_CACHE_FILE "rofi-2.runcache"
|
||||||
|
|
||||||
static inline int execsh ( const char *cmd, int run_in_term )
|
static inline int execsh ( const char *cmd, int run_in_term )
|
||||||
|
@ -359,18 +361,18 @@ static int drun_is_not_ascii ( const Mode *sw, unsigned int index )
|
||||||
|
|
||||||
Mode drun_mode =
|
Mode drun_mode =
|
||||||
{
|
{
|
||||||
.name = "drun",
|
.name = "drun",
|
||||||
.keycfg = NULL,
|
.keycfg = NULL,
|
||||||
.keystr = NULL,
|
.keystr = NULL,
|
||||||
.modmask = AnyModifier,
|
.modmask = AnyModifier,
|
||||||
.init = drun_mode_init,
|
._init = drun_mode_init,
|
||||||
.get_num_entries = drun_mode_get_num_entries,
|
._get_num_entries = drun_mode_get_num_entries,
|
||||||
.result = drun_mode_result,
|
.result = drun_mode_result,
|
||||||
.destroy = drun_mode_destroy,
|
._destroy = drun_mode_destroy,
|
||||||
.token_match = drun_token_match,
|
.token_match = drun_token_match,
|
||||||
.get_completion = drun_get_completion,
|
.get_completion = drun_get_completion,
|
||||||
.mgrv = mgrv,
|
.mgrv = mgrv,
|
||||||
.is_not_ascii = drun_is_not_ascii,
|
.is_not_ascii = drun_is_not_ascii,
|
||||||
.private_data = NULL,
|
.private_data = NULL,
|
||||||
.free = NULL
|
.free = NULL
|
||||||
};
|
};
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
#include "dialogs/run.h"
|
#include "dialogs/run.h"
|
||||||
|
|
||||||
|
#include "mode-private.h"
|
||||||
/**
|
/**
|
||||||
* Name of the history file where previously choosen commands are stored.
|
* Name of the history file where previously choosen commands are stored.
|
||||||
*/
|
*/
|
||||||
|
@ -380,19 +381,19 @@ static int run_is_not_ascii ( const Mode *sw, unsigned int index )
|
||||||
}
|
}
|
||||||
Mode run_mode =
|
Mode run_mode =
|
||||||
{
|
{
|
||||||
.name = "run",
|
.name = "run",
|
||||||
.keycfg = NULL,
|
.keycfg = NULL,
|
||||||
.keystr = NULL,
|
.keystr = NULL,
|
||||||
.modmask = AnyModifier,
|
.modmask = AnyModifier,
|
||||||
.init = run_mode_init,
|
._init = run_mode_init,
|
||||||
.get_num_entries = run_mode_get_num_entries,
|
._get_num_entries = run_mode_get_num_entries,
|
||||||
.result = run_mode_result,
|
.result = run_mode_result,
|
||||||
.destroy = run_mode_destroy,
|
._destroy = run_mode_destroy,
|
||||||
.token_match = run_token_match,
|
.token_match = run_token_match,
|
||||||
.mgrv = mgrv,
|
.mgrv = mgrv,
|
||||||
.get_completion = NULL,
|
.get_completion = NULL,
|
||||||
.is_not_ascii = run_is_not_ascii,
|
.is_not_ascii = run_is_not_ascii,
|
||||||
.private_data = NULL,
|
.private_data = NULL,
|
||||||
.free = NULL
|
.free = NULL
|
||||||
};
|
};
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "dialogs/script.h"
|
#include "dialogs/script.h"
|
||||||
#include "helper.h"
|
#include "helper.h"
|
||||||
|
|
||||||
|
#include "mode-private.h"
|
||||||
static char **get_script_output ( const char *command, unsigned int *length )
|
static char **get_script_output ( const char *command, unsigned int *length )
|
||||||
{
|
{
|
||||||
char **retv = NULL;
|
char **retv = NULL;
|
||||||
|
@ -191,17 +192,17 @@ Mode *script_switcher_parse_setup ( const char *str )
|
||||||
}
|
}
|
||||||
g_free ( parse );
|
g_free ( parse );
|
||||||
if ( index == 2 ) {
|
if ( index == 2 ) {
|
||||||
sw->free = script_switcher_free;
|
sw->free = script_switcher_free;
|
||||||
sw->keysym = None;
|
sw->keysym = None;
|
||||||
sw->modmask = AnyModifier;
|
sw->modmask = AnyModifier;
|
||||||
sw->init = script_mode_init;
|
sw->_init = script_mode_init;
|
||||||
sw->get_num_entries = script_mode_get_num_entries;
|
sw->_get_num_entries = script_mode_get_num_entries;
|
||||||
sw->result = script_mode_result;
|
sw->result = script_mode_result;
|
||||||
sw->destroy = script_mode_destroy;
|
sw->_destroy = script_mode_destroy;
|
||||||
sw->token_match = script_token_match;
|
sw->token_match = script_token_match;
|
||||||
sw->get_completion = NULL,
|
sw->get_completion = NULL,
|
||||||
sw->mgrv = mgrv;
|
sw->mgrv = mgrv;
|
||||||
sw->is_not_ascii = script_is_not_ascii;
|
sw->is_not_ascii = script_is_not_ascii;
|
||||||
|
|
||||||
return sw;
|
return sw;
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
#include "dialogs/ssh.h"
|
#include "dialogs/ssh.h"
|
||||||
|
|
||||||
|
#include "mode-private.h"
|
||||||
/**
|
/**
|
||||||
* Name of the history file where previously choosen hosts are stored.
|
* Name of the history file where previously choosen hosts are stored.
|
||||||
*/
|
*/
|
||||||
|
@ -489,19 +490,19 @@ static int ssh_is_not_ascii ( const Mode *sw, unsigned int index )
|
||||||
|
|
||||||
Mode ssh_mode =
|
Mode ssh_mode =
|
||||||
{
|
{
|
||||||
.name = "ssh",
|
.name = "ssh",
|
||||||
.keycfg = NULL,
|
.keycfg = NULL,
|
||||||
.keystr = NULL,
|
.keystr = NULL,
|
||||||
.modmask = AnyModifier,
|
.modmask = AnyModifier,
|
||||||
.init = ssh_mode_init,
|
._init = ssh_mode_init,
|
||||||
.get_num_entries = ssh_mode_get_num_entries,
|
._get_num_entries = ssh_mode_get_num_entries,
|
||||||
.result = ssh_mode_result,
|
.result = ssh_mode_result,
|
||||||
.destroy = ssh_mode_destroy,
|
._destroy = ssh_mode_destroy,
|
||||||
.token_match = ssh_token_match,
|
.token_match = ssh_token_match,
|
||||||
.mgrv = mgrv,
|
.mgrv = mgrv,
|
||||||
.get_completion = NULL,
|
.get_completion = NULL,
|
||||||
.is_not_ascii = ssh_is_not_ascii,
|
.is_not_ascii = ssh_is_not_ascii,
|
||||||
.private_data = NULL,
|
.private_data = NULL,
|
||||||
.free = NULL
|
.free = NULL
|
||||||
};
|
};
|
||||||
/*@}*/
|
/*@}*/
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include "x11-helper.h"
|
#include "x11-helper.h"
|
||||||
#include "i3-support.h"
|
#include "i3-support.h"
|
||||||
#include "dialogs/window.h"
|
#include "dialogs/window.h"
|
||||||
|
#include "mode-private.h"
|
||||||
|
|
||||||
#define WINLIST 32
|
#define WINLIST 32
|
||||||
|
|
||||||
|
@ -585,37 +586,37 @@ static int window_is_not_ascii ( const Mode *sw, unsigned int index )
|
||||||
|
|
||||||
Mode window_mode =
|
Mode window_mode =
|
||||||
{
|
{
|
||||||
.name = "window",
|
.name = "window",
|
||||||
.keycfg = NULL,
|
.keycfg = NULL,
|
||||||
.keystr = NULL,
|
.keystr = NULL,
|
||||||
.modmask = AnyModifier,
|
.modmask = AnyModifier,
|
||||||
.init = window_mode_init,
|
._init = window_mode_init,
|
||||||
.get_num_entries = window_mode_get_num_entries,
|
._get_num_entries = window_mode_get_num_entries,
|
||||||
.result = window_mode_result,
|
.result = window_mode_result,
|
||||||
.destroy = window_mode_destroy,
|
._destroy = window_mode_destroy,
|
||||||
.token_match = window_match,
|
.token_match = window_match,
|
||||||
.mgrv = mgrv,
|
.mgrv = mgrv,
|
||||||
.get_completion = NULL,
|
.get_completion = NULL,
|
||||||
.is_not_ascii = window_is_not_ascii,
|
.is_not_ascii = window_is_not_ascii,
|
||||||
.private_data = NULL,
|
.private_data = NULL,
|
||||||
.free = NULL
|
.free = NULL
|
||||||
};
|
};
|
||||||
Mode window_mode_cd =
|
Mode window_mode_cd =
|
||||||
{
|
{
|
||||||
.name = "windowcd",
|
.name = "windowcd",
|
||||||
.keycfg = NULL,
|
.keycfg = NULL,
|
||||||
.keystr = NULL,
|
.keystr = NULL,
|
||||||
.modmask = AnyModifier,
|
.modmask = AnyModifier,
|
||||||
.init = window_mode_init_cd,
|
._init = window_mode_init_cd,
|
||||||
.get_num_entries = window_mode_get_num_entries,
|
._get_num_entries = window_mode_get_num_entries,
|
||||||
.result = window_mode_result,
|
.result = window_mode_result,
|
||||||
.destroy = window_mode_destroy,
|
._destroy = window_mode_destroy,
|
||||||
.token_match = window_match,
|
.token_match = window_match,
|
||||||
.mgrv = mgrv,
|
.mgrv = mgrv,
|
||||||
.get_completion = NULL,
|
.get_completion = NULL,
|
||||||
.is_not_ascii = window_is_not_ascii,
|
.is_not_ascii = window_is_not_ascii,
|
||||||
.private_data = NULL,
|
.private_data = NULL,
|
||||||
.free = NULL
|
.free = NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // WINDOW_MODE
|
#endif // WINDOW_MODE
|
||||||
|
|
39
source/mode.c
Normal file
39
source/mode.c
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#include "rofi.h"
|
||||||
|
#include "mode.h"
|
||||||
|
|
||||||
|
// This one should only be in mode implementations.
|
||||||
|
#include "mode-private.h"
|
||||||
|
/**
|
||||||
|
* @ingroup MODE
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
void mode_init ( Mode *mode )
|
||||||
|
{
|
||||||
|
g_assert ( mode != NULL );
|
||||||
|
g_assert ( mode->_init != NULL );
|
||||||
|
mode->_init ( mode );
|
||||||
|
}
|
||||||
|
|
||||||
|
void mode_destroy ( Mode *mode )
|
||||||
|
{
|
||||||
|
g_assert ( mode != NULL );
|
||||||
|
g_assert ( mode->_destroy != NULL );
|
||||||
|
mode->_destroy ( mode );
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int mode_get_num_entries ( const Mode *mode )
|
||||||
|
{
|
||||||
|
g_assert ( mode != NULL );
|
||||||
|
g_assert ( mode->_get_num_entries != NULL );
|
||||||
|
return mode->_get_num_entries ( mode );
|
||||||
|
}
|
||||||
|
|
||||||
|
char * mode_get_display_value ( const Mode *mode, unsigned int selected_line, int *state, int get_entry )
|
||||||
|
{
|
||||||
|
g_assert ( mode != NULL );
|
||||||
|
g_assert ( mode->mgrv != NULL );
|
||||||
|
|
||||||
|
return mode->mgrv ( mode, selected_line, state, get_entry );
|
||||||
|
}
|
||||||
|
/*@}*/
|
|
@ -60,6 +60,8 @@
|
||||||
#include "xrmoptions.h"
|
#include "xrmoptions.h"
|
||||||
#include "dialogs/dialogs.h"
|
#include "dialogs/dialogs.h"
|
||||||
|
|
||||||
|
// This one should only be in mode implementations.
|
||||||
|
#include "mode-private.h"
|
||||||
ModeMode switcher_run ( char **input, Mode *sw );
|
ModeMode switcher_run ( char **input, Mode *sw );
|
||||||
|
|
||||||
typedef enum _MainLoopEvent
|
typedef enum _MainLoopEvent
|
||||||
|
@ -1018,7 +1020,7 @@ static void menu_draw ( MenuState *state, cairo_t *d )
|
||||||
{
|
{
|
||||||
TextBoxFontType type = ( ( ( i % state->max_rows ) & 1 ) == 0 ) ? NORMAL : ALT;
|
TextBoxFontType type = ( ( ( i % state->max_rows ) & 1 ) == 0 ) ? NORMAL : ALT;
|
||||||
int fstate = 0;
|
int fstate = 0;
|
||||||
char *text = state->sw->mgrv ( state->sw, state->line_map[i + offset], &fstate, TRUE );
|
char *text = mode_get_display_value ( state->sw, state->line_map[i + offset], &fstate, TRUE );
|
||||||
TextBoxFontType tbft = fstate | ( ( i + offset ) == state->selected ? HIGHLIGHT : type );
|
TextBoxFontType tbft = fstate | ( ( i + offset ) == state->selected ? HIGHLIGHT : type );
|
||||||
textbox_font ( state->boxes[i], tbft );
|
textbox_font ( state->boxes[i], tbft );
|
||||||
textbox_text ( state->boxes[i], text );
|
textbox_text ( state->boxes[i], text );
|
||||||
|
@ -1033,7 +1035,7 @@ static void menu_draw ( MenuState *state, cairo_t *d )
|
||||||
for ( i = 0; i < max_elements; i++ ) {
|
for ( i = 0; i < max_elements; i++ ) {
|
||||||
TextBoxFontType type = ( ( ( i % state->max_rows ) & 1 ) == 0 ) ? NORMAL : ALT;
|
TextBoxFontType type = ( ( ( i % state->max_rows ) & 1 ) == 0 ) ? NORMAL : ALT;
|
||||||
int fstate = 0;
|
int fstate = 0;
|
||||||
state->sw->mgrv ( state->sw, state->line_map[i + offset], &fstate, FALSE );
|
mode_get_display_value ( state->sw, state->line_map[i + offset], &fstate, FALSE );
|
||||||
TextBoxFontType tbft = fstate | ( ( i + offset ) == state->selected ? HIGHLIGHT : type );
|
TextBoxFontType tbft = fstate | ( ( i + offset ) == state->selected ? HIGHLIGHT : type );
|
||||||
textbox_font ( state->boxes[i], tbft );
|
textbox_font ( state->boxes[i], tbft );
|
||||||
textbox_draw ( state->boxes[i], d );
|
textbox_draw ( state->boxes[i], d );
|
||||||
|
@ -1274,7 +1276,7 @@ MenuReturn menu ( Mode *sw, char **input, char *prompt, unsigned int *selected_l
|
||||||
.border = config.padding + config.menu_bw
|
.border = config.padding + config.menu_bw
|
||||||
};
|
};
|
||||||
// Request the lines to show.
|
// Request the lines to show.
|
||||||
state.num_lines = sw->get_num_entries ( sw );
|
state.num_lines = mode_get_num_entries ( sw );
|
||||||
state.lines_not_ascii = g_malloc0_n ( state.num_lines, sizeof ( int ) );
|
state.lines_not_ascii = g_malloc0_n ( state.num_lines, sizeof ( int ) );
|
||||||
|
|
||||||
// find out which lines contain non-ascii codepoints, so we can be faster in some cases.
|
// find out which lines contain non-ascii codepoints, so we can be faster in some cases.
|
||||||
|
@ -1887,7 +1889,7 @@ static void run_switcher ( ModeMode mode )
|
||||||
// Otherwise check if requested mode is enabled.
|
// Otherwise check if requested mode is enabled.
|
||||||
char *input = g_strdup ( config.filter );
|
char *input = g_strdup ( config.filter );
|
||||||
for ( unsigned int i = 0; i < num_modi; i++ ) {
|
for ( unsigned int i = 0; i < num_modi; i++ ) {
|
||||||
modi[i].sw->init ( modi[i].sw );
|
mode_init ( modi[i].sw );
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
ModeMode retv;
|
ModeMode retv;
|
||||||
|
@ -1918,7 +1920,7 @@ static void run_switcher ( ModeMode mode )
|
||||||
} while ( mode != MODE_EXIT );
|
} while ( mode != MODE_EXIT );
|
||||||
g_free ( input );
|
g_free ( input );
|
||||||
for ( unsigned int i = 0; i < num_modi; i++ ) {
|
for ( unsigned int i = 0; i < num_modi; i++ ) {
|
||||||
modi[i].sw->destroy ( modi[i].sw );
|
mode_destroy ( modi[i].sw );
|
||||||
}
|
}
|
||||||
// cleanup
|
// cleanup
|
||||||
teardown ( pfd );
|
teardown ( pfd );
|
||||||
|
|
Loading…
Reference in a new issue