Remove, branch merged upstream - pkgsrc-localpatches - leot's pkgsrc LOCALPATCHES
(HTM) hg clone https://bitbucket.org/iamleot/pkgsrc-localpatches
(DIR) Log
(DIR) Files
(DIR) Refs
---
(DIR) changeset d61dd0d1faf28ddd7e2da42c5fa9c4f72642261c
(DIR) parent da565b1fed83e34578af40175208082fea1dc987
(HTM) Author: Leonardo Taccari <iamleot@gmail.com>
Date: Thu, 25 Oct 2018 23:47:34
Remove, branch merged upstream
Diffstat:
wip/vimb3-git/patch-view_source_support.patch | 390 --------------------------
1 files changed, 0 insertions(+), 390 deletions(-)
---
diff -r da565b1fed83 -r d61dd0d1faf2 wip/vimb3-git/patch-view_source_support.patch
--- a/wip/vimb3-git/patch-view_source_support.patch Mon Oct 22 00:18:24 2018 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,390 +0,0 @@
-diff --git src/command.c src/command.c
-index 118881f..344a06d 100644
---- src/command.c
-+++ src/command.c
-@@ -30,8 +30,18 @@
- #endif
- #include "command.h"
- #include "history.h"
-+#include "util.h"
- #include "main.h"
-
-+typedef struct {
-+ Client *c;
-+ char *file;
-+ gpointer *data;
-+ PostEditFunc func;
-+} EditorData;
-+
-+static void resume_editor(GPid pid, int status, gpointer edata);
-+
- /**
- * Start/perform/stop searching in webview.
- *
-@@ -260,3 +270,96 @@ gboolean command_queue(Client *c, const Arg *arg)
- return res;
- }
- #endif
-+
-+/**
-+ * Asynchronously spawn editor.
-+ *
-+ * @posteditfunc: If not NULL posteditfunc is called and the following arguments
-+ * are passed:
-+ * - const char *text: text contents of the temporary file (or
-+ * NULL)
-+ * - Client *c: current client passed to command_spawn_editor()
-+ * - gpointer data: pointer that can be used for any local
-+ * purposes
-+ * @data: Generic pointer used to pass data to posteditfunc
-+ */
-+gboolean command_spawn_editor(Client *c, const Arg *arg,
-+ PostEditFunc posteditfunc, gpointer data)
-+{
-+ char **argv = NULL, *file_path = NULL;
-+ char *command = NULL;
-+ int argc;
-+ GPid pid;
-+ gboolean success;
-+ char *editor_command;
-+ GError *error = NULL;
-+
-+ /* get the editor command */
-+ editor_command = GET_CHAR(c, "editor-command");
-+ if (!editor_command || !*editor_command) {
-+ vb_echo(c, MSG_ERROR, TRUE, "No editor-command configured");
-+ return FALSE;
-+ }
-+
-+ /* create a temp file to pass text in/to editor */
-+ if (!util_create_tmp_file(arg->s, &file_path)) {
-+ goto error;
-+ }
-+
-+ /* spawn editor */
-+ command = g_strdup_printf(editor_command, file_path);
-+ if (!g_shell_parse_argv(command, &argc, &argv, NULL)) {
-+ g_critical("Could not parse editor-command '%s'", command);
-+ goto error;
-+ }
-+
-+ success = g_spawn_async(
-+ NULL, argv, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
-+ NULL, NULL, &pid, &error
-+ );
-+
-+ if (!success) {
-+ g_warning("Could not spawn editor-command: %s", error->message);
-+ g_error_free(error);
-+ goto error;
-+ }
-+ g_strfreev(argv);
-+
-+ EditorData *ed = g_slice_new0(EditorData);
-+ ed->file = file_path;
-+ ed->c = c;
-+ ed->data = data;
-+ ed->func = posteditfunc;
-+
-+ g_child_watch_add(pid, resume_editor, ed);
-+
-+ return TRUE;
-+
-+error:
-+ unlink(file_path);
-+ g_free(file_path);
-+ g_strfreev(argv);
-+ return FALSE;
-+}
-+
-+static void resume_editor(GPid pid, int status, gpointer edata)
-+{
-+ char *text = NULL;
-+ EditorData *ed = edata;
-+
-+ g_assert(pid);
-+ g_assert(ed);
-+ g_assert(ed->c);
-+ g_assert(ed->file);
-+
-+ if (ed->func != NULL) {
-+ text = util_get_file_contents(ed->file, NULL);
-+ ed->func(text, ed->c, ed->data);
-+ g_free(text);
-+ }
-+
-+ unlink(ed->file);
-+ g_free(ed->file);
-+ g_slice_free(EditorData, ed);
-+ g_spawn_close_pid(pid);
-+}
-diff --git src/command.h src/command.h
-index c3f8b68..3a49a63 100644
---- src/command.h
-+++ src/command.h
-@@ -43,11 +43,14 @@ enum {
- };
- #endif
-
-+typedef void (*PostEditFunc)(const char *, Client *, gpointer);
-+
- gboolean command_search(Client *c, const Arg *arg, bool commit);
- gboolean command_yank(Client *c, const Arg *arg, char buf);
- gboolean command_save(Client *c, const Arg *arg);
- #ifdef FEATURE_QUEUE
- gboolean command_queue(Client *c, const Arg *arg);
- #endif
-+gboolean command_spawn_editor(Client *c, const Arg *arg, PostEditFunc posteditfunc, gpointer data);
-
- #endif /* end of include guard: _COMMAND_H */
-diff --git src/input.c src/input.c
-index ac6db07..56e2676 100644
---- src/input.c
-+++ src/input.c
-@@ -22,6 +22,7 @@
- #include <string.h>
-
- #include "ascii.h"
-+#include "command.h"
- #include "config.h"
- #include "input.h"
- #include "main.h"
-@@ -31,13 +32,11 @@
- #include "ext-proxy.h"
-
- typedef struct {
-- Client *c;
-- char *file;
- char *element_id;
- unsigned long element_map_key;
--} EditorData;
-+} ElementEditorData;
-
--static void resume_editor(GPid pid, int status, EditorData *data);
-+static void input_editor_formfiller(const char *text, Client *c, gpointer data);
-
- /**
- * Function called when vimb enters the input mode.
-@@ -111,25 +110,15 @@ VbResult input_keypress(Client *c, int key)
- VbResult input_open_editor(Client *c)
- {
- static unsigned long element_map_key = 0;
-- char *element_id = NULL, *command = NULL;
-- char **argv = NULL, *file_path = NULL;
-- const char *text = NULL, *id = NULL, *editor_command;
-- int argc;
-- GPid pid;
-+ char *element_id = NULL;
-+ char *text = NULL, *id = NULL;
- gboolean success;
- GVariant *jsreturn;
- GVariant *idreturn;
-- GError *error = NULL;
-+ ElementEditorData *data = NULL;
-
- g_assert(c);
-
-- /* get the editor command */
-- editor_command = GET_CHAR(c, "editor-command");
-- if (!editor_command || !*editor_command) {
-- vb_echo(c, MSG_ERROR, TRUE, "No editor-command configured");
-- return RESULT_ERROR;
-- }
--
- /* get the selected input element */
- jsreturn = ext_proxy_eval_script_sync(c, "vimb_input_mode_element.value");
- g_variant_get(jsreturn, "(bs)", &success, &text);
-@@ -150,96 +139,54 @@ VbResult input_open_editor(Client *c)
- element_id = g_strdup(id);
- }
-
-- /* create a temp file to pass text to and from editor */
-- if (!util_create_tmp_file(text, &file_path)) {
-- goto error;
-- }
--
-- /* spawn editor */
-- command = g_strdup_printf(editor_command, file_path);
-- if (!g_shell_parse_argv(command, &argc, &argv, NULL)) {
-- g_critical("Could not parse editor-command '%s'", command);
-- goto error;
-- }
-+ data = g_slice_new0(ElementEditorData);
-+ data->element_id = element_id;
-+ data->element_map_key = element_map_key;
-
-- success = g_spawn_async(
-- NULL, argv, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
-- NULL, NULL, &pid, &error
-- );
-+ if (command_spawn_editor(c, &((Arg){0, text}), input_editor_formfiller, data)) {
-+ /* disable the active element */
-+ ext_proxy_lock_input(c, element_id);
-
-- if (!success) {
-- g_warning("Could not spawn editor-command: %s", error->message);
-- g_error_free(error);
-- goto error;
-+ return RESULT_COMPLETE;
- }
-- g_strfreev(argv);
--
-- /* disable the active element */
-- ext_proxy_lock_input(c, element_id);
--
-- /* watch the editor process */
-- EditorData *data = g_slice_new0(EditorData);
-- data->file = file_path;
-- data->c = c;
-- data->element_id = element_id;
-- data->element_map_key = element_map_key;
-
-- g_child_watch_add(pid, (GChildWatchFunc)resume_editor, data);
--
-- return RESULT_COMPLETE;
--
--error:
-- unlink(file_path);
-- g_free(file_path);
-- g_strfreev(argv);
- g_free(element_id);
-+ g_slice_free(ElementEditorData, data);
- return RESULT_ERROR;
- }
-
--static void resume_editor(GPid pid, int status, EditorData *data)
-+static void input_editor_formfiller(const char *text, Client *c, gpointer data)
- {
-- char *text, *escaped;
-+ char *escaped;
- char *jscode;
- char *jscode_enable;
-+ ElementEditorData *eed = (ElementEditorData *)data;
-
-- g_assert(pid);
-- g_assert(data);
-- g_assert(data->c);
-- g_assert(data->file);
--
-- if (status == 0) {
-- /* get the text the editor stored */
-- text = util_get_file_contents(data->file, NULL);
--
-- if (text) {
-- escaped = util_strescape(text, NULL);
-+ if (text) {
-+ escaped = util_strescape(text, NULL);
-
-- /* put the text back into the element */
-- if (data->element_id && strlen(data->element_id) > 0) {
-- jscode = g_strdup_printf("document.getElementById(\"%s\").value=\"%s\"", data->element_id, escaped);
-- } else {
-- jscode = g_strdup_printf("vimb_editor_map.get(\"%lu\").value=\"%s\"", data->element_map_key, escaped);
-- }
-+ /* put the text back into the element */
-+ if (eed->element_id && strlen(eed->element_id) > 0) {
-+ jscode = g_strdup_printf("document.getElementById(\"%s\").value=\"%s\"", eed->element_id, escaped);
-+ } else {
-+ jscode = g_strdup_printf("vimb_editor_map.get(\"%lu\").value=\"%s\"", eed->element_map_key, escaped);
-+ }
-
-- ext_proxy_eval_script(data->c, jscode, NULL);
-+ ext_proxy_eval_script(c, jscode, NULL);
-
-- g_free(jscode);
-- g_free(escaped);
-- g_free(text);
-- }
-+ g_free(jscode);
-+ g_free(escaped);
- }
-
-- if (data->element_id && strlen(data->element_id) > 0) {
-- ext_proxy_unlock_input(data->c, data->element_id);
-+ if (eed->element_id && strlen(eed->element_id) > 0) {
-+ ext_proxy_unlock_input(c, eed->element_id);
- } else {
- jscode_enable = g_strdup_printf(JS_FOCUS_EDITOR_MAP_ELEMENT,
-- data->element_map_key, data->element_map_key);
-- ext_proxy_eval_script(data->c, jscode_enable, NULL);
-+ eed->element_map_key, eed->element_map_key);
-+ ext_proxy_eval_script(c, jscode_enable, NULL);
- g_free(jscode_enable);
- }
-- g_unlink(data->file);
-- g_free(data->file);
-- g_free(data->element_id);
-- g_slice_free(EditorData, data);
-- g_spawn_close_pid(pid);
-+
-+ g_free(eed->element_id);
-+ g_slice_free(ElementEditorData, eed);
- }
-diff --git src/normal.c src/normal.c
-index 02ba27b..689bf1b 100644
---- src/normal.c
-+++ src/normal.c
-@@ -74,6 +74,7 @@ static VbResult normal_search(Client *c, const NormalCmdInfo *info);
- static VbResult normal_search_selection(Client *c, const NormalCmdInfo *info);
- static VbResult normal_view_inspector(Client *c, const NormalCmdInfo *info);
- static VbResult normal_view_source(Client *c, const NormalCmdInfo *info);
-+static void normal_view_source_loaded(WebKitWebResource *resource, GAsyncResult *res, Client *c);
- static VbResult normal_yank(Client *c, const NormalCmdInfo *info);
- static VbResult normal_zoom(Client *c, const NormalCmdInfo *info);
-
-@@ -446,7 +447,7 @@ static VbResult normal_g_cmd(Client *c, const NormalCmdInfo *info)
- return normal_view_inspector(c, info);
-
- case 'f':
-- normal_view_source(c, info);
-+ return normal_view_source(c, info);
-
- case 'g':
- return normal_scroll(c, info);
-@@ -743,10 +744,29 @@ static VbResult normal_view_inspector(Client *c, const NormalCmdInfo *info)
-
- static VbResult normal_view_source(Client *c, const NormalCmdInfo *info)
- {
-- /* TODO the source mode isn't supported anymore use external editor for this */
-+ WebKitWebResource *resource;
-+
-+ if ((resource = webkit_web_view_get_main_resource(c->webview)) == NULL) {
-+ return RESULT_ERROR;
-+ }
-+
-+ webkit_web_resource_get_data(resource, NULL,
-+ (GAsyncReadyCallback)normal_view_source_loaded, c);
-+
- return RESULT_COMPLETE;
- }
-
-+static void normal_view_source_loaded(WebKitWebResource *resource,
-+ GAsyncResult *res, Client *c)
-+{
-+ gsize length;
-+ guchar *text = NULL;
-+
-+ text = webkit_web_resource_get_data_finish(resource, res, &length, NULL);
-+ command_spawn_editor(c, &((Arg){0, (char *)text}), NULL, NULL);
-+ g_free(text);
-+}
-+
- static VbResult normal_yank(Client *c, const NormalCmdInfo *info)
- {
- Arg a = {info->key == 'Y' ? COMMAND_YANK_SELECTION : COMMAND_YANK_URI};
-diff --git src/util.c src/util.c
-index d18bc72..0255e54 100644
---- src/util.c
-+++ src/util.c
-@@ -133,6 +133,11 @@ gboolean util_create_tmp_file(const char *content, char **file)
- return FALSE;
- }
-
-+ if (content == NULL) {
-+ close(fp);
-+ return TRUE;
-+ }
-+
- len = strlen(content);
-
- /* write content into temporary file */