From f47c7f066b821d26a8fdd31cc6429f96257f39df Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Mon, 4 Jan 2021 04:27:24 -0800 Subject: md updates, including browser support info; fixes #30 --- tabfs.md | 108 ++++++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 66 insertions(+), 42 deletions(-) diff --git a/tabfs.md b/tabfs.md index 4d2fd69..efb42b3 100644 --- a/tabfs.md +++ b/tabfs.md @@ -22,8 +22,7 @@ pre { white-space: pre-wrap; } mounts your browser tabs as a filesystem on your computer. Out of the box, it supports Chrome and (to a lesser extent[^firefox]) -Firefox, on macOS and Linux. ([see full -list](https://github.com/osnr/TabFS/blob/master/install.sh))[^otherbrowsers] +Firefox, on macOS and Linux.[^otherbrowsers] [^firefox]: because of the absence of the [chrome.debugger API for extensions](https://developer.chrome.com/docs/extensions/reference/debugger/). @@ -32,12 +31,13 @@ list](https://github.com/osnr/TabFS/blob/master/install.sh))[^otherbrowsers] get that second level of functionality that is currently Chrome-only. -[^otherbrowsers]: ... and Brave, Vivaldi, FreeBSD, etc. It could - probably be made to work on other browsers like - [Safari](https://github.com/osnr/TabFS/issues/6) that support the - WebExtensions API, and [on Windows using Dokan or WinFUSE/WSL - stuff (?)](https://github.com/osnr/TabFS/issues/13), but I haven't - looked into that yet. +[^otherbrowsers]: plus some related browsers and platforms: it also + supports [Brave](https://github.com/osnr/TabFS/issues/30), + Vivaldi, FreeBSD, etc. It could probably be made to work on other + browsers like [Safari](https://github.com/osnr/TabFS/issues/6) + that support the WebExtensions API, and [on Windows using Dokan or + WinFUSE/WSL stuff (?)](https://github.com/osnr/TabFS/issues/13), + but I haven't looked into that yet. Each of your open tabs is mapped to a folder. @@ -63,8 +63,8 @@ for that tab

