From: Daniel Carl Date: Sat, 6 Apr 2013 14:23:45 +0000 (+0200) Subject: Added command to save current uri as bookmark (#4). X-Git-Url: https://git.owens.tech/assets/favicon.png/assets/favicon.png/git?a=commitdiff_plain;h=ca34d7bf34aa79008d79cb13d4c96f1b957d8788;p=vimb.git Added command to save current uri as bookmark (#4). --- diff --git a/doc/vimb.1.txt b/doc/vimb.1.txt index 785e26d..1f6af08 100644 --- a/doc/vimb.1.txt +++ b/doc/vimb.1.txt @@ -299,6 +299,10 @@ inputbox. If there is already text in the input box this will be used to get history items. A command is not a internal command, but every string entered into inputbox that begins with \fI[:/?]\fP. So the history contains real commands and search queries. +.SS Bookmark +.TP +.BI "bookmark-add [" TAGS "]" +Save the current opened uri with \fITAGS\fP to the bookmark file. .SS Misc .TP .BI run " [COMMAND LIST]" @@ -354,6 +358,10 @@ box. This file holds the history of search queries. box. .RE +.I $XDG_CONFIG_HOME/PROJECT/bookmark +.RS +Holds the bookmarks saved with command `bookmark-add'. +.RE .I $XDG_CONFIG_HOME/PROJECT/scripts.js .RS This file can be used to run user scripts, that are injected into every paged diff --git a/src/bookmark.c b/src/bookmark.c new file mode 100644 index 0000000..793ce57 --- /dev/null +++ b/src/bookmark.c @@ -0,0 +1,57 @@ +/** + * vimb - a webkit based vim like browser. + * + * Copyright (C) 2012-2013 Daniel Carl + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + */ + +#include "main.h" +#include "bookmark.h" + +extern VbCore vb; + +/** + * Write a new bookmark entry to the end of bookmark file. + */ +void bookmark_add(const char *uri, const char *tags) +{ + char **parts, *t = NULL; + unsigned int len, i; + GString *string = g_string_new(uri); + FILE *f; + + if ((f = fopen(vb.files[FILES_BOOKMARK], "a+"))) { + if (tags) { + /* splits the tags by space char */ + parts = g_strsplit(tags, " ", 0); + len = g_strv_length(parts); + + for (i = 0; i < len; i++) { + t = g_shell_quote(parts[i]); + g_string_append_printf(string, " %s", t); + g_free(t); + } + } + + file_lock_set(fileno(f), F_WRLCK); + + fprintf(f, "%s\n", string->str); + + file_lock_set(fileno(f), F_UNLCK); + fclose(f); + + g_string_free(string, true); + } +} diff --git a/src/bookmark.h b/src/bookmark.h new file mode 100644 index 0000000..6dac270 --- /dev/null +++ b/src/bookmark.h @@ -0,0 +1,25 @@ +/** + * vimb - a webkit based vim like browser. + * + * Copyright (C) 2012-2013 Daniel Carl + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + */ + +#ifndef _BOOKMARK_H +#define _BOOKMARK_H + +void bookmark_add(const char *uri, const char *tags); + +#endif /* end of include guard: _BOOKMARK_H */ diff --git a/src/command.c b/src/command.c index 6058d86..2b784a3 100644 --- a/src/command.c +++ b/src/command.c @@ -26,77 +26,79 @@ #include "util.h" #include "searchengine.h" #include "history.h" +#include "bookmark.h" extern VbCore vb; extern const unsigned int INPUT_LENGTH; static CommandInfo cmd_list[] = { - /* command function arg mode */ - {"open", command_open, {VB_TARGET_CURRENT, ""}}, - {"tabopen", command_open, {VB_TARGET_NEW, ""}}, - {"open-closed", command_open_closed, {VB_TARGET_CURRENT}}, - {"tabopen-closed", command_open_closed, {VB_TARGET_NEW}}, - {"input", command_input, {0, ":"}}, - {"inputuri", command_input, {VB_INPUT_CURRENT_URI, ":"}}, - {"quit", command_close, {0}}, - {"source", command_view_source, {0}}, - {"back", command_navigate, {VB_NAVIG_BACK}}, - {"forward", command_navigate, {VB_NAVIG_FORWARD}}, - {"reload", command_navigate, {VB_NAVIG_RELOAD}}, - {"reload!", command_navigate, {VB_NAVIG_RELOAD_FORCE}}, - {"stop", command_navigate, {VB_NAVIG_STOP_LOADING}}, - {"jumpleft", command_scroll, {VB_SCROLL_TYPE_JUMP | VB_SCROLL_DIRECTION_LEFT}}, - {"jumpright", command_scroll, {VB_SCROLL_TYPE_JUMP | VB_SCROLL_DIRECTION_RIGHT}}, - {"jumptop", command_scroll, {VB_SCROLL_TYPE_JUMP | VB_SCROLL_DIRECTION_TOP}}, - {"jumpbottom", command_scroll, {VB_SCROLL_TYPE_JUMP | VB_SCROLL_DIRECTION_DOWN}}, - {"pageup", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_TOP | VB_SCROLL_UNIT_PAGE}}, - {"pagedown", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_DOWN | VB_SCROLL_UNIT_PAGE}}, - {"halfpageup", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_TOP | VB_SCROLL_UNIT_HALFPAGE}}, - {"halfpagedown", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_DOWN | VB_SCROLL_UNIT_HALFPAGE}}, - {"scrollleft", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_LEFT | VB_SCROLL_UNIT_LINE}}, - {"scrollright", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_RIGHT | VB_SCROLL_UNIT_LINE}}, - {"scrollup", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_TOP | VB_SCROLL_UNIT_LINE}}, - {"scrolldown", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_DOWN | VB_SCROLL_UNIT_LINE}}, - {"nmap", command_map, {VB_MODE_NORMAL}}, - {"imap", command_map, {VB_MODE_INSERT}}, - {"cmap", command_map, {VB_MODE_COMMAND}}, - {"hmap", command_map, {VB_MODE_HINTING}}, - {"smap", command_map, {VB_MODE_SEARCH}}, - {"nunmap", command_unmap, {VB_MODE_NORMAL}}, - {"iunmap", command_unmap, {VB_MODE_INSERT}}, - {"cunmap", command_unmap, {VB_MODE_COMMAND}}, - {"hunmap", command_unmap, {VB_MODE_HINTING}}, - {"sunmap", command_map, {VB_MODE_SEARCH}}, - {"set", command_set, {0}}, - {"complete", command_complete, {0}}, - {"complete-back", command_complete, {1}}, - {"inspect", command_inspect, {0}}, - {"hint-link", command_hints, {HINTS_TYPE_LINK | HINTS_PROCESS_OPEN, "."}}, - {"hint-link-new", command_hints, {HINTS_TYPE_LINK | HINTS_PROCESS_OPEN | HINTS_OPEN_NEW, ","}}, - {"hint-input-open", command_hints, {HINTS_TYPE_LINK | HINTS_PROCESS_INPUT, ";o"}}, - {"hint-input-tabopen", command_hints, {HINTS_TYPE_LINK | HINTS_PROCESS_INPUT | HINTS_OPEN_NEW, ";t"}}, - {"hint-yank", command_hints, {HINTS_TYPE_LINK | HINTS_PROCESS_YANK, ";y"}}, - {"hint-image-open", command_hints, {HINTS_TYPE_IMAGE | HINTS_PROCESS_OPEN, ";i"}}, - {"hint-image-tabopen", command_hints, {HINTS_TYPE_IMAGE | HINTS_PROCESS_OPEN | HINTS_OPEN_NEW, ";I"}}, - {"hint-focus-next", command_hints_focus, {0}}, - {"hint-focus-prev", command_hints_focus, {1}}, - {"yank-uri", command_yank, {COMMAND_YANK_PRIMARY | COMMAND_YANK_SECONDARY | COMMAND_YANK_URI}}, - {"yank-selection", command_yank, {COMMAND_YANK_PRIMARY | COMMAND_YANK_SECONDARY | COMMAND_YANK_SELECTION}}, - {"open-clipboard", command_paste, {VB_CLIPBOARD_PRIMARY | VB_CLIPBOARD_SECONDARY | VB_TARGET_CURRENT}}, - {"tabopen-clipboard", command_paste, {VB_CLIPBOARD_PRIMARY | VB_CLIPBOARD_SECONDARY | VB_TARGET_NEW}}, - {"search-forward", command_search, {VB_SEARCH_FORWARD}}, - {"search-backward", command_search, {VB_SEARCH_BACKWARD}}, - {"searchengine-add", command_searchengine,{1}}, - {"searchengine-remove", command_searchengine,{0}}, - {"searchengine-default", command_searchengine_default,{0}}, - {"zoomin", command_zoom, {COMMAND_ZOOM_IN}}, - {"zoomout", command_zoom, {COMMAND_ZOOM_OUT}}, - {"zoominfull", command_zoom, {COMMAND_ZOOM_IN | COMMAND_ZOOM_FULL}}, - {"zoomoutfull", command_zoom, {COMMAND_ZOOM_OUT | COMMAND_ZOOM_FULL}}, - {"zoomreset", command_zoom, {COMMAND_ZOOM_RESET}}, - {"hist-next", command_history, {0}}, - {"hist-prev", command_history, {1}}, - {"run", command_run_multi, {0}}, + /* command function mode */ + {"open", command_open, {VB_TARGET_CURRENT, ""}}, + {"tabopen", command_open, {VB_TARGET_NEW, ""}}, + {"open-closed", command_open_closed, {VB_TARGET_CURRENT}}, + {"tabopen-closed", command_open_closed, {VB_TARGET_NEW}}, + {"input", command_input, {0, ":"}}, + {"inputuri", command_input, {VB_INPUT_CURRENT_URI, ":"}}, + {"quit", command_close, {0}}, + {"source", command_view_source, {0}}, + {"back", command_navigate, {VB_NAVIG_BACK}}, + {"forward", command_navigate, {VB_NAVIG_FORWARD}}, + {"reload", command_navigate, {VB_NAVIG_RELOAD}}, + {"reload!", command_navigate, {VB_NAVIG_RELOAD_FORCE}}, + {"stop", command_navigate, {VB_NAVIG_STOP_LOADING}}, + {"jumpleft", command_scroll, {VB_SCROLL_TYPE_JUMP | VB_SCROLL_DIRECTION_LEFT}}, + {"jumpright", command_scroll, {VB_SCROLL_TYPE_JUMP | VB_SCROLL_DIRECTION_RIGHT}}, + {"jumptop", command_scroll, {VB_SCROLL_TYPE_JUMP | VB_SCROLL_DIRECTION_TOP}}, + {"jumpbottom", command_scroll, {VB_SCROLL_TYPE_JUMP | VB_SCROLL_DIRECTION_DOWN}}, + {"pageup", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_TOP | VB_SCROLL_UNIT_PAGE}}, + {"pagedown", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_DOWN | VB_SCROLL_UNIT_PAGE}}, + {"halfpageup", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_TOP | VB_SCROLL_UNIT_HALFPAGE}}, + {"halfpagedown", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_DOWN | VB_SCROLL_UNIT_HALFPAGE}}, + {"scrollleft", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_LEFT | VB_SCROLL_UNIT_LINE}}, + {"scrollright", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_RIGHT | VB_SCROLL_UNIT_LINE}}, + {"scrollup", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_TOP | VB_SCROLL_UNIT_LINE}}, + {"scrolldown", command_scroll, {VB_SCROLL_TYPE_SCROLL | VB_SCROLL_DIRECTION_DOWN | VB_SCROLL_UNIT_LINE}}, + {"nmap", command_map, {VB_MODE_NORMAL}}, + {"imap", command_map, {VB_MODE_INSERT}}, + {"cmap", command_map, {VB_MODE_COMMAND}}, + {"hmap", command_map, {VB_MODE_HINTING}}, + {"smap", command_map, {VB_MODE_SEARCH}}, + {"nunmap", command_unmap, {VB_MODE_NORMAL}}, + {"iunmap", command_unmap, {VB_MODE_INSERT}}, + {"cunmap", command_unmap, {VB_MODE_COMMAND}}, + {"hunmap", command_unmap, {VB_MODE_HINTING}}, + {"sunmap", command_map, {VB_MODE_SEARCH}}, + {"set", command_set, {0}}, + {"complete", command_complete, {0}}, + {"complete-back", command_complete, {1}}, + {"inspect", command_inspect, {0}}, + {"hint-link", command_hints, {HINTS_TYPE_LINK | HINTS_PROCESS_OPEN, "."}}, + {"hint-link-new", command_hints, {HINTS_TYPE_LINK | HINTS_PROCESS_OPEN | HINTS_OPEN_NEW, ","}}, + {"hint-input-open", command_hints, {HINTS_TYPE_LINK | HINTS_PROCESS_INPUT, ";o"}}, + {"hint-input-tabopen", command_hints, {HINTS_TYPE_LINK | HINTS_PROCESS_INPUT | HINTS_OPEN_NEW, ";t"}}, + {"hint-yank", command_hints, {HINTS_TYPE_LINK | HINTS_PROCESS_YANK, ";y"}}, + {"hint-image-open", command_hints, {HINTS_TYPE_IMAGE | HINTS_PROCESS_OPEN, ";i"}}, + {"hint-image-tabopen", command_hints, {HINTS_TYPE_IMAGE | HINTS_PROCESS_OPEN | HINTS_OPEN_NEW, ";I"}}, + {"hint-focus-next", command_hints_focus, {0}}, + {"hint-focus-prev", command_hints_focus, {1}}, + {"yank-uri", command_yank, {COMMAND_YANK_PRIMARY | COMMAND_YANK_SECONDARY | COMMAND_YANK_URI}}, + {"yank-selection", command_yank, {COMMAND_YANK_PRIMARY | COMMAND_YANK_SECONDARY | COMMAND_YANK_SELECTION}}, + {"open-clipboard", command_paste, {VB_CLIPBOARD_PRIMARY | VB_CLIPBOARD_SECONDARY | VB_TARGET_CURRENT}}, + {"tabopen-clipboard", command_paste, {VB_CLIPBOARD_PRIMARY | VB_CLIPBOARD_SECONDARY | VB_TARGET_NEW}}, + {"search-forward", command_search, {VB_SEARCH_FORWARD}}, + {"search-backward", command_search, {VB_SEARCH_BACKWARD}}, + {"searchengine-add", command_searchengine, {1}}, + {"searchengine-remove", command_searchengine, {0}}, + {"searchengine-default", command_searchengine_default, {0}}, + {"zoomin", command_zoom, {COMMAND_ZOOM_IN}}, + {"zoomout", command_zoom, {COMMAND_ZOOM_OUT}}, + {"zoominfull", command_zoom, {COMMAND_ZOOM_IN | COMMAND_ZOOM_FULL}}, + {"zoomoutfull", command_zoom, {COMMAND_ZOOM_OUT | COMMAND_ZOOM_FULL}}, + {"zoomreset", command_zoom, {COMMAND_ZOOM_RESET}}, + {"hist-next", command_history, {0}}, + {"hist-prev", command_history, {1}}, + {"run", command_run_multi, {0}}, + {"bookmark-add", command_bookmark, {1}}, }; @@ -592,3 +594,10 @@ gboolean command_history(const Arg *arg) return TRUE; } + +gboolean command_bookmark(const Arg *arg) +{ + bookmark_add(webkit_web_view_get_uri(vb.gui.webview), arg->s); + vb_set_mode(VB_MODE_NORMAL, false); + return TRUE; +} diff --git a/src/command.h b/src/command.h index 9081299..6f0bd60 100644 --- a/src/command.h +++ b/src/command.h @@ -72,5 +72,6 @@ gboolean command_searchengine(const Arg *arg); gboolean command_searchengine_default(const Arg *arg); gboolean command_zoom(const Arg *arg); gboolean command_history(const Arg *arg); +gboolean command_bookmark(const Arg *arg); #endif /* end of include guard: _COMMAND_H */ diff --git a/src/main.c b/src/main.c index 8d348bf..5139bd8 100644 --- a/src/main.c +++ b/src/main.c @@ -779,6 +779,9 @@ static void init_files(void) vb.files[FILES_SEARCH] = g_build_filename(path, "search", NULL); util_create_file_if_not_exists(vb.files[FILES_SEARCH]); + vb.files[FILES_BOOKMARK] = g_build_filename(path, "bookmark", NULL); + util_create_file_if_not_exists(vb.files[FILES_BOOKMARK]); + vb.files[FILES_SCRIPT] = g_build_filename(path, "scripts.js", NULL); vb.files[FILES_USER_STYLE] = g_build_filename(path, "style.css", NULL); diff --git a/src/main.h b/src/main.h index 0c20a36..fe0680a 100644 --- a/src/main.h +++ b/src/main.h @@ -184,6 +184,7 @@ typedef enum { FILES_HISTORY, FILES_COMMAND, FILES_SEARCH, + FILES_BOOKMARK, FILES_USER_STYLE, FILES_LAST } VbFile;