47 if (
id == cmd_iter->id) {
48 return cmd_iter.get();
58 if (cmd_iter.get() == cmd) {
74 bool is_duplicate =
false;
76 std::cerr <<
"warning: registered duplicate command \"" << cmd->id
77 <<
"\", this will be inaccessible" << std::endl;
78 cmd_exists->is_duplicate =
true;
81 cmd->is_duplicate = is_duplicate;
88 if (cmd_index == -1) {
89 std::cerr <<
"failed to unregister command handler" << std::endl;
98 if (cmd == cmd_iter.get()) {
101 if (cmd_iter->is_duplicate && (cmd_iter->id == cmd->
id)) {
107 cmd_other = cmd_iter.get();
123 if (cmd ==
nullptr) {
124 std::cerr <<
"Unrecognized command: \"" <<
id <<
"\"" << std::endl;
128 std::cerr <<
"Command: \"" <<
id
129 <<
"\" was registered multiple times, must be resolved, aborting!" << std::endl;
133 return cmd->
exec(
C, argc, argv);
143 for (
int pass = 0; pass < 2; pass++) {
144 std::cout << ((pass == 0) ?
"Blender Command Listing:" :
145 "Duplicate Command Listing (ignored):")
148 const bool show_duplicates = pass > 0;
150 bool has_duplicate =
false;
152 if (cmd_iter->is_duplicate) {
153 has_duplicate =
true;
155 if (cmd_iter->is_duplicate != show_duplicates) {
159 std::cout <<
"\t" << cmd_iter->id << std::endl;
164 std::cout <<
"\tNone found" << std::endl;
167 if (pass == 0 && !has_duplicate) {
Blender CLI Generic --command Support.
blender::Vector< CommandHandlerPtr > g_command_handlers
int BKE_blender_cli_command_exec(bContext *C, const char *id, const int argc, const char **argv)
std::unique_ptr< CommandHandler > CommandHandlerPtr
void BKE_blender_cli_command_print_help()
static CommandHandler * blender_cli_command_lookup(const std::string &id)
void BKE_blender_cli_command_free_all()
bool BKE_blender_cli_command_unregister(CommandHandler *cmd)
void BKE_blender_cli_command_register(std::unique_ptr< CommandHandler > cmd)
static int blender_cli_command_index(const CommandHandler *cmd)
virtual int exec(struct bContext *C, int argc, const char **argv)=0