mirror of
https://github.com/torappinfo/uweb.git
synced 2024-08-14 23:54:59 +00:00
234 lines
12 KiB
HTML
234 lines
12 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
|
|
<link rel="stylesheet" href="../style.css#" type="text/css" />
|
|
<title></title>
|
|
<script type="text/javascript">
|
|
function findLang(){
|
|
let href = location.href;
|
|
for(let i=href.length-1;i>0;i--){
|
|
if('/'==href.charAt(i) && '/'==href.charAt(i-3))
|
|
return i;
|
|
}
|
|
return 0;
|
|
}
|
|
function nav2(page){
|
|
let i = findLang();
|
|
location.href = location.href.substring(0,i+1)+page;
|
|
}
|
|
function nav2Lang(lang){
|
|
let i = findLang();
|
|
let href = location.href;
|
|
location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<header class='header'>
|
|
<a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">Home</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">Tags</a>
|
|
|
|
<nav>
|
|
</nav>
|
|
</header>
|
|
<br />
|
|
|
|
<div class="container">
|
|
<h1 class="title">
|
|
<br>
|
|
<span class="subtitle"></span>
|
|
</h1>
|
|
<ul class="tags">
|
|
|
|
</ul>
|
|
<script>function notRepo(){let u=location.href.replace(/#$/, '');return u.endsWith('index.html')||u.endsWith('readme/');}</script>
|
|
<h3 id="ebrowserhttpsgithubcomtorappinfoebrowser-keyboard-friendly-minimal-suckless-web-browser"><a href="https://github.com/torappinfo/ebrowser">Ebrowser</a>: keyboard-friendly minimal suckless web browser</h3>
|
|
<p>Ebrowser is designed with the philosophy of <a href="https://github.com/torappinfo/uweb">Android uweb browser</a> (<a href="https://gitlab.com/jamesfengcao/uweb">gitlab</a>).</p>
|
|
<ul>
|
|
<li>lightweight (less than 20k bytes) without bundled electron.</li>
|
|
<li>much less memory footprint than edge/chrome browser and highly performant.</li>
|
|
<li>keyboard friendly with vim-style keymaps and command line support in address bar.</li>
|
|
<li><a href="https://uweb.surge.sh/en/redirect/index.html#" onclick="if(notRepo()){location='../redirect/index.html#';return false;}">global redirection</a> to bypass censorship.</li>
|
|
<li>user CSS/JS at will. Ex. pressing "md" in no-focus mode to preview markdown file.</li>
|
|
<li>global CSS/JS for all sites at will.</li>
|
|
<li>CSS/JS for domains, similar to <a href="https://jamesfengcao.gitlab.io/uweb/en/sitejs/index.html">uweb</a>, but use sitejs/[domain].js or sitecss/[domain].css, not [domain root].js/css.</li>
|
|
<li>customizable.</li>
|
|
</ul>
|
|
<p>Note: Usually electron apps are heavyweight as they use browsers for simple things. Ebrowser uses core chromium effectively and very lightweight. Recommend to install electron separately.</p>
|
|
<h4 id="installing-for-windows-macos-and-linux">Installing (for Windows, MacOS and Linux)</h4>
|
|
<h5 id="install-with-prebuilt-binaries">Install with prebuilt binaries</h5>
|
|
<p>You can find prebuilt binaries <a href="https://github.com/torappinfo/ebrowser/releases">here</a>.</p>
|
|
<h5 id="install-with-nodejs">Install with nodejs</h5>
|
|
<pre><code>npm install electron
|
|
npm install ebrowser
|
|
</code></pre>
|
|
<p>Run ebrowser</p>
|
|
<pre><code>electron ~/node_modules/ebrowser
|
|
</code></pre>
|
|
<p>Later on, you can run "npm install electron" to update electron/chromium or "npm install ebrowser" to update ebrowser independently.</p>
|
|
<h5 id="update-app-quickly-without-updating-chromium">Update app quickly without updating chromium</h5>
|
|
<p>Pressing "Alt" to show the menu bar and choose "Check for updates" under "Help". OR</p>
|
|
<p>Type ":update" in the address bar and press "enter" key to update.</p>
|
|
<p>Mirror urls could be used like ":update https://uwebzh.netlify.app/misc/ebrowser". All the mirrors listed on <a href="https://uwebzh.netlify.app/en/readme/index.html">uweb browser</a> could be used. The update url needs to be changed accordingly to be the folder "misc/ebrowser" under the mirror site root url.</p>
|
|
<h4 id="key-shortcuts">Key shortcuts</h4>
|
|
<ul>
|
|
<li>Alt: show menu</li>
|
|
<li>ALT+<-: go backward</li>
|
|
<li>ALT+->: go forward</li>
|
|
<li>CTRL+C: stop loading</li>
|
|
<li>CTRL+G: address bar to show page url</li>
|
|
<li>CTRL+L: focus to address bar</li>
|
|
<li>CTRL+T: new Tab</li>
|
|
<li>CTRL+SHIFT+T: restore closed Tab</li>
|
|
<li>CTRL+TAB: switch to next tab</li>
|
|
<li>CTRL+SHIFT+TAB: switch to previous tab</li>
|
|
<li>CTRL+W: close Tab</li>
|
|
<li>CTRL+SHIFT+R: enable global redirection ("gredirect.json")</li>
|
|
<li>CTRL+R: disable global redirection</li>
|
|
<li>ESC: remove focus. similar to vi normal mode.</li>
|
|
<li>F1: Help</li>
|
|
<li>F5: page refresh/reload</li>
|
|
<li>F12: devtools</li>
|
|
</ul>
|
|
<h4 id="address-bar-commands">Address bar commands</h4>
|
|
<p>Like any popular browser, the very first word in address bar if defined in "search.json" identifies a search engine. Moreover, the address bar serves as command line interface:</p>
|
|
<ul>
|
|
<li>"/" for find-in-page</li>
|
|
<li>":" for address bar commands
|
|
<ul>
|
|
<li>ac [bookmark/history path w/o ext] : load ".rec" file for autocomplete.</li>
|
|
<li>b [bookmarkfilename w/o ext] : bookmark current page in file.</li>
|
|
<li>bjs : Browser-level JavaScript execution.</li>
|
|
<li>bml [filename w/o extension]: load/execute the javascript file.</li>
|
|
<li>cert : allow invalid certificates w/o arguments, otherwise restore to default.</li>
|
|
<li>clear : the arguments could be
|
|
<ul>
|
|
<li>cache : clear cache</li>
|
|
<li>dns : clear dns cache</li>
|
|
<li>storage: clear site storage data.</li>
|
|
<li>{<a href="https://www.electronjs.org/docs/latest/api/session#sescleardataoptions">options</a>}</li>
|
|
</ul>
|
|
</li>
|
|
<li>ext [extension path]: load unpacked Chrome extension.</li>
|
|
<li>gr [gredirect index]: global redirection with corresponding index. Use the first global redirection url if no argument. Disable global redirection with any index out of the range.</li>
|
|
<li>js [js code] : execute JS code at OS level. Note: "javascript:..." is special url and thus works in the current web page, while ":js ..." commands can do any OS operations.</li>
|
|
<li>nc/uc : No Cookie forwarding/Use Cookie forwarding with global redirection.</li>
|
|
<li>nr/ur for No/Use "redirect.json" for domain redirection.</li>
|
|
<li>np : no proxy.</li>
|
|
<li>up [proxyName] : use proxy. privous proxy or the first proxy in proxy.json w/o [proxyName]. ":up" command also disables global and domain redirections, which are not restored by ":np".</li>
|
|
<li>ua [useragentName] : set user agent for future tabs. default user agent w/o arguments.</li>
|
|
<li>update [filename] : update the app w/o argument, otherwise retrive the [filename] from remote. The filename could be any file on <a href="https://jamesfengcao.gitlab.io/uweb/en/readme/index.html">mirror sites</a> (this repository is part of it).</li>
|
|
<li>pdf [filename w/o extension] {<a href="https://www.electronjs.org/docs/latest/api/web-contents#contentsprinttopdfoptions">options</a>} : print to PDF file. All arguments are optional; empty option "{}" to capture long screenshot as vector graphics.</li>
|
|
</ul>
|
|
</li>
|
|
<li>"!" address bar commands<br>
|
|
"!xx ..." evaluates "xx.js" with the whole text as arguments[0].</li>
|
|
<li>i: internal urls, which will be consistent with <a href="https://jamesfengcao.gitlab.io/uweb/en/links/index.html">uweb</a>.
|
|
<ul>
|
|
<li>"i:0/js/xxx.js:[url]" loads the "[url]" with bookmarklet "js/xxx.js".</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h4 id="commands-in-no-focus-mode-this-mode-is-similar-to-vi-normal-mode">Commands in no-focus mode (this mode is similar to vi Normal mode)</h4>
|
|
<p>Pressing "ESC" to enter no-focus mode if not sure.</p>
|
|
<ul>
|
|
<li>":" for address bar commands</li>
|
|
<li>"/" for find-in-page with address bar</li>
|
|
<li>"!" for "!" address bar commands</li>
|
|
</ul>
|
|
<p>The other commands are defined in "mapkeys.json", which will map keys to address bar commands.</p>
|
|
<h4 id="configuration-files">Configuration files</h4>
|
|
<ul>
|
|
<li>"config": lines of address bar commands.</li>
|
|
<li>"search.json": <a href="https://jamesfengcao.gitlab.io/uweb/en/search/index.html" onclick="if(notRepo()){location='../search/index.html#';return false;}">search engines</a> as shortcut-queryUrl pairs, where "%s" would be replaced by search query.</li>
|
|
<li>"default.autoc": predefined strings for address bar auto completion.</li>
|
|
<li>"gredirect.json": global redirection urls as array of urls</li>
|
|
<li>"redirect.json": domain-replacementDomain pairs, default to be applied.</li>
|
|
<li>"mapkeys.json": keys-addressbarCommands pairs. The addressbar commands are multiple lines of address bar command separated by "\n".</li>
|
|
<li>"proxy.json": name-<a href="https://www.electronjs.org/docs/latest/api/structures/proxy-config">ProxyConfig</a> pairs</li>
|
|
<li>"uas.json" : name-<a href="https://jamesfengcao.gitlab.io/uweb/en/useragents/index.html" onclick="if(notRepo()){location='../useragents/index.html#';return false;}">useragent</a> pairs.</li>
|
|
<li>Customized menus: json files as array of strings with menuitem name and address bar commands alternately.
|
|
<ul>
|
|
<li>"menu.json": array of strings for <a href="https://jamesfengcao.gitlab.io/uweb/en/urls/index.html" onclick="if(notRepo()){location='../urls/index.html#';return false;}">user-defined menus</a>. The array has submenu name and address bar commands alternately. The odd-indexed strings are address bar commands with "%u" as the downloaded url.</li>
|
|
<li>"select.json": to define menus for text selections. The odd-indexed strings are address bar commands with "%s" as the text selection.</li>
|
|
<li>"download.json" : array of strings to define context menu and buttons for downloading dialog. The even-indexed strings are texts to show on the button. The odd-indexed strings are address bar commands with "%u" as the downloaded url.</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h4 id="javascript-at-three-levels">Javascript at three levels</h4>
|
|
<ul>
|
|
<li>Web page: url like "javascript:" or bookmarklet command ":bml" runs in web page.</li>
|
|
<li>Browser (or renderer process) :
|
|
<ul>
|
|
<li>":bjs" to execute the following js code at browser level.</li>
|
|
<li>"!xx" evaluates "xx.js", which could manipulate address bar etc.</li>
|
|
</ul>
|
|
</li>
|
|
<li>OS level (or main process) : ":js" to execute the following js code with all OS APIs available.</li>
|
|
</ul>
|
|
<h5 id="examples-for-jsbjs-commands">examples for ":js"/":bjs" commands</h5>
|
|
<pre><code>:js bJS=true //allow external Javascript files for web pages
|
|
:js bJS=false //disallow external Javascript files for web pages
|
|
:bjs bHistory=true //to record url history
|
|
:bjs bQueryHistory=true //to record query/command history
|
|
</code></pre>
|
|
<h4 id="new-usages">New usages</h4>
|
|
<ul>
|
|
<li>
|
|
<p>Vector designing with web tech to replace Adobe Illustrator/Inkscape.</p>
|
|
<ul>
|
|
<li>
|
|
<p>Design with web tech.</p>
|
|
</li>
|
|
<li>
|
|
<p>Printing to pdf with customized paper size.</p>
|
|
</li>
|
|
<li>
|
|
<p>Magnify the pdf paper size to the required size.</p>
|
|
</li>
|
|
</ul>
|
|
<p>OR</p>
|
|
<ul>
|
|
<li>Adjust window width and use addressbar command line ":Pdf {}" to export vector graphics.</li>
|
|
<li>Use imageMagick to convert to any other vector graphics format.</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h4 id="license">License</h4>
|
|
<p>You can copy or modify the code/program under the terms of the GPL3.0 or later versions.</p>
|
|
|
|
</div>
|
|
<p>Last Modified: 12 July 2024<br>
|
|
reorg ebrowserreadme.md<br>
|
|
<pre></pre>
|
|
</p>
|
|
|
|
<script id='jsgiscus'
|
|
src='https://giscus.app/client.js'
|
|
data-repo="torappinfo/uweb"
|
|
data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
|
|
data-category="Announcements"
|
|
data-category-id="DIC_kwDOEgNLGc4CQjsh"
|
|
data-mapping="title"
|
|
data-strict="0"
|
|
data-reactions-enabled="1"
|
|
data-emit-metadata="0"
|
|
data-input-position="top"
|
|
data-theme="light"
|
|
data-lang="en"
|
|
data-loading="lazy"
|
|
crossorigin="anonymous" async>
|
|
</script>
|
|
|
|
<footer class="site-footer">
|
|
<div class="container">
|
|
© 2018-2024 Richard H. Cao
|
|
</div>
|
|
</footer>
|
|
<!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->
|
|
|
|
|
|
</body>
|
|
</html>
|