summaryrefslogtreecommitdiff
path: root/src/command.h
blob: d21f81fe444c5b592409a0d56c01c59e4a78a544 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/** Copyright 2011-2013 Thorsten Wißmann. All rights reserved.
 *
 * This software is licensed under the "Simplified BSD License".
 * See LICENSE for details */

#ifndef __HERBSTLUFT_COMMAND_H_
#define __HERBSTLUFT_COMMAND_H_

#include "glib-backports.h"
#include <stdbool.h>

typedef int (*HerbstCmd)(int argc,      // number of arguments
                         const char** argv,   // array of args
                         GString* output  // result-data/stdout
                        );
typedef int (*HerbstCmdNoOutput)(int argc,  // number of arguments
                         const char** argv        // array of args
                        );

#define CMD_BIND(NAME, FUNC) \
    { CommandBindingCB(FUNC), (NAME), 1 }
#define CMD_BIND_NO_OUTPUT(NAME, FUNC) \
    { CommandBindingCB(FUNC), (NAME), 0 }

union CommandBindingCB {
    HerbstCmd standard;
    HerbstCmdNoOutput no_output;
    CommandBindingCB() : standard(NULL) { };
    CommandBindingCB(HerbstCmd x) : standard(x) { };
    CommandBindingCB(int (*x)(int,char**,GString*)) : standard((HerbstCmd)x) { };
    CommandBindingCB(HerbstCmdNoOutput x) : no_output(x) { };
    CommandBindingCB(int (*x)(int,char**)) : no_output((HerbstCmdNoOutput)x) { };
    CommandBindingCB(int (*x)()) : no_output((HerbstCmdNoOutput)x) { };
};

typedef struct CommandBinding {
    CommandBindingCB cmd;
    const char* name;
    bool        has_output;
} CommandBinding;

extern CommandBinding g_commands[];

int call_command(int argc, char** argv, GString* output);
int call_command_no_output(int argc, char** argv);
int call_command_substitute(char* needle, char* replacement,
                            int argc, char** argv, GString* output);

// commands
int list_commands(int argc, char** argv, GString* output);
int complete_command(int argc, char** argv, GString* output);

void try_complete(const char* needle, const char* to_check, GString* output);
void try_complete_partial(const char* needle, const char* to_check, GString* output);
void try_complete_prefix_partial(const char* needle, const char* to_check,
                                 const char* prefix, GString* output);
void try_complete_prefix(const char* needle, const char* to_check,
                         const char* prefix, GString* output);

void complete_settings(char* str, GString* output);
void complete_against_list(char* needle, char** list, GString* output);
void complete_against_tags(int argc, char** argv, int pos, GString* output);
void complete_against_monitors(int argc, char** argv, int pos, GString* output);
void complete_against_objects(int argc, char** argv, int pos, GString* output);
void complete_against_attributes(int argc, char** argv, int pos, GString* output);
void complete_against_user_attributes(int argc, char** argv, int pos, GString* output);
void complete_against_attribute_values(int argc, char** argv, int pos, GString* output);
void complete_against_comparators(int argc, char** argv, int pos, GString* output);
void complete_against_winids(int argc, char** argv, int pos, GString* output);
void complete_merge_tag(int argc, char** argv, int pos, GString* output);
void complete_negate(int argc, char** argv, int pos, GString* output);
void complete_against_settings(int argc, char** argv, int pos, GString* output);
void complete_against_keybinds(int argc, char** argv, int pos, GString* output);
int complete_against_commands(int argc, char** argv, int position,
                              GString* output);
void complete_against_commands_1(int argc, char** argv, int position,
                                 GString* output);
void complete_against_commands_3(int argc, char** argv, int position,
                                 GString* output);
void complete_against_arg_1(int argc, char** argv, int position, GString* output);
void complete_against_arg_2(int argc, char** argv, int position, GString* output);
void complete_against_keybind_command(int argc, char** argv, int position,
                                      GString* output);
void complete_against_mouse_combinations(int argc, char** argv, int position,
                                      GString* output);

void complete_against_env(int argc, char** argv, int position, GString* output);
void complete_chain(int argc, char** argv, int position, GString* output);

int command_chain(char* separator, bool (*condition)(int laststatus),
                  int argc, char** argv, GString* output);

void complete_sprintf(int argc, char** argv, int position, GString* output);

void complete_against_user_attr_prefix(int argc, char** argv, int position,
                                       GString* output);

int command_chain_command(int argc, char** argv, GString* output);

int negate_command(int argc, char** argv, GString* output);
#endif