This gives you a _ton_ of power, because now you can apply [all the existing tools](https://twitter.com/rsnous/status/1018570020324962305) on your computer that already know how to deal with files -- terminal -commands, scripting languages, etc -- and use them to control and -communicate with your browser. +commands, scripting languages, graphical explorers, etc -- and use +them to control and communicate with your browser. Now you don't need to [code up a browser extension from scratch](https://twitter.com/rsnous/status/1261392522485526528) every @@ -177,7 +177,12 @@ The [`debugger/` subdirectory](https://github.com/osnr/TabFS/blob/fef9289e3a7f82cda6319d5f19d5a5f13f3cc44b/extension/background.js#L355) in each tab folder has synthetic files that let you access loaded resources (in `debugger/resources/`) and scripts (in -`debugger/scripts/`). (this is experimental) +`debugger/scripts/`). + +(this is experimental.) + +(TODO: edit the images in place? you can already kinda edit the +scripts in place) ### Retrieve what's playing on YouTube Music: [youtube-music-tabfs](https://github.com/junhoyeo/youtube-music-tabfs) @@ -218,6 +223,10 @@ that every time I want to reload my extension code. edit `page.html` in the tab folder. I guess it could just stomp outerHTML at first, eventually could do something more sophisticated +then you can use your existing text editor! and you'll always know +that if the file saved, then it's up to date in the browser. no flaky +watcher that you're not sure if it's working + (it would be cool to have a persistent storage story here also. I like the idea of being able to put arbitrary files anywhere in the subtree, actually, because then you could use git and emacs @@ -276,6 +285,11 @@ and saving inside a tab's folder, that tab suddenly really want it to survive as long as a normal file would, unlike most browser tabs today) +(the combination of these last 3 TODOs may be a very powerful, open, +dynamic, flexible programming environment where you can bring whatever +external tools you want to bear, everything is live in your browser, +you never need to restart...) + ## Setup **disclaimer**: this extension is an experiment. I think it's cool and @@ -289,6 +303,15 @@ extension is to create a gigantic new surface area of communication between stuff inside your browser and software on the rest of your computer. +(The installation process is pretty involved right now. I'd like to +simplify it, but I also don't want a seamless installation process +that does a bad job of managing people's expectations. And it's +important to me that users [feel +comfortable](https://twitter.com/rsnous/status/1345113873792126976) +looking at [how TabFS works](#design) -- it's pretty much just two +files! -- and that they can mess around with it; it shouldn't be a +black box.) + Before doing anything, clone [this repository](https://github.com/osnr/TabFS): ``` @@ -301,12 +324,9 @@ Then, install the C filesystem. ### 1. Install the browser extension -(I think for Opera or whatever other Chromium-based browser, you could -get it to work, but you'd need to change the native messaging path in -install.sh. Not sure about Safari. maybe Edge too? if you also got -everything to compile for Windows) +#### in Chrome, Chromium, and related browsers -#### in Chrome +(including Brave and Vivaldi) Go to the [Chrome extensions page](chrome://extensions). Enable Developer mode (top-right corner). @@ -350,7 +370,7 @@ $ make Now install the native messaging host into your browser, so the extension can launch and talk to the filesystem: -#### Chrome and Chromium +#### Chrome, Chromium, and related browsers Substitute the extension ID you copied earlier for `jimpolemfaeckpjijgapgkmolankohgj` in the command below. @@ -359,11 +379,11 @@ Substitute the extension ID you copied earlier for $ ./install.sh chrome jimpolemfaeckpjijgapgkmolankohgj ``` -or - -``` -$ ./install.sh chromium jimpolemfaeckpjijgapgkmolankohgj -``` +(For Chromium, say `chromium` instead of `chrome`. For Vivaldi, say +`vivaldi` instead. For Brave, say `chrome`. You can look at the +contents of +[install.sh](https://github.com/osnr/TabFS/blob/master/install.sh) for +the latest on browser and OS support.) #### Firefox @@ -458,19 +478,15 @@ marshalling) TODO: make diagrams? -## FIXME: Credits - -- etc -- etc -- etc - ## License GPLv3 ## things that could/should be done -(maybe you can do these?) +(maybe you can do these? lots of people are [already pitching in on +GitHub](https://github.com/osnr/TabFS); I wish it was easier for me to +keep up listing them all here!) - [add more synthetic files!! (it's just JavaScript)](https://twitter.com/rsnous/status/1345113873792126976) @@ -489,16 +505,19 @@ GPLv3 - why can't Preview open images? GUI programs often struggle with the filesystem for some reason. CLI more reliable -- multithreading. the key constraint is that I pass `-s` to +- ~~multithreading. the key constraint is that I pass `-s` to `fuse_main` in `tabfs.c`, which makes everything single-threaded. but I'm not clear on how much it would improve - performance? maybe a lot, but not sure. maybe workload-dependent? + performance? maybe a lot, but not sure. maybe workload-dependent?~~ - the extension itself (and the stdin/stdout comm between the fs and - the extension) would still be single-threaded, but you could + ~~the extension itself (and the stdin/stdout comm between the fs + and the extension) would still be single-threaded, but you could interleave requests since most of that stuff is async. like the screenshot request that takes like half a second, you could do other - stuff while waiting for the browser to get back to you on that (?) + stuff while waiting for the browser to get back to you on that (?)~~ + *update: [we are + multithreaded](https://github.com/osnr/TabFS/pull/29) now, thanks to + [huglovefan](https://github.com/huglovefan)!* another issue is that _applications_ tend to hang if any individual request hangs anyway; they're not expecting the @@ -513,12 +532,17 @@ GPLv3 sure impact of these - TypeScript (how to do with the minimum amount of build system and - package manager nonsense?) - -- look into support for Firefox / Windows / Safari / etc. best FUSE - equiv for Windows? can you bridge to the remote debugging APIs that - all of them already have to get the augmented functionality? or just - implement it all with JS monkey patching? + package manager nonsense?) (now realizing that if I had gone with + TypeScript, I would then have to ask people to install npm and + webpack and the TS compiler and whatever just to get this + running. really, really glad I didn't.) maybe we can just do dynamic + type checking at the fs op call boundaries? + +- [look into support for Firefox / Windows / Safari / + etc.](https://github.com/osnr/TabFS/issues?q=is%3Aopen+is%3Aissue+label%3Aport) + best FUSE equiv for Windows? can you bridge to the remote debugging + APIs that all of them already have to get the augmented + functionality? or just implement it all with JS monkey patching? - window management. tab management where you can move tabs. 'merge all windows'. [history management](https://anildash.com/2021/01/03/keeping-tabs-on-your-abstractions/) @@ -554,9 +578,9 @@ suggests making an extension is a whole Thing, a whole Project. like, why can't I just take a minute to ask my browser a question or tell it to automate something? lightness -- ["files are a sort of approachable 'bridge' that everyone knows how +- "files are a sort of approachable 'bridge' that everyone knows how to interact with" / files are like one of the first things you learn - if you know any programming language / "because of this fs thing any + if you know any programming language / ["because of this fs thing any beginner coding thing can make use of it now"](https://twitter.com/rsnous/status/1345490658836926464) - a lot of existing uses of these browser control APIs are in an -- cgit v1.2.3