aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/imv.1.txt4
-rw-r--r--src/imv.c27
2 files changed, 31 insertions, 0 deletions
diff --git a/doc/imv.1.txt b/doc/imv.1.txt
index 6ea53ee..0bf36a7 100644
--- a/doc/imv.1.txt
+++ b/doc/imv.1.txt
@@ -88,6 +88,10 @@ Commands can be entered by pressing *:*. imv supports the following commands:
Zoom into the image by the given amount. Negative values zoom out.
'actual' resets the zoom to 100%, showing the image at its actual size.
+*open* [-r] <paths ...>::
+ Add the given paths to the list of open images. If the '-r' option is
+ specified, do so recursively. Shell expansions may be used.
+
*close*::
Close the currently selected image.
diff --git a/src/imv.c b/src/imv.c
index e892469..f664081 100644
--- a/src/imv.c
+++ b/src/imv.c
@@ -101,6 +101,7 @@ void command_pan(struct list *args, const char *argstr, void *data);
void command_select_rel(struct list *args, const char *argstr, void *data);
void command_select_abs(struct list *args, const char *argstr, void *data);
void command_zoom(struct list *args, const char *argstr, void *data);
+void command_open(struct list *args, const char *argstr, void *data);
void command_close(struct list *args, const char *argstr, void *data);
void command_fullscreen(struct list *args, const char *argstr, void *data);
void command_overlay(struct list *args, const char *argstr, void *data);
@@ -190,6 +191,7 @@ struct imv *imv_create(void)
imv_command_register(imv->commands, "select_rel", &command_select_rel);
imv_command_register(imv->commands, "select_abs", &command_select_abs);
imv_command_register(imv->commands, "zoom", &command_zoom);
+ imv_command_register(imv->commands, "open", &command_open);
imv_command_register(imv->commands, "close", &command_close);
imv_command_register(imv->commands, "fullscreen", &command_fullscreen);
imv_command_register(imv->commands, "overlay", &command_overlay);
@@ -1118,6 +1120,31 @@ void command_zoom(struct list *args, const char *argstr, void *data)
}
}
+void command_open(struct list *args, const char *argstr, void *data)
+{
+ (void)argstr;
+ struct imv *imv = data;
+ bool recursive = imv->recursive_load;
+
+ update_env_vars(imv);
+ for (size_t i = 1; i < args->len; ++i) {
+
+ /* allow -r arg to specify recursive */
+ if (i == 1 && !strcmp(args->items[i], "-r")) {
+ recursive = true;
+ continue;
+ }
+
+ wordexp_t word;
+ if(wordexp(args->items[i], &word, 0) == 0) {
+ for(size_t j = 0; j < word.we_wordc; ++j) {
+ imv_navigator_add(imv->navigator, word.we_wordv[j], recursive);
+ }
+ wordfree(&word);
+ }
+ }
+}
+
void command_close(struct list *args, const char *argstr, void *data)
{
(void)args;