diff options
| author | Omar Rizwan <omar@omar.website> | 2021-01-04 04:27:24 -0800 | 
|---|---|---|
| committer | Omar Rizwan <omar@omar.website> | 2021-01-04 04:27:24 -0800 | 
| commit | f47c7f066b821d26a8fdd31cc6429f96257f39df (patch) | |
| tree | 3ecf762bc22f9bbd8ff8850c791fdafb8671eef9 | |
| parent | 683a3eb2339b27e8c0ff35834c6d3eb8b8f8da64 (diff) | |
md updates, including browser support info; fixes #30
| -rw-r--r-- | tabfs.md | 108 | 
1 files changed, 66 insertions, 42 deletions
| @@ -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</p>  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 | 
