commit - 69f32f5683dd763deaf6704db810fe5ab82fa5bd
commit + c6efff9689c26914de162ab1aee8fd362335d726
blob - 0c1616c92912ba90abe1c57a6cc4b027ddc46e44
blob + 11fbb3ea7c49748676cf2de36f142f2c6172dcb5
--- cmd.c
+++ cmd.c
enter_minibuffer(sensible_self_insert, lu_select, exit_minibuffer,
&lu_history, NULL, NULL);
strlcpy(ministate.prompt, "Load URL: ", sizeof(ministate.prompt));
- strlcpy(ministate.buf, "gemini://", sizeof(ministate.buf));
- cmd_move_end_of_line(&ministate.buffer);
}
void
blob - ec8779a1d316069a5d20451ba8150655023d4aff
blob + 25df1a9c74f194f0b1c8b304b1e3c1aaea927a4d
--- minibuffer.c
+++ minibuffer.c
void
lu_select(void)
{
+ char url[GEMINI_URL_LEN+1];
+
exit_minibuffer();
minibuffer_hist_save_entry();
- load_url_in_tab(current_tab, ministate.buf, NULL, 0);
+
+ humanify_url(ministate.buf, url, sizeof(url));
+ load_url_in_tab(current_tab, url, NULL, 0);
}
void
blob - 4ace49219df34292458b764ca6f14b75c635749d
blob + b4b3140046095bfc4e400d990e2bd8a7f0cf3d57
--- telescope.c
+++ telescope.c
ui_send_fs(IMSG_BOOKMARK_PAGE, 0,
str, strlen(str)+1);
}
+
+/*
+ * Given a user-entered URL, apply some heuristics to use it:
+ *
+ * - if it's a proper url use it
+ * - if it starts with a `./' or a `/' assume its a file:// url
+ * - assume it's a gemini:// url
+ *
+ * `ret' (of which len is the size) will be filled with the resulting
+ * url.
+ */
+void
+humanify_url(const char *raw, char *ret, size_t len)
+{
+ struct phos_uri uri;
+ char buf[PATH_MAX];
+ if (phos_parse_absolute_uri(raw, &uri)) {
+ strlcpy(ret, raw, len);
+ return;
+ }
+
+ if (has_prefix(raw, "./")) {
+ strlcpy(ret, "file://", len);
+ getcwd(buf, sizeof(buf));
+ strlcat(ret, buf, len);
+ strlcat(ret, "/", len);
+ strlcat(ret, raw+2, len);
+ return;
+ }
+
+ if (*raw == '/') {
+ strlcpy(ret, "file://", len);
+ strlcat(ret, raw, len);
+ return;
+ }
+
+ strlcpy(ret, "gemini://", len);
+ strlcat(ret, raw, len);
+}
+
static pid_t
start_child(enum telescope_process p, const char *argv0, int fd)
{
int proc = -1;
int sessionfd;
int status;
- char path[PATH_MAX];
- const char *url = NEW_TAB_URL;
+ char path[PATH_MAX], url[GEMINI_URL_LEN+1];
const char *argv0;
argv0 = argv[0];
if (argc != 0) {
has_url = 1;
- url = argv[0];
+ humanify_url(argv[0], url, sizeof(url));
}
/* setup keys before reading the config */
blob - a11df120af6df0245b79aa4a40723dd9a031bbaa
blob + ffbff0e490391c6f58a3e547e73b66863c2d13eb
--- telescope.h
+++ telescope.h
int load_previous_page(struct tab*);
int load_next_page(struct tab*);
void add_to_bookmarks(const char*);
+void humanify_url(const char *, char *, size_t);
int ui_send_net(int, uint32_t, const void *, uint16_t);
int ui_send_fs(int, uint32_t, const void *, uint16_t);