Git Product home page Git Product logo

edbrowse's Introduction

edbrowse, a line oriented editor browser.
Written and maintained by Karl Dahlke and others.
See our home page edbrowse.org for current releases and contact information.

See COPYING for licensing agreements.

------------------------------------------------------------

Disclaimer: this software is provided as-is,
with no guarantee that it will perform as expected.
It might trash your precious files.
It might send bad data across the Internet,
causing you to buy a $37,000 elephant instead of
$37 worth of printer supplies.
It may delete all the rows in your mysql customer table.
Use this program at your own risk.

------------------------------------------------------------

Chrome and Firefox are graphical browsers.
Lynx and Links are screen browsers.
This is a command line browser, the only one of its kind.
The user's guide can be found as doc/usersguide.html in this package,
or online at http://edbrowse.org/usersguide.html.
The online guide corresponds to the latest stable release.
Of course this reasoning is a bit circular.
You need to use a browser to read the documentation,
which describes how to use the browser.
Well you can always do this:

cd doc ; lynx -dump usersguide.html >usersguide.txt

This produces the documentation in text form,
which you can read using your favorite editor.
Of course we hope edbrowse will eventually become your
favorite editor, whence you can browse the documentation directly.
The doc directory also includes a sample config file.

------------------------------------------------------------

OK, I'm going to assume you've read the documentation.
No need to repeat all that here.
You're here because you want to compile and/or package the program,
or modify the source in some way.  Great!
There are more substantial, step by step instructions for building edbrowse from source,
on various platforms, in the edbrowse wiki.
If you run into trouble you may want to consult those; this is an overview.

Requirements:

pcre:
As you may know, edbrowse was originally a perl script.
As such, it was only natural to use perl regular expressions for
the search/substitute functions in the editor.
Once you've experienced the power of perl regexp, you'll never
go back to ed.  So I use the perl-compatible regular expression
library, /lib/libpcre2-8
If you don't have this file, check your available packages.
the pcre and pcre-devel packages might be there, just not installed.
As of this writing, you need pcre2-8, which is generally available.

Note that buffers.c includes <pcre2.h>.
Some distributions put it in /usr/include/pcre2/pcre2.h,
so you'll have to adjust the source, the -I path, or make a link.

libcurl:
You need libcurl and libcurl-devel,
which are included in almost every Linux distro.
This is used for ftp, http, and https.
Check for /usr/include/curl/curl.h
Edbrowse requires version 7.29.0 or later.  If you compiled with a version
prior to 7.29.0, the program will inform you that you need to upgrade.
If you have to compile curl from source, be sure to specify
--ENABLE-VERSION-SYMBOLS at the configure script.
It's rare, but curl, and hence edbrowse, cannot access certain websites,
giving the message
Cannot communicate securely with peer: no common encryption algorithm(s).
You can even see this from the command line.
	curl https://weloveanimals.me
You'll either get the communication error or not.
This happens if openssl is too old,
or just doesn't support the ciphers that the website expects.
This is beyond edbrowse, and beyond curl; you have to upgrade openssl.

unixODBC:
Edbrowse provides database access through odbc.
Thus you need unixODBC and unixODBC-devel.
ODBC has been stable for quite some time.
unixODBC version 2.2.14 seems to satisfy edbrowse with odbc.

quickjs:
This is the javascript engine for edbrowse. It is not packaged,
in most distributions, so you will need to build it from source.
git clone https://github.com/bellard/quickjs
It is best to clone this tree in a directory adjacent to edbrowse.
That is, edbrowse and quickjs are in the same directory.
If you are unable to do this, set QUICKJS_INCLUDE and QUICKJS_LIB
to the quickjs directory tree before you build edbrowse.
cd quickjs
make
If you get a lot of atomic undefines:
make EXTRA_LIBS=-latomic
This builds a static library- libquickjs.a.
By default, edbrowse links to this library, and thus the
quickjs code is part of edbrowse, and a quickjs package,
or a dependency thereto, is not necessary.
If your distrubution provides quickjs like a prebuilt package,
set QUICKJS_INCLUDE to the quickjs directory containing its
library header files, and QUICKJS_LIB to the directory containing
the libquickjs.a static library.

------------------------------------------------------------

Compiling edbrowse:

For a time, edbrowse could be built on windows, but this is no longer supported.
On all other systems, you should be able to use make.
cd src
make

The makefile supports the environment variables EBDEBUG=on,
(or yes or y or 1 or any nonempty string),
for symbolic debugging via gdb, and EBDEMIN=on for javascript deminimization.
Distributors should not set these flags.

------------------------------------------------------------

Edbrowse creates a system wide temp directory if it is not already present.
This is /tmp/.edbrowse.
This directory contains a subdirectory per user, mod 700 for added security.
Thus one user cannot spy on the temp files, perhaps sensitive internet data,
of another user.
However, true multiuser security requires a root job at startup,
e.g. in /etc/rc.d/rc.local, to create the directory with the sticky bit.
	mkdir /tmp/.edbrowse
	chmod 1777 /tmp/.edbrowse

------------------------------------------------------------

The code in this project is indented via the script Lindent,
which is in the tools directory, and is taken from the Linux kernel source.
In other words, the indenting style is the same as the Linux kernel.
Except it isn't always.
I've drifted away from it on occasion.
If the statement under the if is just a break or continue or return,
I may well put it on the same line.
It's really not that important all in all, especially to blind developers.
If you take over this project, or send patches,
try to sort of follow our indenting style.

------------------------------------------------------------

Debug levels:
0: silent
1: show the sizes of files and web pages as they are read and written
2: show the url as you call up a web page,
and http redirection.
3: javascript execution and errors.
   cookies, http codes, form data, and sql statements logged.
4: show the socket connections, and the http headers in and out.
   side effects of running javascript.
   Dynamic node linkage.
5: messages to and from javascript, url resolution.
Show mail headers when browsing a mail file.
6: show javascript to be executed
Show the entire email without sending it.
7: reformatted regular expressions, breakline chunks,
JSValues allocated and freed.
8: text lines freed, debug garbage collection
9: not used

Casual users should not go beyond db2.
Even developers rarely go beyond db4.

------------------------------------------------------------

Sourcefiles as follows.

src/main.c:
Read and parse the config file.
Entry point.
Command line options.
Invoke mail client if mail options are present.
If run as an editor/browser, treat arguments as files or URLs
and read them into buffers.
Read commands from stdin and invoke them via the command
interpreter in buffers.c.
Handle interrupt.

