mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-11-13 10:33:45 +01:00
make :write save and make it work with relative paths
This commit is contained in:
parent
b525ef59d7
commit
4400d8abd9
@ -197,6 +197,7 @@ Command commands[] = {
|
|||||||
{"rotate", "r", cmd_rotate, 0, "Rotate the page" },
|
{"rotate", "r", cmd_rotate, 0, "Rotate the page" },
|
||||||
{"set", "s", cmd_set, cc_set, "Set an option" },
|
{"set", "s", cmd_set, cc_set, "Set an option" },
|
||||||
{"write", "w", cmd_save, 0, "Save the document" },
|
{"write", "w", cmd_save, 0, "Save the document" },
|
||||||
|
{"write!", "w!", cmd_savef, 0, "Save the document (and force overwriting)" },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* buffer commands */
|
/* buffer commands */
|
||||||
|
48
zathura.c
48
zathura.c
@ -442,6 +442,7 @@ gboolean cmd_rotate(int, char**);
|
|||||||
gboolean cmd_set(int, char**);
|
gboolean cmd_set(int, char**);
|
||||||
gboolean cmd_quit(int, char**);
|
gboolean cmd_quit(int, char**);
|
||||||
gboolean cmd_save(int, char**);
|
gboolean cmd_save(int, char**);
|
||||||
|
gboolean cmd_savef(int, char**);
|
||||||
|
|
||||||
/* completion commands */
|
/* completion commands */
|
||||||
Completion* cc_bookmark(char*);
|
Completion* cc_bookmark(char*);
|
||||||
@ -3674,7 +3675,7 @@ cmd_quit(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
cmd_save(int argc, char** argv)
|
save_file(int argc, char** argv, gboolean overwrite)
|
||||||
{
|
{
|
||||||
if(argc == 0 || !Zathura.PDF.document)
|
if(argc == 0 || !Zathura.PDF.document)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -3690,17 +3691,58 @@ cmd_save(int argc, char** argv)
|
|||||||
else
|
else
|
||||||
file_path = g_strdup(argv[0]);
|
file_path = g_strdup(argv[0]);
|
||||||
|
|
||||||
char* path = g_strdup_printf("file://%s", file_path);
|
if (!overwrite && g_file_test(file_path, G_FILE_TEST_EXISTS))
|
||||||
|
{
|
||||||
|
char* message = g_strdup_printf("File already exists: %s. Use :write! to overwrite it.", file_path);
|
||||||
|
notify(ERROR, message);
|
||||||
|
g_free(message);
|
||||||
|
g_free(file_path);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* path = NULL;
|
||||||
|
if (file_path[0] == '/')
|
||||||
|
path = g_strdup_printf("file://%s", file_path);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char* cur = g_get_current_dir();
|
||||||
|
path = g_strdup_printf("file://%s/%s", cur, file_path);
|
||||||
|
g_free(cur);
|
||||||
|
}
|
||||||
g_free(file_path);
|
g_free(file_path);
|
||||||
|
|
||||||
g_static_mutex_lock(&(Zathura.Lock.pdflib_lock));
|
g_static_mutex_lock(&(Zathura.Lock.pdflib_lock));
|
||||||
poppler_document_save(Zathura.PDF.document, path, NULL);
|
/* format path */
|
||||||
|
GError* error = NULL;
|
||||||
|
if (!poppler_document_save(Zathura.PDF.document, path, &error))
|
||||||
|
{
|
||||||
|
g_free(path);
|
||||||
|
char* message = g_strdup_printf("Can not write file: %s", error->message);
|
||||||
|
notify(ERROR, message);
|
||||||
|
g_free(message);
|
||||||
|
g_error_free(error);
|
||||||
|
g_static_mutex_unlock(&(Zathura.Lock.pdflib_lock));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
g_static_mutex_unlock(&(Zathura.Lock.pdflib_lock));
|
g_static_mutex_unlock(&(Zathura.Lock.pdflib_lock));
|
||||||
g_free(path);
|
g_free(path);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
cmd_save(int argc, char** argv)
|
||||||
|
{
|
||||||
|
return save_file(argc, argv, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
cmd_savef(int argc, char** argv)
|
||||||
|
{
|
||||||
|
return save_file(argc, argv, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
/* completion command implementation */
|
/* completion command implementation */
|
||||||
Completion*
|
Completion*
|
||||||
cc_bookmark(char* input)
|
cc_bookmark(char* input)
|
||||||
|
Loading…
Reference in New Issue
Block a user