2024-06-11 10:42:38 +00:00
<!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 >
2024-06-15 03:36:06 +00:00
< 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 >
2024-06-11 10:42:38 +00:00
< ul >
< li > lightweight (less than 20k bytes) without bundled electron.< / li >
< li > much less memory footprint than edge/chrome browser and highly performant.< / li >
2024-06-15 03:36:06 +00:00
< li > keyboard friendly with vim-style keymaps and command line support in address bar.< / li >
2024-06-18 02:41:17 +00:00
< li > < a href = "https://uweb.surge.sh/en/redirect/index.html#" > global redirection< / a > to bypass censorship.< / li >
2024-06-15 03:36:06 +00:00
< li > user scripts at will. Ex. pressing " tr" to translate the page (need mapkeys.json config).< / li >
2024-06-11 10:42:38 +00:00
< 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 >
2024-06-18 02:41:17 +00:00
< 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 >
2024-06-19 07:25:23 +00:00
< h5 id = "install-with-nodejs" > Install with nodejs< / h5 >
2024-06-18 02:41:17 +00:00
< pre > < code > npm install electron
npm install ebrowser
2024-06-11 10:42:38 +00:00
< / code > < / pre >
< p > Run ebrowser< / p >
< pre > < code > electron ~/node_modules/ebrowser
< / code > < / pre >
2024-06-18 02:41:17 +00:00
< p > Later on, you can run " npm install electron" to update electron/chromium or " npm install ebrowser" to update ebrowser independently.< / p >
2024-06-18 22:36:48 +00:00
< 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 >
2024-06-18 23:00:19 +00:00
< 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 >
2024-06-11 10:42:38 +00:00
< h4 id = "key-shortcuts" > Key shortcuts< / h4 >
< ul >
2024-06-15 03:36:06 +00:00
< li > CTRL+C: stop loading< / li >
2024-06-11 10:42:38 +00:00
< li > CTRL+G: address bar to show page url< / li >
< li > CTRL+L: focus to address bar< / li >
< li > CTRL+T: new Tab< / li >
2024-06-15 03:36:06 +00:00
< li > CTRL+SHIFT+T: restore closed Tab< / li >
2024-06-11 10:42:38 +00:00
< li > CTRL+TAB: switch to next tab< / li >
< li > CTRL+SHIFT+TAB: switch to previous tab< / li >
< li > CTRL+W: close Tab< / li >
2024-06-24 01:58:02 +00:00
< li > ALT+< -: go backward< / li >
< li > ALT+-> : go forward< / li >
2024-06-11 10:42:38 +00:00
< 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 >
2024-06-18 23:00:19 +00:00
< li > F1: Help< / li >
2024-06-11 10:42:38 +00:00
< li > F5: page refresh/reload< / li >
< li > F12: devtools< / li >
< / ul >
< h4 id = "address-bar-commands" > Address bar commands< / h4 >
< ul >
< li > " /" for find-in-page< / li >
< li > " :" for address bar commands
< ul >
2024-06-13 00:07:31 +00:00
< li > ac [bookmark/history path w/o ext] : load " .rec" file for autocomplete.< / li >
2024-06-11 10:42:38 +00:00
< li > b [bookmarkfilename w/o ext] : bookmark current page in file.< / li >
2024-06-24 22:06:51 +00:00
< li > bjs : Browser-level JavaScript execution.< / li >
2024-06-11 10:42:38 +00:00
< 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 >
2024-06-15 03:36:06 +00:00
< li > {< a href = "https://www.electronjs.org/docs/latest/api/session#sescleardataoptions" > options< / a > }< / li >
2024-06-11 10:42:38 +00:00
< / ul >
< / li >
< li > ext [extension path]: load unpacked Chrome extension.< / li >
2024-06-18 15:28:12 +00:00
< 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 >
2024-06-24 01:58:02 +00:00
< 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 >
2024-06-15 03:36:06 +00:00
< li > nc/uc : No Cookie forwarding/Use Cookie forwarding with global redirection.< / li >
2024-06-11 10:42:38 +00:00
< li > nr/ur for No/Use " redirect.json" for domain redirection.< / li >
2024-06-18 02:41:17 +00:00
< 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 >
2024-06-11 10:42:38 +00:00
< li > ua [useragentName] : set user agent for future tabs. default user agent w/o arguments.< / li >
2024-06-18 15:28:12 +00:00
< li > update [updateurl] : update the app. updateurl is optional.< / li >
2024-06-11 10:42:38 +00:00
< 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 >
2024-06-18 02:41:17 +00:00
< li > " !" address bar commands< br >
2024-06-24 01:58:02 +00:00
" !xx ..." evaluates " xx.js" with the whole text as arguments[0].< / li >
2024-06-11 10:42:38 +00:00
< / 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 >
2024-06-13 00:07:31 +00:00
< 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 >
2024-06-18 15:28:12 +00:00
< li > " !" for " !" address bar commands< / li >
2024-06-13 00:07:31 +00:00
< / ul >
< p > The other commands are defined in " mapkeys.json" , which will map keys to address bar commands.< / p >
2024-06-11 10:42:38 +00:00
< h4 id = "configuration-files" > Configuration files< / h4 >
< ul >
< li > " config" : lines of address bar commands.< / li >
< li > " search.json" : search engines as shortcut-queryUrl pairs.< / 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-useragent pairs< / li >
< / ul >
2024-06-24 01:58:02 +00:00
< h4 id = "javascript-at-three-levels" > Javascript at three levels< / h4 >
< ul >
< li > Web page: urls like " javascript:" or bookmarklet command " :bml" run in web page.< / li >
2024-06-24 22:06:51 +00:00
< 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 >
2024-06-24 01:58:02 +00:00
< li > OS level (or main process) : " :js" to execute the following js code with all OS APIs available.< / li >
< / ul >
2024-06-24 22:06:51 +00:00
< 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 >
2024-06-11 10:42:38 +00:00
< 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 >
2024-06-18 02:41:17 +00:00
< 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 >
2024-06-11 10:42:38 +00:00
< / div >
2024-06-24 01:58:02 +00:00
< p > Last Modified: 24 June 2024< br >
2024-06-11 10:42:38 +00:00
< 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 >