src/buffers.c:
Manage all the text buffers.
Interpret the standard ed commands, move, copy, delete, substitute, etc.
Run the 2 letter commands, such as qt to quit.

src/stringfile.c:
Helper functions to manage memory, strings, files, directories.

src/isup.c:
Internet support routines.
Split a url into its components.
Decide if it's a proxy url.
Resolve relative url into absolute url
based on the location of the current web page.
Send and receive cookies.  Maintain the cookie jar.
Maintain a cache of http files.
Remember user and password for web pages that require authentication.
Only the basic method is implemented at this time.
Determine the mime type of a file or web page and the corresponding plugin,
if any. Launch the plugin automatically or on command.
A plugin can play the file, like music, or render the file, like pdf.
Run as an irc client.

src/format.c:
Arrange text into lines and paragraphs.
base64 encode and decode for email.
Convert utf8, iso8859-1, unicode 16, unicode 32, etc.
Process an html page for final display.
Manage emojis.
International print routines to display messages according to your locale.

src/http.c:
Send the http request, and read the data from the web server.
Handles https connections as well,
and 301/302 redirection.
gopher, ftp, sftp, download files, possibly in the background.

src/html-tags.c:
htmlScanner(), scan the html tags and build a tree of nodes.
prerender(), establish attributes and linkages among these nodes.
decorate(), decorate the tree with js objects corresponding to the html nodes,
if js is enabled.

src/html.c:
Turn js side effects, like document.write or innerHTML,
back into html tags if that makes sense.
Enter data into forms and watch for javascript side effects.
Submit/reset forms.
Render the tree of html nodes into a text buffer.
Rerender the tree after js has run, and report any changes to the user.

src/sendmail.c:
Send mail (smtp or smtps).  Encode attachments.

src/fetchmail.c:
Fetch mail (pop3 or pop3s or imap).  Decode attachments.
Browse mail files, separate mime components.
Delete emails, move emails to other imap folders, search on the imap server.

src/messages.h:
Symbolic constants for the warning/error messages of edbrowse.

lang/msg-*:
Edbrowse status and error messages in various languages.
Each is converted into a const array of messages in src/msg-strings.c,
thus src/msg-strings.c is not a source file.

lang/ebrc-*:
Default .ebrc config file that is written to your home directory
if you have no such file.
Different files for different languages.
Each is converted into a const string in src/ebrc.c,
thus src/ebrc.c is not a source file.

src/jseng-quick.c:
The javascript engine built around the quick js library.
Manage all the js objects corresponding to the web page in edbrowse.
All the js details are hidden in this file.
this is encapsulation, hiding the js library from the rest of edbrowse.

src/js_hello*
Various hello world files to exercise various javascript engines.
These are stand alone programs; build them by make hello.

src/startwindow.js:
Javascript that is run at the start of each session.
This creates certain classes and methods that client js will need.
It is converted into a const string in src/startwindow.c,
thus src/startwindow.c is not a source file.
As you write functions to support DOM,
your first preference is to write them in src/startwindow.js.
Failing this, write them in C, using the API presented by jseng-quick.c.
Failing this, and as a last resort, write them as native code within the js engine.
Obviously this last approach is not engine portable.

src/shared.js:
Functions or classes that can safely be shared amongst all edbrowse windows.
This saves time and memory.

src/demin.js:
Third party open source javascript routines that are used for debugging
and deminimization.
These are snapshots; you will need to update demin.js, i.e. grab a new
snapshot, as that software evolves.
Distributers don't have to worry about this one,
it isn't compiled in unless $EBDEMIN is set to on.

src/endwindow.js:
This is the close of shared.js, and it stands in if demin.js is not used.

src/jsrt:
This is the javascript regression test for edbrowse.
It exercises some of the javascript DOM interactions.
It also presents frames and hyperlinks and forms and input fields,
so you can play around.

src/acid3:
A snapshot of http://acid3.acidtests.org, with modifications,
so that some or all of the acid tests pass under edbrowse.
This is a work in progress.
My modifications are indicated by the comment   //@`

src/dbops.c:
Database operations; insert update delete.

src/dbodbc.c:
Connect edbrowse to odbc.

src/dbinfx.ec:
Connect edbrowse directly to Informix.
Other connectors could be built, e.g. Oracle,
but it's probably easier just to go through odbc.

src/dbstubs.c:
Stubs for database functions, if you want to build edbrowse without database access.

------------------------------------------------------------

Error conventions.
Unix commands return 0 for ok and a negative number for a problem.
Some of my functions work this way, but most return
true for success and false for error.
The error message is left in a buffer, which you can see by typing h
in the /bin/ed style.
Sometimes the error is displayed no matter what,
like when you are reading or writing files.
error messages are created according to your locale, i.e. in your language,
if a translation is available.
Some error messages in the database world have not yet been internationalized.
Some are beyond my control, as they come from odbc or its native driver.

------------------------------------------------------------

Multiple Representations.

A web form asks for your name, and you type in Fred Flintstone.
This piece of data is part of your edbrowse buffer.
In this sense it is merely text.
You can make corrections with the substitute command, etc.
Yet it is also carried into the html tags in html.c,
so that it can be sent when you push the submit button.
This is a second copy of the data.
As if that weren't bad enough, I now need a third copy for javascript.
When js accesses form.fullname.value, it needs to find,
and in some cases change, the text that you entered.
These 3 representations are "separate but equal",
using a lot of software to keep them in sync.
Remember that an input field could be an entire text area,
i.e. the text in another editing session.
When you are in that session, composing your thoughts,
am I really going to take every textual change, every substitute,
every delete, every insert, every undo,
and map those changes over to the html tag that goes with this session,
and the js variable that goes with this session?
I don't think so.
When you submit the form, or run any javascript for any reason,
the text is carried into the html tag, under t->value, and into the js object,
to make sure everything is in sync before js runs.
This is accomplished by jSyncup() in html.c.
When js has run to completion, any changes it has made to the fields have
to be mapped back to the editor, where you can see them.
This is done by jSideEffects() in html.c.
In other words, any action that might in any way involve js
must begin with jSyncup() and end with jSideEffects().
Once this is done, the tree of tags is rerendered,
and the new buffer is compared with the old using a simple diff algorithm.
Edbrowse tells you if any lines have changed.

Line 357 has been updated.

Such updates are only printed every 20 seconds or so, since some visual websites change data, down in the lower left corner, a dozen times a second,
and we don't need to see a continuous stream of update messages.
However, if you submit something and that changes the screen, you want to know about that right away.
Implementing all of this was not trivial!

------------------------------------------------------------

