
Cloudmacs: access your Emacs in browser - karlicoss
https://beepb00p.xyz/cloudmacs.html
======
mapgrep
“The authors intended redisplay to be used on text terminals over slow links.
Emacs, to this day, has code that activates if it thinks you’re running on a
connection slower than 2600 baud.” [https://m.facebook.com/notes/daniel-
colascione/buttery-smoot...](https://m.facebook.com/notes/daniel-
colascione/buttery-smooth-emacs/10155313440066102)

I feel like a grumpy fossil for asking this, but if your problem is “Sometimes
you have to use non-personal computers where it's not possible/undesirable to
install desktop Emacs,” why not run emacs the way it has been run in exactly
those sorts of situations for almost 50 years? Remotely, via shell?

Is the hat trick here that by stuffing emacs into a docker container and
accessing it over the web you can consume like 10,000 times the energy and
resources of just running it over ssh in a terminal window as God intended ?

Sorry sorry that was a rude question. Now please get off my lawn.

(Honestly though I ran emacs for 5+ years entirely on an overtaxed Sun
workstation shared with dozens if not hundreds of other students, over ssh,
and it was fine! I believe I even had color working. I began at 14.4kbps and
went from there. I saw the machine once, maybe twice.)

~~~
pcr910303
> why not run emacs the way it has been run in exactly those sorts of
> situations for almost 50 years? Remotely, via shell?

You know what? This project is doing exactly that; using Emacs remotely, via a
terminal (not a shell BTW, shell is just a name for some specific language’s
interpreter, that is good at launching sub processes).

It’s using the gotty[0] library, which is an implementation of the tty[1] in
the browser.

It’s a natural extension; ttys have been ported for a few decades, starting
from teleprinters[2] to text terminals[3] and terminal emulators[4].

[0] [https://github.com/yudai/gotty](https://github.com/yudai/gotty)

[1]
[https://en.m.wikipedia.org/wiki/Terminal_emulator](https://en.m.wikipedia.org/wiki/Terminal_emulator)

[2]
[https://en.m.wikipedia.org/wiki/Teleprinter](https://en.m.wikipedia.org/wiki/Teleprinter)

[3]
[https://en.m.wikipedia.org/wiki/Text_terminal](https://en.m.wikipedia.org/wiki/Text_terminal)

[4]
[https://en.m.wikipedia.org/wiki/Terminal_emulator](https://en.m.wikipedia.org/wiki/Terminal_emulator)

~~~
0x445442
But the migration from teleprinters to text terminals to terminal emulators
was in one direction. I think the comment's point is terminal emulator to
terminal emulator embedded in a web browser is a regression.

~~~
burke
If you squint hard enough, the browser is just a different location for the
same old crufty TTY subsystem that normally lives in-kernel.

------
nuggien
this seems to be using gotty [1] to run spacemacs and serve it up as a web
app.

[1]: [https://github.com/yudai/gotty](https://github.com/yudai/gotty)

~~~
karlicoss
Yep, should have summarized in a comment, thanks! I've got a 'how does it work
section' in readme: [https://github.com/karlicoss/cloudmacs#how-does-it-
work](https://github.com/karlicoss/cloudmacs#how-does-it-work)

\- Gotty is a tool that allows accessing any TTY app as a web page (also
allows forwarding input)

\- We use Gotty to run emacsclient --tty -a '' command, that connects to the
existing Emacs instance or starts a new one. That makes the session persist
tab closing, connection problems etc.

\- Your Emacs configs and files you want to expose to Cloudmacs are mapped in
docker-compose.yml file.

Rest of the setup is basically dirty business of setting up Docker container,
permissions etc.

~~~
jraph
Do you know how gotty compares to shellinabox? I use the latter when I cannot
use SSH.

There is WeTTY, too, that is based on xterm.js, which seems interesting. This
one is listed in the readme of Gotty.

~~~
karlicoss
I did some googling and couldn't find any clear differences, so just settled
on gotty. If anyone knows, I'd be happy to add it to readme!

------
fsiefken
With Termux I run spacemacs on my phone and oculus go and quest, but this is
neat as well. Now I could theoretically use emacs in Firefox Reality where I
have all my other apps handy.

~~~
pvinis
I would love to read or watch about how you use all that!

~~~
karlicoss
Yep, would be interested to know as well! I can somewhat comfortably use vim
via termux, but emacs seems too much in terms of keybindings. Unless you
connect external keyboard?

~~~
fsiefken
Bluetooth keyboard of course, can't really use vim or spacemacs without it. In
Termux I install curl and all the prerequisites for a spacemacs install.
Oculus TV can be made to use Android apps like Termux.

------
Koshkin
Q: a) can emacs be "emscripted"? b) could one access emacs using the web
browser built into emacs?

~~~
jackcviers3
No - it doesn't run js.

------
jordigh
It's a bit old and abandoned, by ymacs is another approach:

[http://www.ymacs.org/](http://www.ymacs.org/)

~~~
hatmatrix
Cloudmacs seems favorable since it's not a rewrite but use of the existing
infrastructure, which means all emacs packages are available to it.

------
alexeiz
How does this work with numerous Emacs keybindings which surely conflict with
browser shortcuts? If you press Ctrl-N in the Cloudmacs, will your cursor move
one line down or will the browser open a new window?

~~~
celrod
Chrome has an app mode. From memory, the steps are roughly

1\. Press the three dots to the right of the url. 2\. Click more tools on the
drop down menu. 3\. Finally "create shortcut".

This should let you open that website in a mode where it hijacks relatively
few keyboard shortcuts, so that `C-N`, `C-W`, etc, work. I don't think it gets
all of them though.

------
selfishgene
Can this run graphical version of emacs or just terminal? Any support for Kui?
([https://medium.com/the-graphical-terminal/visualizing-ci-
cd-...](https://medium.com/the-graphical-terminal/visualizing-ci-cd-in-a-
terminal-cf49c4d211cb))

Would like to be able use latex-preview in something like this.

~~~
yjftsjthsd-h
I suppose the GUI analog to gotty is Apache Guacamole, which should run emacs
fine (along with most anything else).

------
georgewsinger
Is this better than using emacs over SSH?

~~~
karlicoss
If you have access to ssh client and can connect to your server, then not
really.

Could however be better from security perspective if you don't want to expose
a shell and the whole filesystem to potentially untrusted computers.

~~~
xtajv
Based on [1] it looks like you could gain root within the docker container.
From there, you need a bit of luck to get root on the host [2].

[1]
[https://github.com/karlicoss/cloudmacs/blob/master/asEnvUser](https://github.com/karlicoss/cloudmacs/blob/master/asEnvUser)
[2]
[https://security.stackexchange.com/a/153016](https://security.stackexchange.com/a/153016)

~~~
karlicoss
Within the Docker container, everything runs as root by default, since
container can't know your UID in advance. Main reason for this script is to
make sure mounted files are not written back as root.

Although a section explaining how to build container that runs as non-root
user in the first place (even though it requires modifying Dockerfile, I
think) would be useful, so I'll add it, thanks!

Yep, potential kernel/Docker bugs would let you escape the sandbox, but I
guess that's the risk I'm accepting.

------
taude
Has anyone done an Emacs compile to WASM, like someone did for Vim?
[https://rhysd.github.io/vim.wasm/](https://rhysd.github.io/vim.wasm/)

------
nathias
emacs in browser, so you can use your emacs in browser while using your
browser in emacs

