Show HN: Kitty – A modern, hackable, featureful, OpenGL based terminal emulator
github.com
github.com
I've seen just about every terminal implement its own version of tiling, and I just have to ask: Why? Doesn't this just increase the line count and surface area without offering anything that doesn't already work just fine as a tool maintained by someone else?
Configuration is done through ~/.Xdefaults.
That's just my opinion but it's probably mirrored.
1) Multiplexers are a hack -- there are various problems with them, such as passing control codes through safely, keyboard shortcuts, performance, etc
2) Tiling WMs -- these can work (in fact I use a tiling WM myself) however, the nice thing about having tiling (and tab management) built into the terminal is that you can manage terminal windows and other windows differently on the same screen. For example, on small screens I like to have most GUI windows such s browser, etc. maximized, but I like to have terminal windows side-by-side, this is hard to manage if you want to have them on the same screen. With tiling built into the terminal, managing terminal windows is in a separate "namespace" from all other types of windows
I need to interact with my computer for it to do stuff, I think you somehow exagerated here.
Exluding that incoherent requirement, I'd have two choices:
1. Run the command in a terminal and hit super+f 2. Run the command in a terminal, super+right, super+w (I can switch back and for to <-> from the terminal).
Bonus point of using i3 is that I can optionally have any external program become part of my grid or add/remove exiting terminals to/from different mixed layouts (or workspaces). With multiplexers you're screwed and can't do that.
Note: I do use tmux on all my sessions, but it's mostly for "tab" support, or attaching/detaching (even from different workstations).
Then, there's a third option in addition to the two you mentioned: spend two minutes (if that) doing the one-time configuration of having the wm reserve a tag for your browser (and perhaps other GUI apps that you anticipate frequently needing/wanting to run full-screen). In awesome, you'd do that by adding an entry to your global rules table like this one (in rc.lua):
{ rule = {
instance = "firefox"
},
properties = {
screen = "HDMI1",
tag = "3"
}
}
Which will configure awesome so that any time a new client becomes managed by the wm, it will ensure that its window opens on the XRandR screen "HDMI1", and specifically on that screen's tag "3". ("3" is a string here because, while tags are by default "integers", "1" - "9", they can be named by any string afaik, and many people will rename them things like "www", "irc", "term", etc.).You can also use awesome-client(1) to send Lua code to a running awesome instance for execution within the wm's context. This could be tossed into a shell script (and parameterized as you see fit) for convenience, if desired:
$ awesome-client <<EOF
require("awful").spawn("firefox", {
screen = mouse.screen,
tag = "3",
switchtotag = true
})
EOF
The same awful.spawn() call you'd send to awesome-client can also be bound to a keystroke or a menu entry for quick access.As for me, I tend to only use tmux under X11 if I'm worried about losing an ssh connection and therefore (without tmux, of course) the ssh session. However, I have DEC vt520 glass TTY that connects via RS-232 serial cable to a couple of servers (one OpenBSD, the other FreeBSD) and, while the terminal is pretty damn featureful, it has limited scrollback and awkward copy/paste functionality. So, on that terminal I use tmux quite a bit (although it seems to be rather chatty and during periods of heavy pty traffic can sometimes wind up spitting a garbage glyph on the screen here and there, but I think I may just need to increase the baud rate (despite already being set to ~56 Kbaud! cha-tty!)). The vt520 also only supports 2 sessions at once directly (and I can't even figure out how to get the OS to recognize the second one -_-), so tmux's multiplexing capability is also greatly appreciated when I'm basking in the amber glow.
Plz plz plz make a windows build. I use cygwin for so much, and a more performant terminal option would be amazing.
As for windows support it should be relatively easy to get it running unser WSL (windows subsytem for linux) Even for a more general approach -- replacing mitty -- it should be possible, with more work.
[1]: http://cmder.net/ [2]: https://conemu.github.io/ [3]: https://mridgers.github.io/clink/
https://msdn.microsoft.com/en-us/commandline/wsl/install_gui...
(Check scrollbar on the right side..) So I go back to whatever...
There is a caveat, though. While you can update the Linux packages through apt, bug fixes to actual translation system are only pushed through insider builds currently. That means in order to get the most functional and stable WSL, you have to run insider builds.
In the end, the only thing that does everything I want reliably is embedding a special build of mintty into ConEmu/Cmder. https://github.com/mintty/wsltty
Here is the ConEmu task that I use: %LOCALAPPDATA%\wsltty\bin\mintty.exe --wsl -o Locale=C -o Charset=UTF-8 /bin/wslbridge -t /bin/bash -l
It does have the caveat that you can't use many ConEmu's keyboard shortcuts, but there is a workaround that allows you to pass WinKey+Key shortcuts through, and I'm learning to live with that.
That just means it's going to change your files without asking and then move them to random places.
(I'm not super excited about compiling my own stuff. It's so very, very nice to get automatic updates.)
Buuuut, I just found mobaxterm, which has a ridiculous amount of features. And I'm pretty sure git bash for windows has ssh, and cmder, and now the Linux subsystem - so there are a lot more options on the table these days. Kitty's days might be numbered.
Checking out their download page[0] does reveal some limits on the home edition - 12 sessions, 2 ssh tunnels (I wish I knew if those were "simultaneous" or "saved"), a couple of other things - but I haven't run up against these limits yet. I do think that if I was doing something that required more than twelve simultaneous ssh sessions, I would have already switched over to my Linux installation. SSHing from Windows is something I generally do for small things.
I don't recall why exactly, I think there was some config option that was missing. More importantly though, tmux basically made the advantages of kitty obsolete.
It's just so hard when my i3 bindings are right there, already learned, and they give me all of the screen management I need already - so tmux is only offering me the long-running, detachable session benefits. But even that would be good to learn...
tbh I'm going to be downloading and checking out both kitty and alacritty when I have time; if alacritty turns out to be worth it, it will be the kick in the tail I need to start in on tmux.
(Maybe this mobile graphics card that bluescreens if used at vanilla clock speeds will finally be useful for something!)
https://blogs.msdn.microsoft.com/commandline/2016/09/22/24-b...
I have a Linux desktop and MacBook laptop. I would like to run the same Terminal on both.
brew install glew # install glew
git clone https://github.com/glfw/glfw.git # install glfw
cd glfw
cmake -DBUILD_SHARED_LIBS=ON .
make install
cd ..
git clone https://github.com/kovidgoyal/kitty # install kitty
cd kitty
# Then delete ", '-l' + lib" on line 78 of setup.py... and run:
python setup.py install
But I get this error: ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)In the meantime, if you, or anyone else wants to help with porting to OS X, please open an issue on github and I will follow up there.
ld: library not found for -lPython.framework/Versions/3.5/Python
The "lib" variable is set to "Python.framework/Versions/3.5/Python".[1]: https://admin.fedoraproject.org/pkgdb/package/rpms/putty/
Not really, if your package manager allows hierarchies then something like `network.kitty` and `x11.kitty` could be used. If they have to use the same namespace then names like `kitty-ssh` and `kitty-term` could be used.
If you're installing binaries into a single location (e.g. /usr/bin) then they can either be left to conflict, or renamed by the packager (e.g. Debian renames task-spooler's `ts` to `tsp`, to avoid conflicting with moreutils' `ts` timestamp command). If packages are installed to independent locations (e.g. as in Nix and Guix) then there's no need to rename anything, although it might be nice to provide symlinks with unique names so that both can be used from the same $PATH.
---
Actually, scrub that:
> KiTTY is only designed for the Microsoft® Windows® platform
There's no name clash on any distro. Both kitties support different OS families.
RuntimeError: OpenGL is missing the required ARB_copy_image extension
ARB_copy_image is OpenGL 4.3 extension. Is it supported by NVIDA driver at Linux? Or it's hardware problem? (I have GF106M [GeForce GTX 460M] (rev a1) installed ).Sorry, pal.
http://www.geforce.com/hardware/desktop-gpus/geforce-gtx-460...
Edit: I was wrong! My bad.
I suspect a covert agreement between hardware vendors and vendors of terminal emulators.
In your opinion, what's a reasonable timeline for hardware incompatibility with a terminal emulator? (That's an odd sentence to need to type...)
https://developer.nvidia.com/opengl-driver
As far as I can tell, the GTX 460 supports up to OpenGL 4.4.
> glxinfo |grep ARB_copy_image
GL_ARB_copy_buffer, GL_ARB_copy_image, GL_ARB_cull_distance,
GL_ARB_conservative_depth, GL_ARB_copy_buffer, GL_ARB_copy_image,
> rpm -qa | grep -i glew
libGLEW-1.13.0-2.fc24.x86_64
glew-devel-1.13.0-2.fc24.x86_64 ValueError: GLSL 35633 compilation failed:
0(29) : error C1020: invalid operands to "/"
0(29) : error C1020: invalid operands to "/"
0(29) : error C1020: invalid operands to "/"
0(33) : error C1020: invalid operands to "+"
0(34) : error C1020: invalid operands to "+"Wow. It looks good. It fast. Very neat. Mouse works properly.
The only problems so far:
* ctrl-arrow and ctrl-shift-arrow combinations are not working in bash and mc;
* ctrl-ins/shift-ins, middleclick/shift-middleclick for copy/paste not working too (but ctrl-shift-c/ctrl-shift-v works).
Ctrl-pgup/pgdown jumps to top/bottom of the current screen in mcedit without moving it.
Shift-arrow selects text as cursor moves, ctrl-shift-arrow jumps over word and selects it in mceditor in mc.
Shift-del (cut), ctrl-ins (copy), and shift-ins (paste) are parts of IBM CUA guidelines since 1988. Only shift-ins is necessary to implement, because mouse selection is automatic (no need for ctrl-ins) and shift-del (cut) has no sense. Unlike ctrl-shift-v, shift-ins is pasting mouse (selection) buffer. I.e. I can select a text with mouse in Firefox and then immediately insert it with shift-ins (or middle mouse button or shift-middle if mouse is overriden by an application) in terminal.
Middle mouse button pastes mouse buffer. Shift-mouse click works when terminal program overrides mouse behavior. mc and mcedit are examples.
All these combinations are working properly in gnome-terminal and mate-terminal. Some of them are working in rxvt too.
Ctrl-arrow and ctrl-shift-arrow are huge performance boosts.