Some text is invisible as per css{display:none},
and some text only comes to light if you hover over something.
Edbrowse does not display this text, but sometimes edbrowse gets it wrong,
so if the website seems sparse, like you're missing something important,
use the showall command to reveal all of this text,
even some sections that might not be relevant to your situation.
Formerly invisible text might look like this.

You are logged in as John Smith,
if you are not John Smith please <log out>.

This block might be invisible unless you are actually logged in.
And of course the button won't work, unless you are actually logged in.

All text is displayed if javascript is disabled via the js- command,
because css doesn't run without javascript.

------------------------------------------------------------

Use the help command for a quick list of all the edbrowse commands.
This is a copy of the quick reference guide in usersguide.html,
built into edbrowse.

------------------------------------------------------------

There is an in-built javascript dom debugger that you enter via the jdb command.
bye to exit.
Javascript expressions are evaluated, and the document objects are available.
document.head is the head of your document <head>,
document.body is the body <body>,
document.body.firstChild is the first node under <body>, and so on.
showscripts() shows all the javascripts, even those dynamically created.
Such debugging is beyond the scope of this README file.
Read the Debugging Javascript article in the edbrowse wiki.

------------------------------------------------------------

It is often asked why we don't use a headless browser,
instead of trying to reinvent and maintain all that js machinery.
Good question!
How would we marry these very different creatures?
Here is how it might play out.

e blah.example.com  same as it works today.
http fetch through curl.

b (browse command)
launch the browser, or activate a tab in the browser if it is already launched.
I don't know if the headless interface allows for this.
I don't want a new browser process running for every page in edbrowse.
Hand the browser the url.
Yeah we already have the page and in theory we could pass it the html directly,
with a <base> tag, but it might be easier to just hand it the url and say go.
It is going to maintain cookies as it browses,
and there is sometimes a transient cookie that indicates session, the "session cookie",
so the cookie we got is no good, and the only way for the browser to get a proper cookie for its session is to fetch the url itself.
So we tolerate that small inefficiency.
When the browser is done browsing,
and already we're in trouble, how do we know?
Some pages change all the time, refreshing and so on,
so maybe we poll and watch for document.readyState or some such,
and when it indicates done, we call document.body.outerHTML.
That is the current html as rendered on the page, which could look nothing like the original page.
Pass that to our parser, then skip the decorate phase, we don't mess with js objects at all,
and don't run any scripts, no timers, and call render as we do today.
There is your page! And someone else did all that javascript dom work.

What actually shows on the screen? We have no idea!
Some items are hidden by css, and sometimes they pop to life depending on what you do on the page.
They are always there in html.
We would show them all the time.
Our page could be cluttered with everything it might have on it, and there isn't an easy way to fix that.

As mentioned before, pages change all the time.
Poll every 20 seconds and repeat the above.
New html, a new tree, new render, compare with the old, report if anything changed.
A lot of our software could be reused here.

alert, prompt, console.log, and perhaps other inbuilt methods.
These interact with the user on the screen.
What would they do headless?
Are there callback functions we can provide to manage these actions?

i=xyz
Set or change an input field.
How do we pass this over to the browser?
Use javascript, set the value of the input field to xyz.
But how do we designate the input field in the browser?
This is the correspondence problem.
If the input field has an id that's easy.
querySelector("#id").value = "xyz";
But if it doesn't?
We can't expect every checkbox and field to have an id.
We could perhaps count the input fields leading up to this one. If there are 17 then
QuerySelectorAll("input")[17].value = "xyz";
That will usually work but not guaranteed.
The page could have changed in some way since last we polled.
Let's say it still lines up.
This backdoor way doesn't call oninput or onchange etc,
we have to call those methods ourselves.
Or onclick() if it's a checkbox, you get the idea.
So what about the onchange or onclick code?
It could alert the user to a bad input, and I wrote about alerts and such above.
More likely it puts the error message in the page.
Or maybe not an error but maybe caused other things to change.
Like a selection choosing a submenu.
We need to rerender right after the action was taken, to see immediately what changed.
But what do we mean by immediately?
A millisecond? The changes might not have happened yet.
Then we'd have to wait another 20 seconds to see the changes.
Half a second? Still might not be enough time.
8 seconds? That's awkward. Most of the time there aren't any changes, except the field we just changed, so we want to render right away.
The browser is asynchronous from us, with no good way to coordinate, and that can cause headaches.
this is the coordination problem.

i*   push the button.
The usual problems of designating the input field in the browser.
If we can find it, call the methods onclick, onsubmit, and finally submit.
If js finds a problem with the form, it will indicate this with an error message on the page.
Same as before, when do we rerender, what is the optimal time to let js act?
If it jumps to a new web page, as i* often does, how do we know?
The next rerender, whenever it is, will completely replace the page, but that's not what we want.
We want to push the current page on the stack and render the new one.
Perhaps the polling process looks at window.location and compares it to our filename and if it's different,
assume (and I kinda hate to assume) we have jumped to a new page.
Push the old one on the stack and render the new one.
But what do we do about raw html for the new page?
We don't have it.
We didn't fetch it.
We could try to fetch it but that might confuse things, because the browser has already fetched it, with its session cookie, that we don't have.
We might have to say no raw html available in this case.

g   go to a hyperlink.
onclick code, watch the return, determines whether we jump or not.
The url itself may be javascript, it often is.
If the page changes, how do we know? Just like the above.
If it's a direct href=url I don't think there's a js backdoor.
We have to tell the browser to go to this page, this url, not in a new tab but pushing the old page onto the history.
Can we do that through headless?

g goes to an internal anchor.  href=#blah
We could use our machinery to jump,
and push the prior location onto the stack for the & command.
Do we find that tag in the browser and call onfocus()?

Button says "go back to previous page".
Implemented through the js history object.
That's just a refocus to the previous page, it is an up command in the browser.
How do we know to do the same?
Do we compare window.location with all the locations on our stack, and go up if that is indicated, or push a new window if it's a new url?
For that matter, how do we do our own up down and ^ commands?
Use the history object in the browser for up and down, or window.close() for ^?

Page has a plugin.
For music and such we just do our own.
That works 95% of the time, but not always, not if a session cookie is required to fetch that audio, then it's a big oops!
That happens in audio captchas.
Does the browser use the same plugin, mp3 player or whatever, coming out the same speakers?
How do we know when it's done playing, or control it or pause it or stop it etc, it's not going through our plugin.
A rendering plugin like pdf is even more problematic.
Remember we don't have the raw data, and I don't know that we can always get the raw data,
and if the browser runs its plugin, it certainly has a way to render pdf,
that rendering is completely outside of anything we can get through the headless browser.

