commit f26f1205275cf2849d2754beff3d9d65c161c98a from: Omar Polo date: Wed Feb 09 21:58:50 2022 UTC move headers to include/ commit - b91f4f84d78cc64eebdc37b71e67f689e1b62746 commit + f26f1205275cf2849d2754beff3d9d65c161c98a blob - 8885cec3b098d222561b983bdffe75d8776f4b46 blob + 265e705c9a2c4a1917bddc5d07f838847b635c6e --- Makefile.am +++ Makefile.am @@ -6,30 +6,35 @@ EXTRA_telescope_SOURCES = compat/ohash.h compat/queue. telescope_SOURCES = cmd.c \ cmd.gen.c \ - cmd.h \ - compat.h \ compl.c \ - compl.h \ defaults.c \ - defaults.h \ downloads.c \ fs.c \ - fs.h \ gencmd.awk \ help.c \ hist.c \ + include/cmd.h \ + include/compat.h \ + include/compl.h \ + include/defaults.h \ + include/fs.h \ + include/keymap.h \ + include/mcache.h \ + include/minibuffer.h \ + include/pages.h \ + include/parser.h \ + include/session.h \ + include/telescope.h \ + include/ui.h \ + include/utf8.h \ + include/utils.h \ keymap.c \ - keymap.h \ mcache.c \ - mcache.h \ mime.c \ minibuffer.c \ - minibuffer.h \ net.c \ pages.c \ - pages.h \ parse.y \ - parser.h \ parser/parser.c \ parser/parser_gemtext.c \ parser/parser_gophermap.c \ @@ -37,19 +42,14 @@ telescope_SOURCES = cmd.c \ parser/parser_textplain.c \ sandbox.c \ session.c \ - session.h \ telescope.c \ - telescope.h \ tofu.c \ u/emoji-matcher.c \ u/genemoji.sh \ u/utf8.c \ u/wrap.c \ ui.c \ - ui.h \ - utf8.h \ - utils.c \ - utils.h + utils.c # phos bundled files telescope_SOURCES += phos/phos.h \ @@ -66,14 +66,15 @@ BUILT_SOURCES = cmd.gen.c compile_flags.txt u/emoji-m CLEANFILES = cmd.gen.c compile_flags.txt u/emoji-matcher.c pages.c \ parse.c +AM_CPPFLAGS = -I$(top_srcdir)/phos -I$(top_srcdir)/include LDADD = $(LIBOBJS) EXTRA_DIST = ChangeLog LICENSE README.md data/emoji.txt pages/*.gmi dist_man1_MANS = telescope.1 -cmd.gen.c: $(srcdir)/cmd.h $(srcdir)/gencmd.awk - ${AWK} -f $(srcdir)/gencmd.awk < $(srcdir)/cmd.h > $@ +cmd.gen.c: $(srcdir)/include/cmd.h $(srcdir)/gencmd.awk + ${AWK} -f $(srcdir)/gencmd.awk < $(srcdir)/include/cmd.h > $@ u/emoji-matcher.c: $(srcdir)/data/emoji.txt $(srcdir)/u/genemoji.sh $(srcdir)/u/genemoji.sh $(srcdir)/data/emoji.txt > $@ @@ -87,9 +88,9 @@ PAGES = $(srcdir)/pages/about_about.gmi \ $(srcdir)/pages/about_help.gmi \ $(srcdir)/pages/about_license.gmi \ $(srcdir)/pages/about_new.gmi -pages.c: pagebundler $(srcdir)/pages.h ${PAGES} +pages.c: pagebundler $(srcdir)/include/pages.h ${PAGES} echo > $@ - echo "#include \"pages.h\"" >> $@ + echo "#include \"include/pages.h\"" >> $@ ./pagebundler $(srcdir)/pages/about_about.gmi >> $@ ./pagebundler $(srcdir)/pages/about_blank.gmi >> $@ ./pagebundler $(srcdir)/pages/about_crash.gmi >> $@ blob - a4fd3fbd593dc70791e26dc9239884f3769cacbd (mode 644) blob + /dev/null --- cmd.h +++ /dev/null @@ -1,79 +0,0 @@ -struct buffer; - -#define CMD(fnname, descr) void fnname(struct buffer *) -#define DEFALIAS(s, d) /* nothing */ - -DEFALIAS(q, cmd_kill_telescope) -DEFALIAS(tabn, cmd_tab_next) -DEFALIAS(tabnew, cmd_tab_new) -DEFALIAS(tabp, cmd_tab_previous) -DEFALIAS(wq, cmd_kill_telescope) -DEFALIAS(open, cmd_load_url) - -CMD(cmd_backward_char, "Move point one character backward."); -CMD(cmd_backward_paragraph, "Move point on paragraph backward."); -CMD(cmd_beginning_of_buffer, "Move point to the beginning of the buffer."); -CMD(cmd_bookmark_page, "Save a page in the bookmark file."); -CMD(cmd_cache_info, "Show cache stats."); -CMD(cmd_clear_minibuf, "Clear the echo area."); -CMD(cmd_dec_fill_column, "Decrement fill-column by two."); -CMD(cmd_end_of_buffer, "Move the point to the end of the buffer."); -CMD(cmd_execute_extended_command, "Execute an internal command."); -CMD(cmd_forward_char, "Move point one character forward."); -CMD(cmd_forward_paragraph, "Move point one paragraph forward."); -CMD(cmd_inc_fill_column, "Increment fill-column by two"); -CMD(cmd_insert_current_candidate, "Copy the current selection text as minibuffer input."); -CMD(cmd_kill_telescope, "Quit Telescope."); -CMD(cmd_link_select, "Select and visit a link using the minibuffer."); -CMD(cmd_list_bookmarks, "Load the bookmarks page."); -CMD(cmd_load_current_url, "Edit the current URL."); -CMD(cmd_load_url, "Prompt for an URL."); -CMD(cmd_mini_abort, "Abort the current minibuffer action."); -CMD(cmd_mini_complete_and_exit, "Complete the current minibuffer action."); -CMD(cmd_mini_delete_backward_char, "Delete the character before the point."); -CMD(cmd_mini_delete_char, "Delete the character after the point."); -CMD(cmd_mini_goto_beginning, "Select the first completion."); -CMD(cmd_mini_goto_end, "Select the last completion."); -CMD(cmd_mini_kill_line, "Delete from point until the end of the line."); -CMD(cmd_mini_next_history_element, "Load the next history element."); -CMD(cmd_mini_previous_history_element, "Load the previous history element."); -CMD(cmd_mini_scroll_down, "Scroll completions up by one visual page"); -CMD(cmd_mini_scroll_up, "Scroll completions up by one visual page"); -CMD(cmd_move_beginning_of_line, "Move point at the beginning of the current visual line."); -CMD(cmd_move_end_of_line, "Move point at the end of the current visual line."); -CMD(cmd_next_button, "Move point to the next link."); -CMD(cmd_next_completion, "Select the next completion."); -CMD(cmd_next_heading, "Move point to the next heading."); -CMD(cmd_next_line, "Move point to the next visual line."); -CMD(cmd_next_page, "Go forward in the page history."); -CMD(cmd_olivetti_mode, "Toggle olivetti-mode."); -CMD(cmd_other_window, "Select the other window."); -CMD(cmd_previous_button, "Move point to the previous link."); -CMD(cmd_previous_completion, "Select the previous completion."); -CMD(cmd_previous_heading, "Move point to the previous heading."); -CMD(cmd_previous_line, "Move point to the previous visual line."); -CMD(cmd_previous_page, "Go backward in the page history."); -CMD(cmd_push_button, "Follow link at point or toggle pre-visibility."); -CMD(cmd_push_button_new_tab, "Follow link at point in a new tab.n"); -CMD(cmd_redraw, "Redraw the screen."); -CMD(cmd_reload_page, "Reload the current page."); -CMD(cmd_reply_last_input, "Reply last input request."); -CMD(cmd_scroll_down, "Scroll down by one visual page"); -CMD(cmd_scroll_line_down, "Scroll down by one line"); -CMD(cmd_scroll_line_up, "Scroll up by one line."); -CMD(cmd_scroll_up, "Scroll up by one visual page"); -CMD(cmd_suspend_telescope, "Suspend the current Telescope session."); -CMD(cmd_swiper, "Jump to a line using the minibuffer."); -CMD(cmd_tab_close, "Close the current tab."); -CMD(cmd_tab_close_other, "Close all tabs but the current one."); -CMD(cmd_tab_undo_close, "Reopen last closed tab."); -CMD(cmd_tab_move, "Move the current tab to the right."); -CMD(cmd_tab_move_to, "Move the current tab to the left."); -CMD(cmd_tab_new, "Open a new tab."); -CMD(cmd_tab_next, "Focus next tab."); -CMD(cmd_tab_previous, "Focus previous tab."); -CMD(cmd_tab_select, "Switch to a tab using the minibuffer."); -CMD(cmd_toc, "Jump to a heading using the minibuffer."); -CMD(cmd_toggle_downloads, "Toggle the downloads side window."); -CMD(cmd_toggle_help, "Toggle side window with help."); -CMD(cmd_toggle_pre_wrap, "Toggle the wrapping of preformatted blocks."); blob - 50a4c8463e720db999afd8a7439dadf1d102a913 (mode 644) blob + /dev/null --- compat.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef COMPAT_H -#define COMPAT_H - -#include "config.h" - -#include -#include - -#include -#include -#include - -#if HAVE_EVENT2 -# include -# include -# include -# include -# include -# include -# include -# include -#else -# include -#endif - -#ifdef HAVE_QUEUE_H -# include -#else -# include "compat/queue.h" -#endif - -#ifdef HAVE_IMSG -# include -#else -# include "compat/imsg.h" -#endif - -#ifdef HAVE_LIBUTIL -# include -# include -#else -# include "compat/ohash.h" -# define FMT_SCALED_STRSIZE 7 /* minus sign, 4 digits, suffix, null byte */ -int fmt_scaled(long long, char *); -#endif - -#ifndef HAVE_ASPRINTF -int asprintf(char**, const char*, ...); -int vasprintf(char**, const char*, va_list); -#endif - -#ifndef HAVE_ERR -void err(int, const char*, ...); -void errx(int, const char*, ...); -void warn(int, const char*, ...); -void warnx(int, const char*, ...); -#else -# include -#endif - -#ifndef HAVE_EXPLICIT_BZERO -void explicit_bzero(void *, size_t); -#endif - -#ifndef HAVE_FREEZERO -void freezero(void*, size_t); -#endif - -#ifndef HAVE_GETDTABLECOUNT -int getdtablecount(void); -#endif - -#ifndef HAVE_GETDTABLESIZE -int getdtablesize(void); -#endif - -#ifndef HAVE_GETPROGNAME -const char *getprogname(void); -#endif - -#ifndef HAVE_MEMMEM -void *memmem(const void*, size_t, const void*, size_t); -#endif - -#ifndef HAVE_RECALLOCARRAY -void *recallocarray(void*, size_t, size_t, size_t); -#endif - -#ifndef HAVE_STRCASESTR -char *strcasestr(const char *, const char *); -#endif - -#ifndef HAVE_STRLCPY -size_t strlcpy(char*, const char*, size_t); -#endif - -#ifndef HAVE_STRLCAT -size_t strlcat(char*, const char*, size_t); -#endif - -#ifndef HAVE_STRSEP -char *strsep(char**, const char*); -#endif - -#ifndef HAVE_STRTONUM -long long strtonum(const char*, long long, long long, const char**); -#endif - -#ifndef HAVE_SETPROCTITLE -void setproctitle(const char*, ...); -#endif - -#endif /* COMPAT_H */ blob - 895de6a295c781e74309b1b0bb844f82ae5e6f11 (mode 644) blob + /dev/null --- compl.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef COMPL_H -#define COMPL_H - -const char *compl_eecmd(void **, void **, const char **); -const char *compl_ts(void **, void **, const char **); -const char *compl_ls(void **, void **, const char **); -const char *compl_swiper(void **, void **, const char **); -const char *compl_toc(void **, void **, const char **); - -#endif blob - adc2a2c9a0fc0506cb9b3aab32c4f063334118ad (mode 644) blob + /dev/null --- defaults.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef DEFAULTS_H -#define DEFAULTS_H - -extern char *download_path; -extern char *new_tab_url; - -extern int autosave; -extern int dont_wrap_pre; -extern int emojify_link; -extern int enable_colors; -extern int fill_column; -extern int fringe_ignore_offset; -extern int hide_pre_blocks; -extern int hide_pre_closing_line; -extern int hide_pre_context; -extern int max_killed_tabs; -extern int olivetti_mode; -extern int set_title; -extern int tab_bar_show; - -extern struct vline fringe; - -struct lineprefix { - const char *prfx1; - const char *prfx2; -}; -extern struct lineprefix line_prefixes[]; - -struct line_face { - int prfx_pair, pair, trail_pair; - int prfx_bg, bg, trail_bg; - int prfx_fg, fg, trail_fg; - int prfx_attr, attr, trail_attr; - - int prefix, text, trail; -}; -extern struct line_face line_faces[]; - -struct tab_face { - int bg_attr, bg_bg, bg_fg; - int t_attr, t_bg, t_fg; - int c_attr, c_bg, c_fg; - - int background, tab, current; -}; -extern struct tab_face tab_face; - -struct body_face { - int lbg, lfg; - int bg, fg; - int rbg, rfg; - - int left, body, right; -}; -extern struct body_face body_face; - -struct download_face { - int bg, fg, attr; - int background; -}; -extern struct download_face download_face; - -struct modeline_face { - int bg, fg, attr; - int background; -}; -extern struct modeline_face modeline_face; - -struct minibuffer_face { - int bg, fg, attr; - int background; -}; -extern struct minibuffer_face minibuffer_face; - -#endif blob - c1a0fce9a9af9b827c7f23a1ee95b36269b4cd3f (mode 644) blob + /dev/null --- fs.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef FS_H -#define FS_H - -#include "compat.h" - -#include - -extern char config_path_base[PATH_MAX]; -extern char data_path_base[PATH_MAX]; -extern char cache_path_base[PATH_MAX]; - -extern char config_path[PATH_MAX]; -extern char lockfile_path[PATH_MAX]; -extern char bookmark_file[PATH_MAX]; -extern char known_hosts_file[PATH_MAX], known_hosts_tmp[PATH_MAX]; -extern char crashed_file[PATH_MAX]; -extern char session_file[PATH_MAX]; - -int fs_init(void); -int fs_main(void); -int lock_session(void); - -#endif blob - /dev/null blob + a4fd3fbd593dc70791e26dc9239884f3769cacbd (mode 644) --- /dev/null +++ include/cmd.h @@ -0,0 +1,79 @@ +struct buffer; + +#define CMD(fnname, descr) void fnname(struct buffer *) +#define DEFALIAS(s, d) /* nothing */ + +DEFALIAS(q, cmd_kill_telescope) +DEFALIAS(tabn, cmd_tab_next) +DEFALIAS(tabnew, cmd_tab_new) +DEFALIAS(tabp, cmd_tab_previous) +DEFALIAS(wq, cmd_kill_telescope) +DEFALIAS(open, cmd_load_url) + +CMD(cmd_backward_char, "Move point one character backward."); +CMD(cmd_backward_paragraph, "Move point on paragraph backward."); +CMD(cmd_beginning_of_buffer, "Move point to the beginning of the buffer."); +CMD(cmd_bookmark_page, "Save a page in the bookmark file."); +CMD(cmd_cache_info, "Show cache stats."); +CMD(cmd_clear_minibuf, "Clear the echo area."); +CMD(cmd_dec_fill_column, "Decrement fill-column by two."); +CMD(cmd_end_of_buffer, "Move the point to the end of the buffer."); +CMD(cmd_execute_extended_command, "Execute an internal command."); +CMD(cmd_forward_char, "Move point one character forward."); +CMD(cmd_forward_paragraph, "Move point one paragraph forward."); +CMD(cmd_inc_fill_column, "Increment fill-column by two"); +CMD(cmd_insert_current_candidate, "Copy the current selection text as minibuffer input."); +CMD(cmd_kill_telescope, "Quit Telescope."); +CMD(cmd_link_select, "Select and visit a link using the minibuffer."); +CMD(cmd_list_bookmarks, "Load the bookmarks page."); +CMD(cmd_load_current_url, "Edit the current URL."); +CMD(cmd_load_url, "Prompt for an URL."); +CMD(cmd_mini_abort, "Abort the current minibuffer action."); +CMD(cmd_mini_complete_and_exit, "Complete the current minibuffer action."); +CMD(cmd_mini_delete_backward_char, "Delete the character before the point."); +CMD(cmd_mini_delete_char, "Delete the character after the point."); +CMD(cmd_mini_goto_beginning, "Select the first completion."); +CMD(cmd_mini_goto_end, "Select the last completion."); +CMD(cmd_mini_kill_line, "Delete from point until the end of the line."); +CMD(cmd_mini_next_history_element, "Load the next history element."); +CMD(cmd_mini_previous_history_element, "Load the previous history element."); +CMD(cmd_mini_scroll_down, "Scroll completions up by one visual page"); +CMD(cmd_mini_scroll_up, "Scroll completions up by one visual page"); +CMD(cmd_move_beginning_of_line, "Move point at the beginning of the current visual line."); +CMD(cmd_move_end_of_line, "Move point at the end of the current visual line."); +CMD(cmd_next_button, "Move point to the next link."); +CMD(cmd_next_completion, "Select the next completion."); +CMD(cmd_next_heading, "Move point to the next heading."); +CMD(cmd_next_line, "Move point to the next visual line."); +CMD(cmd_next_page, "Go forward in the page history."); +CMD(cmd_olivetti_mode, "Toggle olivetti-mode."); +CMD(cmd_other_window, "Select the other window."); +CMD(cmd_previous_button, "Move point to the previous link."); +CMD(cmd_previous_completion, "Select the previous completion."); +CMD(cmd_previous_heading, "Move point to the previous heading."); +CMD(cmd_previous_line, "Move point to the previous visual line."); +CMD(cmd_previous_page, "Go backward in the page history."); +CMD(cmd_push_button, "Follow link at point or toggle pre-visibility."); +CMD(cmd_push_button_new_tab, "Follow link at point in a new tab.n"); +CMD(cmd_redraw, "Redraw the screen."); +CMD(cmd_reload_page, "Reload the current page."); +CMD(cmd_reply_last_input, "Reply last input request."); +CMD(cmd_scroll_down, "Scroll down by one visual page"); +CMD(cmd_scroll_line_down, "Scroll down by one line"); +CMD(cmd_scroll_line_up, "Scroll up by one line."); +CMD(cmd_scroll_up, "Scroll up by one visual page"); +CMD(cmd_suspend_telescope, "Suspend the current Telescope session."); +CMD(cmd_swiper, "Jump to a line using the minibuffer."); +CMD(cmd_tab_close, "Close the current tab."); +CMD(cmd_tab_close_other, "Close all tabs but the current one."); +CMD(cmd_tab_undo_close, "Reopen last closed tab."); +CMD(cmd_tab_move, "Move the current tab to the right."); +CMD(cmd_tab_move_to, "Move the current tab to the left."); +CMD(cmd_tab_new, "Open a new tab."); +CMD(cmd_tab_next, "Focus next tab."); +CMD(cmd_tab_previous, "Focus previous tab."); +CMD(cmd_tab_select, "Switch to a tab using the minibuffer."); +CMD(cmd_toc, "Jump to a heading using the minibuffer."); +CMD(cmd_toggle_downloads, "Toggle the downloads side window."); +CMD(cmd_toggle_help, "Toggle side window with help."); +CMD(cmd_toggle_pre_wrap, "Toggle the wrapping of preformatted blocks."); blob - /dev/null blob + 50a4c8463e720db999afd8a7439dadf1d102a913 (mode 644) --- /dev/null +++ include/compat.h @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef COMPAT_H +#define COMPAT_H + +#include "config.h" + +#include +#include + +#include +#include +#include + +#if HAVE_EVENT2 +# include +# include +# include +# include +# include +# include +# include +# include +#else +# include +#endif + +#ifdef HAVE_QUEUE_H +# include +#else +# include "compat/queue.h" +#endif + +#ifdef HAVE_IMSG +# include +#else +# include "compat/imsg.h" +#endif + +#ifdef HAVE_LIBUTIL +# include +# include +#else +# include "compat/ohash.h" +# define FMT_SCALED_STRSIZE 7 /* minus sign, 4 digits, suffix, null byte */ +int fmt_scaled(long long, char *); +#endif + +#ifndef HAVE_ASPRINTF +int asprintf(char**, const char*, ...); +int vasprintf(char**, const char*, va_list); +#endif + +#ifndef HAVE_ERR +void err(int, const char*, ...); +void errx(int, const char*, ...); +void warn(int, const char*, ...); +void warnx(int, const char*, ...); +#else +# include +#endif + +#ifndef HAVE_EXPLICIT_BZERO +void explicit_bzero(void *, size_t); +#endif + +#ifndef HAVE_FREEZERO +void freezero(void*, size_t); +#endif + +#ifndef HAVE_GETDTABLECOUNT +int getdtablecount(void); +#endif + +#ifndef HAVE_GETDTABLESIZE +int getdtablesize(void); +#endif + +#ifndef HAVE_GETPROGNAME +const char *getprogname(void); +#endif + +#ifndef HAVE_MEMMEM +void *memmem(const void*, size_t, const void*, size_t); +#endif + +#ifndef HAVE_RECALLOCARRAY +void *recallocarray(void*, size_t, size_t, size_t); +#endif + +#ifndef HAVE_STRCASESTR +char *strcasestr(const char *, const char *); +#endif + +#ifndef HAVE_STRLCPY +size_t strlcpy(char*, const char*, size_t); +#endif + +#ifndef HAVE_STRLCAT +size_t strlcat(char*, const char*, size_t); +#endif + +#ifndef HAVE_STRSEP +char *strsep(char**, const char*); +#endif + +#ifndef HAVE_STRTONUM +long long strtonum(const char*, long long, long long, const char**); +#endif + +#ifndef HAVE_SETPROCTITLE +void setproctitle(const char*, ...); +#endif + +#endif /* COMPAT_H */ blob - /dev/null blob + 895de6a295c781e74309b1b0bb844f82ae5e6f11 (mode 644) --- /dev/null +++ include/compl.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef COMPL_H +#define COMPL_H + +const char *compl_eecmd(void **, void **, const char **); +const char *compl_ts(void **, void **, const char **); +const char *compl_ls(void **, void **, const char **); +const char *compl_swiper(void **, void **, const char **); +const char *compl_toc(void **, void **, const char **); + +#endif blob - /dev/null blob + adc2a2c9a0fc0506cb9b3aab32c4f063334118ad (mode 644) --- /dev/null +++ include/defaults.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef DEFAULTS_H +#define DEFAULTS_H + +extern char *download_path; +extern char *new_tab_url; + +extern int autosave; +extern int dont_wrap_pre; +extern int emojify_link; +extern int enable_colors; +extern int fill_column; +extern int fringe_ignore_offset; +extern int hide_pre_blocks; +extern int hide_pre_closing_line; +extern int hide_pre_context; +extern int max_killed_tabs; +extern int olivetti_mode; +extern int set_title; +extern int tab_bar_show; + +extern struct vline fringe; + +struct lineprefix { + const char *prfx1; + const char *prfx2; +}; +extern struct lineprefix line_prefixes[]; + +struct line_face { + int prfx_pair, pair, trail_pair; + int prfx_bg, bg, trail_bg; + int prfx_fg, fg, trail_fg; + int prfx_attr, attr, trail_attr; + + int prefix, text, trail; +}; +extern struct line_face line_faces[]; + +struct tab_face { + int bg_attr, bg_bg, bg_fg; + int t_attr, t_bg, t_fg; + int c_attr, c_bg, c_fg; + + int background, tab, current; +}; +extern struct tab_face tab_face; + +struct body_face { + int lbg, lfg; + int bg, fg; + int rbg, rfg; + + int left, body, right; +}; +extern struct body_face body_face; + +struct download_face { + int bg, fg, attr; + int background; +}; +extern struct download_face download_face; + +struct modeline_face { + int bg, fg, attr; + int background; +}; +extern struct modeline_face modeline_face; + +struct minibuffer_face { + int bg, fg, attr; + int background; +}; +extern struct minibuffer_face minibuffer_face; + +#endif blob - /dev/null blob + c1a0fce9a9af9b827c7f23a1ee95b36269b4cd3f (mode 644) --- /dev/null +++ include/fs.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef FS_H +#define FS_H + +#include "compat.h" + +#include + +extern char config_path_base[PATH_MAX]; +extern char data_path_base[PATH_MAX]; +extern char cache_path_base[PATH_MAX]; + +extern char config_path[PATH_MAX]; +extern char lockfile_path[PATH_MAX]; +extern char bookmark_file[PATH_MAX]; +extern char known_hosts_file[PATH_MAX], known_hosts_tmp[PATH_MAX]; +extern char crashed_file[PATH_MAX]; +extern char session_file[PATH_MAX]; + +int fs_init(void); +int fs_main(void); +int lock_session(void); + +#endif blob - /dev/null blob + 3b1ca4e8c8e72b9764f5845bffdefefd794966b8 (mode 644) --- /dev/null +++ include/keymap.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef KEYMAP_H +#define KEYMAP_H + +#include "compat.h" + +#include + +struct buffer; + +struct kmap { + TAILQ_HEAD(map, keymap) m; + void (*unhandled_input)(void); +}; +extern struct kmap global_map, minibuffer_map; + +typedef void(interactivefn)(struct buffer *); + +struct keymap { + int meta; + int key; + struct kmap map; + interactivefn *fn; + + TAILQ_ENTRY(keymap) keymaps; +}; + +struct thiskey { + short meta; + int key; + uint32_t cp; +}; + +enum { + LK_ADVANCED_MAP, + LK_MATCHED, + LK_UNBOUND, +}; + +int kbd(const char *); +const char *unkbd(int); +int kmap_define_key(struct kmap *, const char *, interactivefn *); +int lookup_key(struct kmap **, struct thiskey *, struct buffer *); + +#endif blob - /dev/null blob + e4bb1a34d16bf0c72cdd5c0ae6ff1cd3e89fa783 (mode 644) --- /dev/null +++ include/mcache.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef MCACHE_H +#define MCACHE_H + +struct tab; + +void mcache_init(void); +int mcache_tab(struct tab *); +int mcache_lookup(const char *, struct tab *); +void mcache_info(size_t *, size_t *); + +#endif blob - /dev/null blob + 70795ac34c8058672ee0a2487c150076873f97b8 (mode 644) --- /dev/null +++ include/minibuffer.h @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef MINIBUFFER_H +#define MINIBUFFER_H + +#include "telescope.h" + +/* need to be true-ish */ +#define MB_READ 1 +#define MB_COMPREAD 2 + +/* + * Completion provider function. These functions are called + * asynchronously. The function should compute the next completion + * using the given parameter `state' and modify it eventually. To + * signal the end of the completions, complfn should return NULL: the + * value of state will then be discarded and the function never called + * again. The second parameter is some extra metadata per-line; it'll + * be available as line->data on the selected line during the + * minibuffer lifecycle. The third parameter is an extra description + * field for the current item. + */ +typedef const char *(complfn)(void **, void **, const char **); + +extern struct histhead eecmd_history, + ir_history, + lu_history, + read_history; + +struct ministate { + char *curmesg; + + char prompt[64]; + void (*donefn)(void); + void (*abortfn)(void); + + char buf[1025]; + struct line line; + struct vline vline; + struct buffer buffer; + + struct histhead *history; + struct hist *hist_cur; + size_t hist_off; + + struct { + struct buffer buffer; + complfn *fn; + void *data; + } compl; +}; +extern struct ministate ministate; + +extern struct buffer minibufferwin; +extern int in_minibuffer; + +void recompute_completions(int); +int minibuffer_insert_current_candidate(void); +void minibuffer_taint_hist(void); +void minibuffer_self_insert(void); +void sensible_self_insert(void); +void eecmd_select(void); +void ir_select_gemini(void); +void ir_select_reply(void); +void ir_select_gopher(void); +void lu_select(void); +void bp_select(void); +void ts_select(void); +void ls_select(void); +void swiper_select(void); +void toc_select(void); + +void enter_minibuffer(void(*)(void), void(*)(void), void(*)(void), + struct histhead *, complfn *, void *); + +void exit_minibuffer(void); +void yornp(const char *, void (*)(int, struct tab *), struct tab *); + +/* + * minibuffer_read asks the user for something using the minibuffer. + * The first argument is the string prompt. The second and third are + * the callback to call when done and the data; the callback function + * can't be NULL. + */ +void minibuffer_read(const char *, + void (*)(const char *, struct tab *), struct tab *); + +void vmessage(const char *, va_list); +void message(const char *, ...) __attribute__((format(printf, 1, 2))); +void minibuffer_init(void); + +#endif blob - /dev/null blob + 93fd09804c8dc8c83fd775626dbc9a2de14f997d (mode 644) --- /dev/null +++ include/pages.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef PAGES_H +#define PAGES_H + +#include +#include + +extern const uint8_t about_about[]; +extern size_t about_about_len; + +extern const uint8_t about_blank[]; +extern size_t about_blank_len; + +extern const uint8_t about_crash[]; +extern size_t about_crash_len; + +extern const uint8_t about_help[]; +extern size_t about_help_len; + +extern const uint8_t about_license[]; +extern size_t about_license_len; + +extern const uint8_t about_new[]; +extern size_t about_new_len; + +extern const uint8_t bookmarks[]; +extern size_t bookmarks_len; + +#endif blob - /dev/null blob + 372529021fd1833629b45acdab87efb6e8a76704 (mode 644) --- /dev/null +++ include/parser.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef PARSER_H +#define PARSER_H + +#include "telescope.h" + +typedef void (*parserfn)(struct parser *); + +void parser_init(struct tab *, parserfn); +int parser_parse(struct tab *, const char *, size_t); +int parser_free(struct tab *); +int parser_serialize(struct tab *, struct evbuffer *); + +int parser_append(struct parser*, const char*, size_t); +int parser_set_buf(struct parser*, const char*, size_t); +int parser_foreach_line(struct parser*, const char*, size_t, parsechunkfn); + +/* parser_gemtext.c */ +void gemtext_initparser(struct parser*); + +/* parser_gophermap.c */ +void gophermap_initparser(struct parser *); + +/* parser_textpatch.c */ +void textpatch_initparser(struct parser *); + +/* parser_textplain.c */ +void textplain_initparser(struct parser*); + +#endif blob - /dev/null blob + 43a69b8fbf331f85f67f3c290166e110e243b5c4 (mode 644) --- /dev/null +++ include/session.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SESSION_H +#define SESSION_H + +#include "telescope.h" + +struct session_tab { + uint32_t flags; + char uri[GEMINI_URL_LEN]; + char title[TITLE_MAX]; + size_t top_line; + size_t current_line; +}; + +struct session_tab_hist { + char uri[GEMINI_URL_LEN]; + int future; +}; + +void switch_to_tab(struct tab *); +unsigned int tab_new_id(void); +struct tab *new_tab(const char *, const char *base, struct tab *); +void kill_tab(struct tab *, int); +struct tab *unkill_tab(void); +void free_tab(struct tab *); +void stop_tab(struct tab*); + +void save_session(void); + +void autosave_init(void); +void autosave_timer(int, short, void *); +void autosave_hook(void); + +#endif blob - /dev/null blob + 0cb0ce4cfe1f0a4ffcdad5198e41bc316197341e (mode 644) --- /dev/null +++ include/telescope.h @@ -0,0 +1,364 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef TELESCOPE_H +#define TELESCOPE_H + +#include "compat.h" + +#include + +#include "cmd.h" +#include "phos.h" + +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + +#define GEMINI_URL_LEN 1024 +#define TITLE_MAX 128+1 /* account for NUL too */ + +#define SIDE_WINDOW_LEFT 0x1 +#define SIDE_WINDOW_BOTTOM 0x2 + +struct imsgev { + struct imsgbuf ibuf; + void (*handler)(int, short, void *); + struct event ev; + short events; +}; + +enum imsg_type { + /* ui <-> client/fs */ + IMSG_GET, /* data is URL, peerid the tab id */ + IMSG_GET_FILE, /* data is path, without \r\n or such */ + IMSG_GET_RAW, /* get but with an explicit req str */ + IMSG_ERR, + IMSG_CHECK_CERT, + IMSG_CERT_STATUS, + IMSG_GOT_CODE, + IMSG_GOT_META, + IMSG_PROCEED, + IMSG_STOP, + IMSG_BUF, + IMSG_EOF, + IMSG_QUIT, + + /* ui <-> fs */ + IMSG_INIT, + IMSG_TOFU, + IMSG_BOOKMARK_PAGE, + IMSG_BOOKMARK_OK, + IMSG_SAVE_CERT, + IMSG_SAVE_CERT_OK, + IMSG_UPDATE_CERT, + IMSG_UPDATE_CERT_OK, + + IMSG_FILE_OPEN, + IMSG_FILE_OPENED, + + IMSG_SESSION_START, + IMSG_SESSION_TAB, + IMSG_SESSION_TAB_HIST, + IMSG_SESSION_END, +}; + +enum line_type { + /* text/gemini */ + LINE_TEXT, + LINE_LINK, + LINE_TITLE_1, + LINE_TITLE_2, + LINE_TITLE_3, + LINE_ITEM, + LINE_QUOTE, + LINE_PRE_START, + LINE_PRE_CONTENT, + LINE_PRE_END, + + /* text/x-patch */ + LINE_PATCH, + LINE_PATCH_HDR, + LINE_PATCH_HUNK_HDR, + LINE_PATCH_ADD, + LINE_PATCH_DEL, + + /* minibuffer */ + LINE_COMPL, + LINE_COMPL_CURRENT, + + /* help */ + LINE_HELP, + + /* download */ + LINE_DOWNLOAD, + LINE_DOWNLOAD_DONE, + LINE_DOWNLOAD_INFO, + + /* misc ui */ + LINE_FRINGE, +}; + +/* for lines: mark as hidden */ +#define L_HIDDEN 1 + +/* for vlines: mark as continuation */ +#define L_CONTINUATION 2 + +struct line { + enum line_type type; + char *line; + char *alt; + void *data; + int flags; + TAILQ_ENTRY(line) lines; +}; + +struct vline { + struct line *parent; + char *line; + int flags; + TAILQ_ENTRY(vline) vlines; +}; + +struct parser; + +typedef int (*parsechunkfn)(struct parser*, const char*, size_t); +typedef int (*parserfreefn)(struct parser*); +typedef int (*parserserial)(struct parser*, struct evbuffer *); + +typedef void (imsg_handlerfn)(struct imsg*, size_t); + +struct parser { + const char *name; + char title[128+1]; + char *buf; + size_t len; + size_t cap; + +#define PARSER_IN_BODY 1 +#define PARSER_IN_PRE 2 +#define PARSER_IN_PATCH_HDR 4 + int flags; + void (*init)(struct parser *); + parsechunkfn parse; + parserfreefn free; + parserserial serialize; + + TAILQ_HEAD(, line) head; +}; + +/* + * differnt types of trust for a certificate. Following + * gemini://thfr.info/gemini/modified-trust-verify.gmi + */ +enum trust_state { + TS_UNKNOWN, + TS_UNTRUSTED, + TS_TEMP_TRUSTED, + TS_TRUSTED, + TS_VERIFIED, +}; + +struct tofu_entry { + char domain[GEMINI_URL_LEN]; + + /* + * enough space for ``PROTO:HASH''. probably isn't a good + * idea tho. + */ + char hash[128+1]; + int verified; +}; + +struct histhead { + TAILQ_HEAD(mhisthead, hist) head; + size_t len; +}; +struct hist { + char h[1025]; + size_t line_off; + size_t current_off; + TAILQ_ENTRY(hist) entries; +}; + +struct buffer { + struct parser page; + + size_t last_line_off; + int force_redraw; + + int curs_x; + int curs_y; + size_t line_off; + size_t line_max; + struct vline *top_line; + struct vline *current_line; + size_t cpoff; + TAILQ_HEAD(vhead, vline) head; +}; + +#define TAB_CURRENT 0x1 /* only for save_session */ +#define TAB_KILLED 0x2 /* only for save_session */ +#define TAB_URGENT 0x4 +#define TAB_LAZY 0x8 /* to lazy load tabs */ + +#define NEW_TAB_URL "about:new" + +TAILQ_HEAD(tabshead, tab); +extern struct tabshead tabshead; +extern struct tabshead ktabshead; +struct tab { + TAILQ_ENTRY(tab) tabs; + uint32_t id; + uint32_t flags; + + char *cert; + enum trust_state trust; + struct proxy *proxy; + struct phos_uri uri; + struct histhead hist; + struct hist *hist_cur; + size_t hist_off; + char *last_input_url; + + int code; + char meta[GEMINI_URL_LEN]; + int redirect_count; + + struct buffer buffer; + + short loading_anim; + short loading_anim_step; + struct event loadingev; +}; + +extern TAILQ_HEAD(proxylist, proxy) proxies; +struct proxy { + char *match_proto; + + char *host; + char *port; + int proto; + + TAILQ_ENTRY(proxy) proxies; +}; + +enum { + PROTO_FINGER, + PROTO_GEMINI, + PROTO_GOPHER, + /* ... */ +}; + +struct get_req { + int proto; + char host[254]; + char port[16]; + char req[1027]; +}; + +struct cmd { + const char *cmd; + void (*fn)(struct buffer *); + const char *descr; +}; +extern struct cmd cmds[]; + +/* defaults.c */ +void config_init(void); +int config_setprfx(const char *, const char *, const char *); +int config_setvari(const char *, int); +int config_setvars(const char *, char *); +int config_setcolor(int, const char *, int, int, int); +int config_setattr(const char *, int, int, int); +void config_apply_style(void); + +/* downloads.c */ +extern STAILQ_HEAD(downloads, download) downloads; +struct download { + uint32_t id; + int fd; + size_t bytes; + char *path; + STAILQ_ENTRY(download) entries; +}; + +void recompute_downloads(void); +void enqueue_download(uint32_t, const char *); +struct download *download_by_id(uint32_t); + +/* help.c */ +void recompute_help(void); + +/* hist.c */ +void hist_clear(struct histhead *); +void hist_clear_forward(struct histhead*, struct hist*); +void hist_push(struct histhead*, struct hist*); +void hist_add_before(struct histhead *, struct hist *, struct hist *); +struct hist *hist_pop(struct histhead *); + +/* mime.c */ +int setup_parser_for(struct tab*); + +/* net.c */ +int net_main(void); + +/* parse.y */ +void parseconfig(const char *, int); + +/* sandbox.c */ +void sandbox_net_process(void); +void sandbox_ui_process(void); +void sandbox_fs_process(void); + +/* telescope.c */ +extern int operating; +extern int safe_mode; + +#define LU_MODE_NONE 0x0 +#define LU_MODE_NOHIST 0x1 +#define LU_MODE_NOCACHE 0x2 + +void gopher_send_search_req(struct tab *, const char *); +int load_page_from_str(struct tab *, const char *); +void load_url(struct tab *, const char *, const char *, int); +void load_url_in_tab(struct tab *, const char *, const char *, int); +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); + +/* tofu.c */ +void tofu_init(struct ohash*, unsigned int, ptrdiff_t); +struct tofu_entry *tofu_lookup(struct ohash*, const char*, const char*); +void tofu_add(struct ohash*, struct tofu_entry*); +void tofu_update(struct ohash*, struct tofu_entry*); +void tofu_temp_trust(struct ohash *, const char *, const char *, const char *); + +/* util.c */ + +/* wrap.c */ +void erase_buffer(struct buffer *); +void empty_linelist(struct buffer*); +void empty_vlist(struct buffer*); +int wrap_one(struct buffer *, const char *, struct line *, size_t); +int wrap_text(struct buffer*, const char*, struct line*, size_t); +int hardwrap_text(struct buffer*, struct line*, size_t); +int wrap_page(struct buffer *, int width); + +#endif /* TELESCOPE_H */ blob - /dev/null blob + fc246f83cadcb8f31f2b8a7fb2de68b04cd61937 (mode 644) --- /dev/null +++ include/ui.h @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef UI_H +#define UI_H + +#include "keymap.h" +#include "telescope.h" + +extern int body_lines; +extern int body_cols; + +extern struct kmap global_map, minibuffer_map, *current_map, *base_map; + +struct excursion { + int curs_x, curs_y; + size_t line_off; + struct vline *current_line; + struct vline *top_line; + size_t cpoff; +}; + +enum pairs { + PTL_BG = 1, + PTL_TAB, + PTL_CURR, + + PBODY, + PBLEFT, + PBRIGHT, + + PT, + PT_PRFX, + PT_TRAIL, + PL, + PL_PRFX, + PL_TRAIL, + PT1, + PT1_PRFX, + PT1_TRAIL, + PT2, + PT2_PRFX, + PT2_TRAIL, + PT3, + PT3_PRFX, + PT3_TRAIL, + PI, + PI_PRFX, + PI_TRAIL, + PQ, + PQ_PRFX, + PQ_TRAIL, + PPSTART, + PPSTART_PRFX, + PPSTART_TRAIL, + PP, + PP_PRFX, + PP_TRAIL, + PPEND, + PPEND_PRFX, + PPEND_TRAIL, + + PPATCH, + PPATCH_PRFX, + PPATCH_TRAIL, + PPATCH_HDR, + PPATCH_HDR_PRFX, + PPATCH_HDR_TRAIL, + PPATCH_HUNK_HDR, + PPATCH_HUNK_HDR_PRFX, + PPATCH_HUNK_HDR_TRAIL, + PPATCH_ADD, + PPATCH_ADD_PRFX, + PPATCH_ADD_TRAIL, + PPATCH_DEL, + PPATCH_DEL_PRFX, + PPATCH_DEL_TRAIL, + + PCOMPL_PRFX, + PCOMPL, + PCOMPL_TRAIL, + + PCOMPL_CURR_PRFX, + PCOMPL_CURR, + PCOMPL_CURR_TRAIL, + + PHELP_PRFX, + PHELP, + PHELP_TRAIL, + + PDOWNLOAD_PRFX, + PDOWNLOAD, + PDOWNLOAD_TRAIL, + + PDOWNLOAD_DONE_PRFX, + PDOWNLOAD_DONE, + PDOWNLOAD_DONE_TRAIL, + + PDOWNLOAD_INFO_PRFX, + PDOWNLOAD_INFO, + PDOWNLOAD_INFO_TRAIL, + + PDOWNLOAD_WIN, + + PMODELINE, + + PMINIBUF, + + PFRINGE_PRFX, + PFRINGE, + PFRINGE_TRAIL, +}; + +extern struct thiskey thiskey; + +extern struct tab *current_tab; + +extern struct buffer helpwin; +extern int help_lines, help_cols; + +extern struct buffer downloadwin; +extern int download_lines; +extern int download_cols; + +void get_scroll_position(struct tab *, size_t *, size_t *); +void save_excursion(struct excursion *, struct buffer *); +void restore_excursion(struct excursion *, struct buffer *); +void global_key_unbound(void); +struct buffer *current_buffer(void); +struct vline *adjust_line(struct vline *, struct buffer *); +void start_loading_anim(struct tab *); + +int ui_print_colors(void); +int ui_init(void); +void ui_main_loop(void); +void ui_on_tab_loaded(struct tab *); +void ui_on_tab_refresh(struct tab *); +void ui_on_download_refresh(void); +const char *ui_keyname(int); +void ui_toggle_side_window(int); +void ui_show_downloads_pane(void); +void ui_schedule_redraw(void); +void ui_after_message_hook(void); +void ui_require_input(struct tab *, int, void (*)(void)); +void ui_yornp(const char *, void (*)(int, struct tab *), struct tab *); +void ui_read(const char *, void (*)(const char *, struct tab *), struct tab *, const char *); +void ui_other_window(void); +void ui_suspend(void); +void ui_end(void); + +#endif blob - /dev/null blob + 8f05942c15dbe9f9e528175f4043bb86791acb67 (mode 644) --- /dev/null +++ include/utf8.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef UTF8_H +#define UTF8_H + +#include +#include + +/* utf8.c */ +uint32_t utf8_decode(uint32_t*restrict, uint32_t*restrict, uint8_t); +size_t utf8_encode(uint32_t, char*); +char *utf8_nth(char*, size_t); +size_t utf8_cplen(char*); +size_t utf8_chwidth(uint32_t); +size_t utf8_snwidth(const char*, size_t); +size_t utf8_swidth(const char*); +size_t utf8_swidth_between(const char*, const char*); +char *utf8_next_cp(const char*); +char *utf8_prev_cp(const char*, const char*); +int emojied_line(const char *, const char **); + +/* emoji-matcher.c */ +int is_emoji(uint32_t); + +#endif blob - /dev/null blob + 86b7395a7d1e2319fcd94a1da10c3be28ff1e45c (mode 644) --- /dev/null +++ include/utils.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Omar Polo + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef UTILS_H +#define UTILS_H + +int mark_nonblock(int); + +int has_prefix(const char*, const char*); +int has_suffix(const char *, const char *); +int unicode_isspace(uint32_t); +int unicode_isgraph(uint32_t); + +int dispatch_imsg(struct imsgev *, short, imsg_handlerfn **, size_t); +int imsg_compose_event(struct imsgev *, uint16_t, uint32_t, pid_t, int, const void *, uint16_t); + +void *hash_alloc(size_t, void *); +void *hash_calloc(size_t, size_t, void *); +void hash_free(void *, void *); + +#endif /* UTILS_H */ blob - 3b1ca4e8c8e72b9764f5845bffdefefd794966b8 (mode 644) blob + /dev/null --- keymap.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef KEYMAP_H -#define KEYMAP_H - -#include "compat.h" - -#include - -struct buffer; - -struct kmap { - TAILQ_HEAD(map, keymap) m; - void (*unhandled_input)(void); -}; -extern struct kmap global_map, minibuffer_map; - -typedef void(interactivefn)(struct buffer *); - -struct keymap { - int meta; - int key; - struct kmap map; - interactivefn *fn; - - TAILQ_ENTRY(keymap) keymaps; -}; - -struct thiskey { - short meta; - int key; - uint32_t cp; -}; - -enum { - LK_ADVANCED_MAP, - LK_MATCHED, - LK_UNBOUND, -}; - -int kbd(const char *); -const char *unkbd(int); -int kmap_define_key(struct kmap *, const char *, interactivefn *); -int lookup_key(struct kmap **, struct thiskey *, struct buffer *); - -#endif blob - e4bb1a34d16bf0c72cdd5c0ae6ff1cd3e89fa783 (mode 644) blob + /dev/null --- mcache.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2022 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef MCACHE_H -#define MCACHE_H - -struct tab; - -void mcache_init(void); -int mcache_tab(struct tab *); -int mcache_lookup(const char *, struct tab *); -void mcache_info(size_t *, size_t *); - -#endif blob - 70795ac34c8058672ee0a2487c150076873f97b8 (mode 644) blob + /dev/null --- minibuffer.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef MINIBUFFER_H -#define MINIBUFFER_H - -#include "telescope.h" - -/* need to be true-ish */ -#define MB_READ 1 -#define MB_COMPREAD 2 - -/* - * Completion provider function. These functions are called - * asynchronously. The function should compute the next completion - * using the given parameter `state' and modify it eventually. To - * signal the end of the completions, complfn should return NULL: the - * value of state will then be discarded and the function never called - * again. The second parameter is some extra metadata per-line; it'll - * be available as line->data on the selected line during the - * minibuffer lifecycle. The third parameter is an extra description - * field for the current item. - */ -typedef const char *(complfn)(void **, void **, const char **); - -extern struct histhead eecmd_history, - ir_history, - lu_history, - read_history; - -struct ministate { - char *curmesg; - - char prompt[64]; - void (*donefn)(void); - void (*abortfn)(void); - - char buf[1025]; - struct line line; - struct vline vline; - struct buffer buffer; - - struct histhead *history; - struct hist *hist_cur; - size_t hist_off; - - struct { - struct buffer buffer; - complfn *fn; - void *data; - } compl; -}; -extern struct ministate ministate; - -extern struct buffer minibufferwin; -extern int in_minibuffer; - -void recompute_completions(int); -int minibuffer_insert_current_candidate(void); -void minibuffer_taint_hist(void); -void minibuffer_self_insert(void); -void sensible_self_insert(void); -void eecmd_select(void); -void ir_select_gemini(void); -void ir_select_reply(void); -void ir_select_gopher(void); -void lu_select(void); -void bp_select(void); -void ts_select(void); -void ls_select(void); -void swiper_select(void); -void toc_select(void); - -void enter_minibuffer(void(*)(void), void(*)(void), void(*)(void), - struct histhead *, complfn *, void *); - -void exit_minibuffer(void); -void yornp(const char *, void (*)(int, struct tab *), struct tab *); - -/* - * minibuffer_read asks the user for something using the minibuffer. - * The first argument is the string prompt. The second and third are - * the callback to call when done and the data; the callback function - * can't be NULL. - */ -void minibuffer_read(const char *, - void (*)(const char *, struct tab *), struct tab *); - -void vmessage(const char *, va_list); -void message(const char *, ...) __attribute__((format(printf, 1, 2))); -void minibuffer_init(void); - -#endif blob - 93fd09804c8dc8c83fd775626dbc9a2de14f997d (mode 644) blob + /dev/null --- pages.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef PAGES_H -#define PAGES_H - -#include -#include - -extern const uint8_t about_about[]; -extern size_t about_about_len; - -extern const uint8_t about_blank[]; -extern size_t about_blank_len; - -extern const uint8_t about_crash[]; -extern size_t about_crash_len; - -extern const uint8_t about_help[]; -extern size_t about_help_len; - -extern const uint8_t about_license[]; -extern size_t about_license_len; - -extern const uint8_t about_new[]; -extern size_t about_new_len; - -extern const uint8_t bookmarks[]; -extern size_t bookmarks_len; - -#endif blob - 372529021fd1833629b45acdab87efb6e8a76704 (mode 644) blob + /dev/null --- parser.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef PARSER_H -#define PARSER_H - -#include "telescope.h" - -typedef void (*parserfn)(struct parser *); - -void parser_init(struct tab *, parserfn); -int parser_parse(struct tab *, const char *, size_t); -int parser_free(struct tab *); -int parser_serialize(struct tab *, struct evbuffer *); - -int parser_append(struct parser*, const char*, size_t); -int parser_set_buf(struct parser*, const char*, size_t); -int parser_foreach_line(struct parser*, const char*, size_t, parsechunkfn); - -/* parser_gemtext.c */ -void gemtext_initparser(struct parser*); - -/* parser_gophermap.c */ -void gophermap_initparser(struct parser *); - -/* parser_textpatch.c */ -void textpatch_initparser(struct parser *); - -/* parser_textplain.c */ -void textplain_initparser(struct parser*); - -#endif blob - 43a69b8fbf331f85f67f3c290166e110e243b5c4 (mode 644) blob + /dev/null --- session.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef SESSION_H -#define SESSION_H - -#include "telescope.h" - -struct session_tab { - uint32_t flags; - char uri[GEMINI_URL_LEN]; - char title[TITLE_MAX]; - size_t top_line; - size_t current_line; -}; - -struct session_tab_hist { - char uri[GEMINI_URL_LEN]; - int future; -}; - -void switch_to_tab(struct tab *); -unsigned int tab_new_id(void); -struct tab *new_tab(const char *, const char *base, struct tab *); -void kill_tab(struct tab *, int); -struct tab *unkill_tab(void); -void free_tab(struct tab *); -void stop_tab(struct tab*); - -void save_session(void); - -void autosave_init(void); -void autosave_timer(int, short, void *); -void autosave_hook(void); - -#endif blob - 21778771969b58af00d8f60052518efdf7759955 (mode 644) blob + /dev/null --- telescope.h +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef TELESCOPE_H -#define TELESCOPE_H - -#include "compat.h" - -#include - -#include "cmd.h" -#include "phos/phos.h" - -#define MIN(a, b) ((a) < (b) ? (a) : (b)) -#define MAX(a, b) ((a) > (b) ? (a) : (b)) - -#define GEMINI_URL_LEN 1024 -#define TITLE_MAX 128+1 /* account for NUL too */ - -#define SIDE_WINDOW_LEFT 0x1 -#define SIDE_WINDOW_BOTTOM 0x2 - -struct imsgev { - struct imsgbuf ibuf; - void (*handler)(int, short, void *); - struct event ev; - short events; -}; - -enum imsg_type { - /* ui <-> client/fs */ - IMSG_GET, /* data is URL, peerid the tab id */ - IMSG_GET_FILE, /* data is path, without \r\n or such */ - IMSG_GET_RAW, /* get but with an explicit req str */ - IMSG_ERR, - IMSG_CHECK_CERT, - IMSG_CERT_STATUS, - IMSG_GOT_CODE, - IMSG_GOT_META, - IMSG_PROCEED, - IMSG_STOP, - IMSG_BUF, - IMSG_EOF, - IMSG_QUIT, - - /* ui <-> fs */ - IMSG_INIT, - IMSG_TOFU, - IMSG_BOOKMARK_PAGE, - IMSG_BOOKMARK_OK, - IMSG_SAVE_CERT, - IMSG_SAVE_CERT_OK, - IMSG_UPDATE_CERT, - IMSG_UPDATE_CERT_OK, - - IMSG_FILE_OPEN, - IMSG_FILE_OPENED, - - IMSG_SESSION_START, - IMSG_SESSION_TAB, - IMSG_SESSION_TAB_HIST, - IMSG_SESSION_END, -}; - -enum line_type { - /* text/gemini */ - LINE_TEXT, - LINE_LINK, - LINE_TITLE_1, - LINE_TITLE_2, - LINE_TITLE_3, - LINE_ITEM, - LINE_QUOTE, - LINE_PRE_START, - LINE_PRE_CONTENT, - LINE_PRE_END, - - /* text/x-patch */ - LINE_PATCH, - LINE_PATCH_HDR, - LINE_PATCH_HUNK_HDR, - LINE_PATCH_ADD, - LINE_PATCH_DEL, - - /* minibuffer */ - LINE_COMPL, - LINE_COMPL_CURRENT, - - /* help */ - LINE_HELP, - - /* download */ - LINE_DOWNLOAD, - LINE_DOWNLOAD_DONE, - LINE_DOWNLOAD_INFO, - - /* misc ui */ - LINE_FRINGE, -}; - -/* for lines: mark as hidden */ -#define L_HIDDEN 1 - -/* for vlines: mark as continuation */ -#define L_CONTINUATION 2 - -struct line { - enum line_type type; - char *line; - char *alt; - void *data; - int flags; - TAILQ_ENTRY(line) lines; -}; - -struct vline { - struct line *parent; - char *line; - int flags; - TAILQ_ENTRY(vline) vlines; -}; - -struct parser; - -typedef int (*parsechunkfn)(struct parser*, const char*, size_t); -typedef int (*parserfreefn)(struct parser*); -typedef int (*parserserial)(struct parser*, struct evbuffer *); - -typedef void (imsg_handlerfn)(struct imsg*, size_t); - -struct parser { - const char *name; - char title[128+1]; - char *buf; - size_t len; - size_t cap; - -#define PARSER_IN_BODY 1 -#define PARSER_IN_PRE 2 -#define PARSER_IN_PATCH_HDR 4 - int flags; - void (*init)(struct parser *); - parsechunkfn parse; - parserfreefn free; - parserserial serialize; - - TAILQ_HEAD(, line) head; -}; - -/* - * differnt types of trust for a certificate. Following - * gemini://thfr.info/gemini/modified-trust-verify.gmi - */ -enum trust_state { - TS_UNKNOWN, - TS_UNTRUSTED, - TS_TEMP_TRUSTED, - TS_TRUSTED, - TS_VERIFIED, -}; - -struct tofu_entry { - char domain[GEMINI_URL_LEN]; - - /* - * enough space for ``PROTO:HASH''. probably isn't a good - * idea tho. - */ - char hash[128+1]; - int verified; -}; - -struct histhead { - TAILQ_HEAD(mhisthead, hist) head; - size_t len; -}; -struct hist { - char h[1025]; - size_t line_off; - size_t current_off; - TAILQ_ENTRY(hist) entries; -}; - -struct buffer { - struct parser page; - - size_t last_line_off; - int force_redraw; - - int curs_x; - int curs_y; - size_t line_off; - size_t line_max; - struct vline *top_line; - struct vline *current_line; - size_t cpoff; - TAILQ_HEAD(vhead, vline) head; -}; - -#define TAB_CURRENT 0x1 /* only for save_session */ -#define TAB_KILLED 0x2 /* only for save_session */ -#define TAB_URGENT 0x4 -#define TAB_LAZY 0x8 /* to lazy load tabs */ - -#define NEW_TAB_URL "about:new" - -TAILQ_HEAD(tabshead, tab); -extern struct tabshead tabshead; -extern struct tabshead ktabshead; -struct tab { - TAILQ_ENTRY(tab) tabs; - uint32_t id; - uint32_t flags; - - char *cert; - enum trust_state trust; - struct proxy *proxy; - struct phos_uri uri; - struct histhead hist; - struct hist *hist_cur; - size_t hist_off; - char *last_input_url; - - int code; - char meta[GEMINI_URL_LEN]; - int redirect_count; - - struct buffer buffer; - - short loading_anim; - short loading_anim_step; - struct event loadingev; -}; - -extern TAILQ_HEAD(proxylist, proxy) proxies; -struct proxy { - char *match_proto; - - char *host; - char *port; - int proto; - - TAILQ_ENTRY(proxy) proxies; -}; - -enum { - PROTO_FINGER, - PROTO_GEMINI, - PROTO_GOPHER, - /* ... */ -}; - -struct get_req { - int proto; - char host[254]; - char port[16]; - char req[1027]; -}; - -struct cmd { - const char *cmd; - void (*fn)(struct buffer *); - const char *descr; -}; -extern struct cmd cmds[]; - -/* defaults.c */ -void config_init(void); -int config_setprfx(const char *, const char *, const char *); -int config_setvari(const char *, int); -int config_setvars(const char *, char *); -int config_setcolor(int, const char *, int, int, int); -int config_setattr(const char *, int, int, int); -void config_apply_style(void); - -/* downloads.c */ -extern STAILQ_HEAD(downloads, download) downloads; -struct download { - uint32_t id; - int fd; - size_t bytes; - char *path; - STAILQ_ENTRY(download) entries; -}; - -void recompute_downloads(void); -void enqueue_download(uint32_t, const char *); -struct download *download_by_id(uint32_t); - -/* help.c */ -void recompute_help(void); - -/* hist.c */ -void hist_clear(struct histhead *); -void hist_clear_forward(struct histhead*, struct hist*); -void hist_push(struct histhead*, struct hist*); -void hist_add_before(struct histhead *, struct hist *, struct hist *); -struct hist *hist_pop(struct histhead *); - -/* mime.c */ -int setup_parser_for(struct tab*); - -/* net.c */ -int net_main(void); - -/* parse.y */ -void parseconfig(const char *, int); - -/* sandbox.c */ -void sandbox_net_process(void); -void sandbox_ui_process(void); -void sandbox_fs_process(void); - -/* telescope.c */ -extern int operating; -extern int safe_mode; - -#define LU_MODE_NONE 0x0 -#define LU_MODE_NOHIST 0x1 -#define LU_MODE_NOCACHE 0x2 - -void gopher_send_search_req(struct tab *, const char *); -int load_page_from_str(struct tab *, const char *); -void load_url(struct tab *, const char *, const char *, int); -void load_url_in_tab(struct tab *, const char *, const char *, int); -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); - -/* tofu.c */ -void tofu_init(struct ohash*, unsigned int, ptrdiff_t); -struct tofu_entry *tofu_lookup(struct ohash*, const char*, const char*); -void tofu_add(struct ohash*, struct tofu_entry*); -void tofu_update(struct ohash*, struct tofu_entry*); -void tofu_temp_trust(struct ohash *, const char *, const char *, const char *); - -/* util.c */ - -/* wrap.c */ -void erase_buffer(struct buffer *); -void empty_linelist(struct buffer*); -void empty_vlist(struct buffer*); -int wrap_one(struct buffer *, const char *, struct line *, size_t); -int wrap_text(struct buffer*, const char*, struct line*, size_t); -int hardwrap_text(struct buffer*, struct line*, size_t); -int wrap_page(struct buffer *, int width); - -#endif /* TELESCOPE_H */ blob - e08198e4e7f2f1c4ed4d0ab0727eefbd9d7cd6af blob + 62b676ec01fa9dbd2c6a69968d68fe119552a61f --- test/Makefile.am +++ test/Makefile.am @@ -1,13 +1,13 @@ check_PROGRAMS = gmparser gmparser_SOURCES = gmparser.c \ - $(top_srcdir)/compat.h \ - $(top_srcdir)/parser.h \ + $(top_srcdir)/include/compat.h \ + $(top_srcdir)/include/parser.h \ $(top_srcdir)/parser/parser.c \ $(top_srcdir)/parser/parser_gophermap.c \ $(top_srcdir)/utils.c -gmparser_CFLAGS = -I$(top_srcdir) +gmparser_CFLAGS = -I$(top_srcdir)/phos -I$(top_srcdir)/include EXTRA_DIST = test-gmparser \ gm-00 \ blob - fc246f83cadcb8f31f2b8a7fb2de68b04cd61937 (mode 644) blob + /dev/null --- ui.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef UI_H -#define UI_H - -#include "keymap.h" -#include "telescope.h" - -extern int body_lines; -extern int body_cols; - -extern struct kmap global_map, minibuffer_map, *current_map, *base_map; - -struct excursion { - int curs_x, curs_y; - size_t line_off; - struct vline *current_line; - struct vline *top_line; - size_t cpoff; -}; - -enum pairs { - PTL_BG = 1, - PTL_TAB, - PTL_CURR, - - PBODY, - PBLEFT, - PBRIGHT, - - PT, - PT_PRFX, - PT_TRAIL, - PL, - PL_PRFX, - PL_TRAIL, - PT1, - PT1_PRFX, - PT1_TRAIL, - PT2, - PT2_PRFX, - PT2_TRAIL, - PT3, - PT3_PRFX, - PT3_TRAIL, - PI, - PI_PRFX, - PI_TRAIL, - PQ, - PQ_PRFX, - PQ_TRAIL, - PPSTART, - PPSTART_PRFX, - PPSTART_TRAIL, - PP, - PP_PRFX, - PP_TRAIL, - PPEND, - PPEND_PRFX, - PPEND_TRAIL, - - PPATCH, - PPATCH_PRFX, - PPATCH_TRAIL, - PPATCH_HDR, - PPATCH_HDR_PRFX, - PPATCH_HDR_TRAIL, - PPATCH_HUNK_HDR, - PPATCH_HUNK_HDR_PRFX, - PPATCH_HUNK_HDR_TRAIL, - PPATCH_ADD, - PPATCH_ADD_PRFX, - PPATCH_ADD_TRAIL, - PPATCH_DEL, - PPATCH_DEL_PRFX, - PPATCH_DEL_TRAIL, - - PCOMPL_PRFX, - PCOMPL, - PCOMPL_TRAIL, - - PCOMPL_CURR_PRFX, - PCOMPL_CURR, - PCOMPL_CURR_TRAIL, - - PHELP_PRFX, - PHELP, - PHELP_TRAIL, - - PDOWNLOAD_PRFX, - PDOWNLOAD, - PDOWNLOAD_TRAIL, - - PDOWNLOAD_DONE_PRFX, - PDOWNLOAD_DONE, - PDOWNLOAD_DONE_TRAIL, - - PDOWNLOAD_INFO_PRFX, - PDOWNLOAD_INFO, - PDOWNLOAD_INFO_TRAIL, - - PDOWNLOAD_WIN, - - PMODELINE, - - PMINIBUF, - - PFRINGE_PRFX, - PFRINGE, - PFRINGE_TRAIL, -}; - -extern struct thiskey thiskey; - -extern struct tab *current_tab; - -extern struct buffer helpwin; -extern int help_lines, help_cols; - -extern struct buffer downloadwin; -extern int download_lines; -extern int download_cols; - -void get_scroll_position(struct tab *, size_t *, size_t *); -void save_excursion(struct excursion *, struct buffer *); -void restore_excursion(struct excursion *, struct buffer *); -void global_key_unbound(void); -struct buffer *current_buffer(void); -struct vline *adjust_line(struct vline *, struct buffer *); -void start_loading_anim(struct tab *); - -int ui_print_colors(void); -int ui_init(void); -void ui_main_loop(void); -void ui_on_tab_loaded(struct tab *); -void ui_on_tab_refresh(struct tab *); -void ui_on_download_refresh(void); -const char *ui_keyname(int); -void ui_toggle_side_window(int); -void ui_show_downloads_pane(void); -void ui_schedule_redraw(void); -void ui_after_message_hook(void); -void ui_require_input(struct tab *, int, void (*)(void)); -void ui_yornp(const char *, void (*)(int, struct tab *), struct tab *); -void ui_read(const char *, void (*)(const char *, struct tab *), struct tab *, const char *); -void ui_other_window(void); -void ui_suspend(void); -void ui_end(void); - -#endif blob - 8f05942c15dbe9f9e528175f4043bb86791acb67 (mode 644) blob + /dev/null --- utf8.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2021 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef UTF8_H -#define UTF8_H - -#include -#include - -/* utf8.c */ -uint32_t utf8_decode(uint32_t*restrict, uint32_t*restrict, uint8_t); -size_t utf8_encode(uint32_t, char*); -char *utf8_nth(char*, size_t); -size_t utf8_cplen(char*); -size_t utf8_chwidth(uint32_t); -size_t utf8_snwidth(const char*, size_t); -size_t utf8_swidth(const char*); -size_t utf8_swidth_between(const char*, const char*); -char *utf8_next_cp(const char*); -char *utf8_prev_cp(const char*, const char*); -int emojied_line(const char *, const char **); - -/* emoji-matcher.c */ -int is_emoji(uint32_t); - -#endif blob - 86b7395a7d1e2319fcd94a1da10c3be28ff1e45c (mode 644) blob + /dev/null --- utils.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2022 Omar Polo - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef UTILS_H -#define UTILS_H - -int mark_nonblock(int); - -int has_prefix(const char*, const char*); -int has_suffix(const char *, const char *); -int unicode_isspace(uint32_t); -int unicode_isgraph(uint32_t); - -int dispatch_imsg(struct imsgev *, short, imsg_handlerfn **, size_t); -int imsg_compose_event(struct imsgev *, uint16_t, uint32_t, pid_t, int, const void *, uint16_t); - -void *hash_alloc(size_t, void *); -void *hash_calloc(size_t, size_t, void *); -void hash_free(void *, void *); - -#endif /* UTILS_H */