Frames on the page make everything complicated.
It looks seamless to the sighted user but it's not.
i=xyz within a frame has to work within the context of that frame.
And all the other commands.
We have to run all the javascript, on the browser, within that frame.
We do this in our world, we know the context,
just not sure how to convey that to the headless browser as we interact.

IntersectionObserver is a particularly vexing concept.
This is relatively new, but I think it will catch on.
A website can bring in resources: images, submenus, control panels, etc,
as the user scrolls down to see them. This is the pay-to-play philosophy,
and it makes perfect sense in the visual world.
But there is no scrolling in headless Chrome.
The top of the website is in the viewport, and those resources are fetched,
but none below. Perhaps just a framework.
The page that edbrowse presents could be lacking,
relative to what the user sees as he scrolls down or right or left.
IntersectionObserver is so visual, it is difficult to simulate in edbrowse
today, even more challenging when Chrome is rendering the page from afar.

This is the beginning of the thought process. 🐣
I don't know if it would come out better or worse than the path we are currently on.
And the only way to find out might be to do it.  😱
I love the idea of not maintaining all this js and dom client and interactions with the page and so on,
but I'm concerned about coordinating with the asynchronous browser,
and maintaining the text-based approach that makes edbrowse unique.

edbrowse's People

Contributors

alfonsosiciliano avatar arthompson avatar bouncepaw avatar cleversn avatar cmb avatar czarkoff avatar eklhad avatar geoffmcl avatar kevincarhart avatar martinetd avatar mrkiko avatar notklaatu avatar paulgevers avatar ssb22 avatar sunpoet avatar thequinbox avatar tspivey avatar wogac avatar wsgac avatar yurivict avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

edbrowse's Issues

How to use?

I downloaded binary file:

$ ./edbrowse-static-linux-x86_64 -e ../Documents/index.html 
no ssl certificate file specified; secure connections cannot be verified
163

How can I view the page?

edbrowse does need a patch to successfully compile in Nixpkgs

Sorry by the laziness, but among other things I have noticed two or three things that hindered the building.
It fails because the variable QUICKJS_LDFLAGS is not passed to js_hello_quick target.

Maybe the traditional Linux distros install quickjs in expected places, while Nixpkgs does not. It triggered a typical linking error.

I have included a patch directly in our repositories to fix this behaviour - there is it:

https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/edbrowse/0001-small-fixes.patch

(If by anything, I put this file in public domain. :P )

As an aside, I have also noticed that quickjs is not autodetected; because of it we basically made a sed edition in the makefile, but this is less important for now.

Win32 Build

This is just an advice that I have done a Win32 build in my clone - https://github.com/geoffmcl/edbrowse - but still in the process of testing...

And learning how to use edbrowse... ;=)) Any help appreciated...

Put some of what I found, and did is in the README.win32.md file.

Would seek help from others to polish this effort... if there is any interest...

Edbrowse crashes when opening "Creator Studio" or "Video Manager"

Hi!
I know that this particular use case might lie outside of edbrowse's scope, but I don't know what causes this crash and it might well be something that happens on other pages too.

Steps to reproduce:
activate JavaScript (for google too, as you'll need to login using google, see #60 )
e https://youtube.com
login using

Frame {signin-passive}

you won't get redirected to YouTube afterwards, so e https://youtube.com again.

then go to "My channel" (or similar)
then try to open either "Creator Studio" or "Video Manager" (or similar)
edbrowse will fetch the page and quit, only displaying "aborted."

Happy new Year,
Oliver Parczyk

assertion fault on FreeBSD

Hello,

I'm the FreeBSD maintainer of edbrowse, an user reported this problem:

% edbrowse
.ebrc: unrecognized keyword linelength at line 49
edbrowse ready
b www.freebsd.org
25613
Assertion failed: (option_defs[ optId ].type == TidyBoolean), function prvTidySetOptionBool, file config.c, line 397.
Abort (core dumped)

I found the problem via lldb and printf() :-) the line 219 of src/html-tidy.c https://github.com/CMB/edbrowse/blob/master/src/html-tidy.c#L129
I commented the line to patch the FreeBSD port, now it runs, maybe we could find more intelligent solution

Alfonso

ctags

Is there any integration at all with ctags? Has adding that been
discussed?

Do users currently simply not use ctags, or use ctags by hand?

macOS build

Hi,

I recently tried to build the git HEAD of edbrowse on macOS. The recent js libs appear to be unavailable. Is there any guidance for getting it to build? I can probably just go back to a much older release, but thought I'd check here first.

Thanks!

List open files?

Hi,

is there currently a way, or is there a clean way to make a function, to list the open buffers?

Something like

<buffers
e1: .ebrc
e2: http://edbrowse.org
e99: .ebmarks

Please fix the format warning

clang prints this:

css.c:1975:47: warning: format specifies type 'int' but the argument has type 'long' [-Wformat]
                        printf("css hash mismatch %d versus %d\n", mark - h,
                                                  ~~               ^~~~~~~~
                                                  %ld

XDG Directories

Wondering if XDG directory support could be added for .ebrc. Instead of putting it in $HOME by default it could be put in $XDG_CONFIG_HOME/eb (and then fallback to $HOME).

I was just wondering if there is any openness to this at all (before I possibly work on a PR or a patch).

Infinite loop on Amazon.com

edbrowse runs into an infinite loop on https://amazon.com. is there anything I can do to fix this or help fixing it?

To reproduce, I did the following:

$ edbrowse -v
3.7.7
$ edbrowse
edbrowse ready                                                                                            
nojs = amazon.com                                                                                                     
?                
db4                                                                                                       

?                                                                                                         
b www.amazon.com

And here is the trail of the output, including the loop at the end:

...
parse under div 4409
line 9 column 1 - Warning: missing </a> before <div>
line 11 column 1 - Warning: discarding unexpected </a>
line 12 column 159 - Warning: unescaped & or unknown entity "&openid.return_to"
line 12 column 273 - Warning: unescaped & or unknown entity "&openid.identity"
line 12 column 352 - Warning: unescaped & or unknown entity "&openid.assoc_handle"
line 12 column 379 - Warning: unescaped & or unknown entity "&openid.mode"
line 12 column 405 - Warning: unescaped & or unknown entity "&openid.claimed_id"
line 12 column 486 - Warning: unescaped & or unknown entity "&openid.ns"
line 12 column 540 - Warning: unescaped & or unknown entity "&ref_"
line 12 column 1 - Warning: missing </a> before <div>
line 23 column 1 - Warning: discarding unexpected </a>
line 29 column 82 - Warning: missing </a> before <div>
line 29 column 225 - Warning: discarding unexpected </a>
line 29 column 238 - Warning: missing </a> before <div>
line 29 column 393 - Warning: discarding unexpected </a>
line 29 column 406 - Warning: missing </a> before <div>
line 29 column 557 - Warning: discarding unexpected </a>
line 29 column 673 - Warning: missing </a> before <div>
line 29 column 815 - Warning: discarding unexpected </a>
line 29 column 828 - Warning: missing </a> before <div>
line 29 column 968 - Warning: discarding unexpected </a>
line 29 column 981 - Warning: missing </a> before <div>
line 29 column 1122 - Warning: discarding unexpected </a>
line 29 column 1135 - Warning: missing </a> before <div>
line 29 column 1279 - Warning: discarding unexpected </a>
line 29 column 1288 - Warning: missing <li>
line 29 column 1374 - Warning: missing </a> before <div>
line 29 column 1528 - Warning: discarding unexpected </a>
line 29 column 1541 - Warning: missing </a> before <div>
line 29 column 1690 - Warning: discarding unexpected </a>
line 29 column 1703 - Warning: missing </a> before <div>
line 29 column 1872 - Warning: discarding unexpected </a>
line 29 column 1885 - Warning: missing </a> before <div>
line 29 column 2045 - Warning: discarding unexpected </a>
line 29 column 2058 - Warning: missing </a> before <div>
line 29 column 2216 - Warning: discarding unexpected </a>
line 29 column 2229 - Warning: missing </a> before <div>
line 29 column 2388 - Warning: discarding unexpected </a>
line 29 column 2401 - Warning: missing </a> before <div>
line 29 column 2559 - Warning: discarding unexpected </a>
line 29 column 2572 - Warning: missing </a> before <div>
line 29 column 2737 - Warning: discarding unexpected </a>
line 29 column 2750 - Warning: missing </a> before <div>
line 29 column 2911 - Warning: discarding unexpected </a>
line 29 column 2924 - Warning: missing </a> before <div>
line 29 column 3094 - Warning: discarding unexpected </a>
line 29 column 3107 - Warning: missing </a> before <div>
line 29 column 3259 - Warning: discarding unexpected </a>
line 29 column 3272 - Warning: missing </a> before <div>
line 29 column 3436 - Warning: discarding unexpected </a>
line 29 column 3449 - Warning: missing </a> before <div>
line 29 column 3606 - Warning: discarding unexpected </a>
line 29 column 3619 - Warning: missing </a> before <div>
line 29 column 3772 - Warning: discarding unexpected </a>
line 29 column 3785 - Warning: missing </a> before <div>
line 29 column 3949 - Warning: discarding unexpected </a>
line 29 column 3962 - Warning: missing </a> before <div>
line 29 column 4131 - Warning: discarding unexpected </a>
line 29 column 4144 - Warning: missing </a> before <div>
line 29 column 4303 - Warning: discarding unexpected </a>
line 29 column 4316 - Warning: missing </a> before <div>
line 29 column 4472 - Warning: discarding unexpected </a>
line 29 column 4490 - Warning: missing </a> before <div>
line 29 column 4602 - Warning: discarding unexpected </a>
line 29 column 4606 - Warning: missing </a> before <div>
line 29 column 4717 - Warning: discarding unexpected </a>
line 29 column 4834 - Warning: missing </a> before <div>
line 29 column 4977 - Warning: discarding unexpected </a>
line 29 column 5092 - Warning: missing </a> before <div>
line 29 column 5236 - Warning: discarding unexpected </a>
line 29 column 5249 - Warning: missing </a> before <div>
line 29 column 5404 - Warning: discarding unexpected </a>
line 29 column 5413 - Warning: missing <li>
line 29 column 5657 - Warning: unescaped & or unknown entity "&ref_"
line 29 column 5758 - Warning: missing </a> before <div>
line 29 column 5870 - Warning: discarding unexpected </a>
line 29 column 5874 - Warning: missing </a> before <div>
line 29 column 5985 - Warning: discarding unexpected </a>
line 29 column 6386 - Warning: unescaped & or unknown entity "&ref_"
line 29 column 6311 - Warning: missing </a> before <div>
line 29 column 6575 - Warning: discarding unexpected </a>
line 29 column 6588 - Warning: missing </a> before <div>
line 29 column 6792 - Warning: discarding unexpected </a>
line 29 column 6858 - Warning: unescaped & or unknown entity "&ref_"
line 29 column 7069 - Warning: unescaped & or unknown entity "&openid.claimed_id"
line 29 column 7150 - Warning: unescaped & or unknown entity "&openid.identity"
line 29 column 7229 - Warning: unescaped & or unknown entity "&openid.mode"
line 29 column 7255 - Warning: unescaped & or unknown entity "&openid.ns"
line 29 column 7308 - Warning: unescaped & or unknown entity "&openid.pape.max_auth_age"
line 29 column 7335 - Warning: unescaped & or unknown entity "&openid.return_to"
line 29 column 7450 - Warning: unescaped & or unknown entity "&ref_"
line 33 column 5 - Warning: missing </a> before <div>
line 33 column 131 - Warning: discarding unexpected </a>
line 29 column 82 - Warning: <a> attribute "href" lacks value
line 29 column 238 - Warning: <a> attribute "href" lacks value
line 29 column 406 - Warning: <a> attribute "href" lacks value
line 29 column 673 - Warning: <a> attribute "href" lacks value
line 29 column 828 - Warning: <a> attribute "href" lacks value
line 29 column 981 - Warning: <a> attribute "href" lacks value
line 29 column 1135 - Warning: <a> attribute "href" lacks value
line 29 column 1374 - Warning: <a> attribute "href" lacks value
line 29 column 1541 - Warning: <a> attribute "href" lacks value
line 29 column 1703 - Warning: <a> attribute "href" lacks value
line 29 column 1885 - Warning: <a> attribute "href" lacks value
line 29 column 2058 - Warning: <a> attribute "href" lacks value
line 29 column 2229 - Warning: <a> attribute "href" lacks value
line 29 column 2401 - Warning: <a> attribute "href" lacks value
line 29 column 2572 - Warning: <a> attribute "href" lacks value
line 29 column 2750 - Warning: <a> attribute "href" lacks value
line 29 column 2924 - Warning: <a> attribute "href" lacks value
line 29 column 3107 - Warning: <a> attribute "href" lacks value
line 29 column 3272 - Warning: <a> attribute "href" lacks value
line 29 column 3449 - Warning: <a> attribute "href" lacks value
line 29 column 3619 - Warning: <a> attribute "href" lacks value
line 29 column 3785 - Warning: <a> attribute "href" lacks value
line 29 column 3962 - Warning: <a> attribute "href" lacks value
line 29 column 4144 - Warning: <a> attribute "href" lacks value
line 29 column 4316 - Warning: <a> attribute "href" lacks value
line 29 column 4490 - Warning: <a> attribute "href" lacks value
line 29 column 4606 - Warning: <a> attribute "href" lacks value
line 29 column 4834 - Warning: <a> attribute "href" lacks value
line 29 column 5092 - Warning: <a> attribute "href" lacks value
line 29 column 5249 - Warning: <a> attribute "href" lacks value
line 29 column 5758 - Warning: <a> attribute "href" lacks value
line 29 column 5874 - Warning: <a> attribute "href" lacks value
line 3 column 1 - Warning: <div> proprietary attribute "cel_widget_id"
linkset r|0x2e7a1a8,div 0x2ec9dd8,div 0x0,
linkage, div 4418 removed from div 4409
linkset a|0x2e79c48,#document-fragment 0x2ec9dd8,div 0x0,
linkage, div 4418 linked into #document-fragment 4408
fixup div 4418
linkset r|0x2d7e528,div 0x2d7eb78,script 0x0,
linkage, script 4447 removed from div 4446
linkset a|0x2e79c48,#document-fragment 0x2d7eb78,script 0x0,
linkage, script 4447 linked into #document-fragment 4408
fixup script 4447
linkset r|0x2e79c48,#document-fragment 0x2d7eb78,script 0x0,  <---+
linkage, script 4447 removed from #document-fragment 4408         |
linkset a|0x2e79c48,#document-fragment 0x2d7eb78,script 0x0,      |
linkage, script 4447 linked into #document-fragment 4408          |
fixup script 4447                                                 |
linkset r|0x2e79c48,#document-fragment 0x2d7eb78,script 0x0,  +---+
< endless loop as the arrow indicates >

Edbrowse as a pager

I would like to use edbrowse as a pager, like more or less. But piping something to edbrowse will cause edbrowse to interpret the input as commands, rather than as a file to edit. There should be an option that's like "--as-pager" or something.

Port to mozjs38

Ubuntu 17.04 now includes mozjs38 (SpiderMonkey 38). GNOME 3.24 has been ported to it. Once Cinnamon follows, edbrowse will be the only thing in Ubuntu using mozjs24. Ubuntu does not like shipping multiple versions of the same library in the same Ubuntu release.

Ubuntu will probably drop mozjs24 before Ubuntu 17.10 is released in October.

Future

GNOME 3.26 (to be released in September) has a goal of porting to mozjs52 (not yet released) or at least mozjs45. Ubuntu 18.04 LTS due in April 2018 will probably include GNOME 3.26 so you'll probably need to port to that version by then also.

Javascript doesn't work

I am trying to save a webpage to file:
./edbrowse https://example.com/ > out.htm

no ssl certificate file specified; secure connections cannot be verified
15848
Unable to exec edbrowse-js, javascript has been disabled.
1351

Of course edbrowse-js is in the same directory and has exec rights.

curl/curl.h: No such file or directory

I am getting the error -- curl/curl.h: no such file or directory.

I do not see any curl.h in the source, or repo as well.

Here is the results I had got while installing edbrowser ( in Ubuntu 14.04)

maan@maan-Inspiron:~/Desktop/edbrowse-3.6.1/src$ make
cc -DEDBROWSE_ON_LINUX -c -o main.o main.c
In file included from main.c:6:0:
eb.h:39:23: fatal error: curl/curl.h: No such file or directory
#include <curl/curl.h>
^
compilation terminated.
make: *** [main.o] Error 1
`

edbrowse doesn't compile on Termux

Hi! I tried to compile edbrowse from source for Termux, as there is no package available as of now. When I do, I get the following errors:
$ make cd src ; make make[1]: Entering directory '/data/data/com.termux/files/home/edbrowse/edbrowse/src' cc -DEDBROWSE_ON_LINUX -Wall -D_FILE_OFFSET_BITS=64 -c -o main.o main.c In file included from main.c:6: ./eb.h:518:2: error: unknown type name 'ushort' ushort bits; /* a bun... ^ main.c:151:2: warning: implicit declaration of function 'pthread_setcancelstate' is invalid in C99 [-Wimplicit-function-declaration] pthread_setcancelstate(PTHREAD_C... ^ main.c:151:25: error: use of undeclared identifier 'PTHREAD_CANCEL_ENABLE' pthread_setcancelstate(PTHREAD_C... ^ main.c:153:2: warning: implicit declaration of function 'pthread_setcanceltype' is invalid in C99 [-Wimplicit-function-declaration] pthread_setcanceltype(PTHREAD_CA... ^ main.c:153:24: error: use of undeclared identifier 'PTHREAD_CANCEL_ASYNCHRONOUS' pthread_setcanceltype(PTHREAD_CA... ^ main.c:156:2: warning: implicit declaration of function 'pthread_cancel' is invalid in C99 [-Wimplicit-function-declaration] pthread_cancel(t1); ^ 3 warnings and 3 errors generated. make[1]: * [<builtin>: main.o] Error 1 make[1]: Leaving directory '/data/data/com.termux/files/home/edbrowse/edbrowse/src' make: * [makefile:5: all] Error 2

When I #define ushort unsigned short in eb.h it becomes
$ make cd src ; make make[1]: Entering directory '/data/data/com.termux/files/home/edbrowse/edbrowse/src' cc -DEDBROWSE_ON_LINUX -Wall -D_FILE_OFFSET_BITS=64 -c -o main.o main.c main.c:152:2: warning: implicit declaration of function 'pthread_setcancelstate' is invalid in C99 [-Wimplicit-function-declaration] pthread_setcancelstate(PTHREAD_C... ^ main.c:152:25: error: use of undeclared identifier 'PTHREAD_CANCEL_ENABLE' pthread_setcancelstate(PTHREAD_C... ^ main.c:154:2: warning: implicit declaration of function 'pthread_setcanceltype' is invalid in C99 [-Wimplicit-function-declaration] pthread_setcanceltype(PTHREAD_CA... ^ main.c:154:24: error: use of undeclared identifier 'PTHREAD_CANCEL_ASYNCHRONOUS' pthread_setcanceltype(PTHREAD_CA... ^ main.c:157:2: warning: implicit declaration of function 'pthread_cancel' is invalid in C99 [-Wimplicit-function-declaration] pthread_cancel(t1); ^ 3 warnings and 2 errors generated. make[1]: * [<builtin>: main.o] Error 1 make[1]: Leaving directory '/data/data/com.termux/files/home/edbrowse/edbrowse/src' make: * [makefile:5: all] Error 2

How do I fix this?

OSX High Sierra make tips

  • Do not use tidy-html5 from brew or default. Clone from git. Don't forget to export TIDY_ROOT as the README file says!
  • To compile duktape, see svaarala/duktape#1828
  • You'll receive a malloc.h not found from make. You can avoid that using CFLAGS+=-I/usr/include/malloc

AUR Arch build fails to compile

I've just run into this, on the latest Arch Linux, Edbrowse fails to build from the AUR.

It requires quickjs and the unixodbc packages, which I I instaled, and now it wants jseng. Which is where it trips up.

Is there a static build or is the Aur pkgbuild out of date? The last comment from March this year shows it fails to build as well, though with a different issue that's corrected with the unixodbc package being installed

However the one I'm running into for Arch, is it can't find quickjs-libc.h despite there being a quickjs and quickjspp in the AUR however. So is this an Arch issue or a pkgbuild issue with it failing to compile?

Acid3 test fails to start

Althouh really simple JavaScript case like here does work, Acid3 just fails to start. I wanted to check how much points will edbrowse get, but there is no number at all:

$ ./src/edbrowse http://acid3.acidtests.org/
no ssl certificate file specified; secure connections cannot be verified
183856
warning: http error 404, Not Found
line 153: could not fetch javascript from http://acid3.acidtests.org/data:text/javascript,d1%20%3D%20'one'%3B, code 404
warning: http error 404, Not Found
line 154: could not fetch javascript from http://acid3.acidtests.org/data:text/javascript;base64,ZDIgPSAndHdvJzs%3D, code 404
warning: http error 404, Not Found
line 155: could not fetch javascript from http://acid3.acidtests.org/data:text/javascript;base64,%5a%44%4d%67%50%53%41%6e%64%47%68%79%5a%57%55%6e%4f%77%3D%3D, code 404
warning: http error 404, Not Found
line 156: could not fetch javascript from http://acid3.acidtests.org/data:text/javascript;base64,%20ZD%20Qg%0D%0APS%20An%20Zm91cic%0D%0A%207%20, code 404
warning: http error 404, Not Found
line 157: could not fetch javascript from http://acid3.acidtests.org/data:text/javascript,d5%20%3D%20'five%5Cu0027s'%3B, code 404
349
1,30p
Acid3















JS/?
Frame {empty.png}
FAIL
Frame {empty.txt}
FAIL
Frame {empty}



To pass the test, a browser must use its default settings,
the animation has to be smooth, the score has to end on 100/100,
and the final page has to look exactly, pixel for pixel,
like {this reference rendering}. 

My primary reason of trying edbrowse was to see if it can support rich HTML5 apps that other text mode browsers like lynx,links,links2,w3m,elinks fail to support.

Can't log in to google - says JavaScript is not supported

Hi again! Today I tried logging into my Google account using edbrowse (w/ activated JS of course) and it went like this:

$ LC_ALL=C edbrowse
Edbrowse bereit
e https://google.com/ncr
12579
b
352
,n
1 Search {Images} {Maps} {Play} {YouTube} {Gmail} {Drive} {Calendar} {More »}
2 {Web History} | {Settings} | {Sign in}
3
4 [Google]
5
6 <>
7 <Google Search (gesichert)><I'm Feeling Lucky (gesichert)> {Advanced
8 search}{Language tools}
9
10 Google offered in: {Deutsch}
11 {Advertising Programs}{Business Solutions}{About Google}{Google.de}
12
13 © 2019 - {Privacy} - {Terms}
2g3
73237
325
,n
1 h1 One account. All of Google.
2
3 h2 Sign in with your Google Account
4
5 Enter your email <> <>
6 <Next (gesichert)> {Find my account}
7
8 {Sign in with a different account} {Create account}
9
10 One Google Account for everything Google
11
12 * {About Google}
13 * {Privacy}
14 * {Terms}
15 * {Help}
16
17 [Change language] <‪English (United States)‬>
18
5i1=[email protected]
Enter your email [email protected] <>
6i*
Formularfeld(er) versandt
72640
516
,n
1 h1 One account. All of Google.
2
3 h2 Sign in with your Google Account
4
5 {Back}
6
7 [email protected]
8 [email protected] Password <>
9 <Sign in (gesichert)> <+> Stay signed in
10 For your convenience, keep this checked.
11 On shared devices, additional precautions are recommended. {Learn more}
12 {Forgot password?}
13
14 {Sign in with a different account} {Create account}
15
16 One Google Account for everything Google
17
18 * {About Google}
19 * {Privacy}
20 * {Terms}
21 * {Help}
22
23 [Change language] <‪English (United States)‬>
24
8i2=mypass
[email protected] Password <***************************************************************>
9i

Formularfeld(er) versandt
18621
299
,n
1 h1 Couldn't sign you in
2
3 The browser you're using doesn't support JavaScript,
4 or has JavaScript turned off.
5
6 To keep your Google Account secure, try signing in on a browser that has
7 JavaScript turned on. {Learn more}
8
9 * Google
10 * {Privacy}
11 * {Terms}
12
13 [Change language]<‪English (United States)‬>

Sorry for the wall of text, I deemed I shouldn't crop it, changed username and password though.

Did I do something very wrong?

Thanks for your Time,
Oliver

Infinite loop

Compiled the master from scratch. -v 3.7.4 on Ubuntu bionic: Linux brian-ubuntu 4.18.0-25-generic #26~18.04.1-Ubuntu SMP Thu Jun 27 07:28:31 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux.

When I open a site that has a search feature and search for a phrase, edbrowse gets stuck in a loop, reloading the page over and over again. Eventually the site blocks me unless I hit CTL-c.
Ex output:

i2*
submitting form
30550
28837
3193
31298
28792
3179
31298
28792
3179
31298
28792
3179
31303
28795
3179
31298
28792
3179
31303
...

ipass length too short

Late happy holidays!
I ran into a few problems while attempting to log in to my YouTube/Google-account, one of which is that my password is deemed too long, when being entered using ipass. I can see why password lengths >38 characters might be considered overkill, but I don't want to tell anyone to shorten their password and I don't think you should either.

Entering it using the normal i-command seems to work though.

libpcre2

Hi, I wrote a patch as a attempt to port edbrowse to libpcre2. I understand nearly nothing, then it is probably garbage, but it seems to work.
The patch is on pastebin since github does not work with noscript/basic (x)html browser for patch submission (the name is weird, it is expected):
https://paste.c-net.org/TrailingMentions

Save tabs

Hi. I wish edbrowse had a feature like firefox's ability to save your tabs. I want to be able to turn off the computer and next time I bring up edbrowse, it's got all my sessions the same way I left them.

I was thinking that it would be sufficient to save the filenames (urls) and cursor positions of the full stack of each session to a file. Firefox also saves a cached version of the page, but that's probably not necessary.

Perhaps the default behavior to start edbrowse would be to not re-load the sessions, but there could be a command-line argument to specify a session file to load. And a way in .ebrc to set a default file to load, and to change the default to be loading the session file.

The session file should be updated while you use edbrowse, so that if the power plug gets pulled, you can start back from where you were.

Would these be welcome features? I can try to work on them.

segfault on ctrl-d when using readline

I'm at a bit of a loss here, but I can trivially reproduce this on debian
and ubuntu. Just do

rl
ctrl-d

I'll get a segfault which according to gdb is at the
second line in:

40fca5: e8 96 79 ff ff callq 407640 readline@plt
40fcaa: 80 38 00 cmpb $0x0,(%rax)

which really makes no sense...

pcre -> pcre2

As reported in Debian https://bugs.debian.org/1000056 , pcre has been end-of-life for a while now, upstream won't
fix it any more, and people are invited to migrate to pcre2 (available since 2015)

We will need edbrowse to be migrated to pcre2 before the next Debian release freeze circa end of 2022.

Upstream's documentation is available on
https://pcre.org/current/doc/html/

GPL license version clarification

What is the license of edbrowse? Is it GPL-1.0-only or GPL-1.0-or-later or GPL-2.0-only or GPL-2.0-or-later or GPL-3.0-only or GPL-3.0-or-later or perhaps even something else?

Most source files say "released under GPL" (which is ambiguous but could be reasonably interpreted to mean "any past, current, or future version of GPL") but allowance of GPL version 1 is pretty uncommon outside of perl software (which I realize edbrowse version 1 was).

Some files (win32/vsprtf.c and win32/vsprtf.h) say "Licence: GNU GPL version 2" (which one must probably interpret as "GPL version 2 only") however I am not building on Windows so I assume these files and their licenses do not apply to me (and indeed the README says "For a time, edbrowse could be built on windows, but this is no longer supported" so perhaps these files and their licenses are no longer relevant to anyone).

doc/man-edbrowse-debian.1 says "You may distribute under the terms of the GNU General Public License as specified in the file /usr/share/common-licences/GPLv2 that comes with the Debian distribution" but since that manpage was written by a third party I don't know how authoritative it is regarding the license.

Browsing urbandictionary.com with JavaScript enabled results in a segmentation fault

Edbrowse version: 3.8.5
Steps to reproduce:

  1. Enable javaScript.
  2. b http://urbandictionary.com/
  3. Attempt to navigate around. I typed 1, then enter go go down a few lines. After trying to pass the home link, I get a segfault.

This wouldn't be a huge deal, if not for the fact that Edbrowse is unable to search on Urban Dictionary without javaScript enabled. To test this:

  1. Disable JavaScript.
  2. b http://urbandictionary.com/
  3. /<Search
  4. i=test
  5. i*
  6. ft

As you can see from the page title, the search is never performed.

gnome look

I wonder if my git build is working: I did try many "javascript" sites, but I get 1 empty line most of the time.

Are there test "javascript" sites known to work I could test my build against?

EdBrowse forgets Google authentication

When I sign in to my Google account in EdBrowse, it asks for 2-factor authentication via SMS. After entering the verification code, EdBrowse stores several cookies in my cookie jar, which should include the setting "do not ask again on this computer". But when I restart EdBrowse and sign in again, Google does ask for 2-factor authentication again. So for some reason the cookies are not getting handled like normal.

static build

Hi,

except quickjs (minimal SDK and 0 deps), libpcre and libhtmltidy (cmake?!) SDKs are somewhat "expensive".
Could we get a static build update? What would rock is a nightly static build...

Well, I started to write a shell script to by-pass edbrowse dep SDKs for glibc/linux. Hope it does not go beyond sanity before I reach edbrowse code building.

Curl license clarification

The COPYING file says:

This program uses libcurl.so for http/ftp access.
This is released under the Mozilla public license (mpl).

and:

In summary: GPL + MIT public license,
+ Mozilla public license if edbrowse is packaged with curl.

I think the curl information is outdated. According to curl's license page they used to use the MPL (all traces of which were removed in October 2002) but now use an MIT derivative which SPDX identifies as a separate license ("the curl license").

use buffer contents as filename?

Hi,

I'm sorry, this is probably a FAQ, but I've several times searched through the docs and failed to find the answer.

I'd like to edit an empty buffer, write the filename of buffer 1 to it, edit that filename, then use that new path in an edbrowse command (r into a new buffer or w another buffer to the path).

Is there some variable substituion I can do in the command to do that?

No way to change config options on the fly

I just wanted to automate a captive portal form, that first has a page with an accept button, and after submission redirects to a huge page over my slow connection.

So naturally, I wanted it to automatically stop loading as soon as the redirect is through and stop the huge page from loading.

But I found no way to automate it.

I thought I could just put webtimer = 3 on the command line before pushing the button with i*, but that does not work. Neither is any command to set settings from the command line mentioned anywhere in the help. Let alone finding a setting to not load more than the HTTP header.
Neither h not ? displays a help text, and help does not either, but at least loads it, which still requires you to look up the help somewhere else because otherwise you’d never know how to display it.
So while the software is nice, it has zero discoverability.

And while interactively, I can of course press , which I might script in bash too, using edbrowse as a co-process, that does not allow me to check if I’m past the redirect yet (which I need to), or already loading the huge page. So doing it that way is a bit silly. :)

Can you document how to set a setting from the command line, e.g. for just one command, and then set it back?
And can you also document how to stop a page from loading when in a script? (Maybe with an explanation for when to use edbrowse’s internal functions feature versus just sending it input via stdin , e.g. using echo -e, from the shell. Those functions must have an ability to stop a download, or a web server could just trickle the bits in to make it load forever and prevent the user from using edbrowse.)
(Additionally, I found that while the documentation and quick reference tells you how to press the second button, it does not tell you how to press the first one. At least not in a quick lookup in a 30 minute window of time. i* was a wild guess by me.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.