From 7b7b14cc5dfdd675f47540e903141ae1e98ad9a0 Mon Sep 17 00:00:00 2001 From: Ben Widawsky Date: Mon, 5 Nov 2018 18:07:06 -0800 Subject: [PATCH] x11/kitty: Add the terminal emulator kitty v2: Taken updates from ndowns https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=233010#c1 Fixed terminfo/termcap stuff --- x11/Makefile | 1 + x11/kitty/Makefile | 64 +++++++++++++ x11/kitty/distinfo | 3 + .../bell-off-patch-kitty_config__data.py | 11 +++ x11/kitty/files/docs-off-patch-setup.py | 33 +++++++ x11/kitty/files/docs-on-patch-setup.py | 24 +++++ x11/kitty/files/patch-kitty_child.c | 22 +++++ x11/kitty/files/patch-kitty_child.py | 19 ++++ x11/kitty/pkg-descr | 20 +++++ x11/kitty/pkg-message | 32 +++++++ x11/kitty/pkg-plist | 90 +++++++++++++++++++ 11 files changed, 319 insertions(+) create mode 100644 x11/kitty/Makefile create mode 100644 x11/kitty/distinfo create mode 100644 x11/kitty/files/bell-off-patch-kitty_config__data.py create mode 100644 x11/kitty/files/docs-off-patch-setup.py create mode 100644 x11/kitty/files/docs-on-patch-setup.py create mode 100644 x11/kitty/files/patch-kitty_child.c create mode 100644 x11/kitty/files/patch-kitty_child.py create mode 100644 x11/kitty/pkg-descr create mode 100644 x11/kitty/pkg-message create mode 100644 x11/kitty/pkg-plist diff --git a/x11/Makefile b/x11/Makefile index c76233e6f29d..7bc5eb16f6da 100644 --- a/x11/Makefile +++ b/x11/Makefile @@ -138,6 +138,7 @@ SUBDIR += kf5-kwindowsystem SUBDIR += kf5-plasma-framework SUBDIR += kgamma-kde4 + SUBDIR += kitty SUBDIR += konsole SUBDIR += konsole-kde4 SUBDIR += leechcraft diff --git a/x11/kitty/Makefile b/x11/kitty/Makefile new file mode 100644 index 000000000000..3cb594911eb0 --- /dev/null +++ b/x11/kitty/Makefile @@ -0,0 +1,64 @@ +# Created by: Ben Widawsky +# $FreeBSD$ + +PORTNAME= kitty +PORTVERSION= 0.12.3 +DISTVERSIONPREFIX= v +CATEGORIES= x11 + +MAINTAINER= bwidawsk@FreeBSD.org +COMMENT= Cross-platform, fast, feature full, GPU based terminal emulator + +LICENSE= GPLv3 +LICENSE_FILE= ${WRKSRC}/LICENSE + +LIB_DEPENDS= libdbus-1.so:devel/dbus \ + libfontconfig.so:x11-fonts/fontconfig \ + libfreetype.so:print/freetype2 \ + libglfw.so:graphics/glfw \ + libharfbuzz.so:print/harfbuzz \ + libpng.so:graphics/png \ + libxkbcommon.so:x11/libxkbcommon \ + libncursesw.so:devel/ncurses + +USES= gl gmake pkgconfig:build python:3.5+ shebangfix terminfo +USE_GL= gl +USE_XORG= x11 xft xrandr xinerama xcb xcursor +USE_GITHUB= yes +GH_ACCOUNT= kovidgoyal + +SHEBANG_FILES= kitty/launcher/kitty +BINARY_ALIAS= python3=${PYTHON_CMD} + +OPTIONS_DEFINE= ICAT DOCS BELL NLS +OPTIONS_DEFAULT= NLS + +ICAT_DESC= tool to display images in the terminal +ICAT_LIB_DEPENDS= libMagickCore-6.so:graphics/ImageMagick + +DOCS_BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sphinx>=1.7:textproc/py-sphinx@${PY_FLAVOR} +DOCS_EXTRA_PATCHES= ${PATCHDIR}/docs-on-patch-setup.py +DOCS_EXTRA_PATCHES_OFF= ${PATCHDIR}/docs-off-patch-setup.py + +BELL_DESC= disable audio bell by default (can be changed in kitty.conf) +BELL_EXTRA_PATCHES_OFF= ${PATCHDIR}/bell-off-patch-kitty_config__data.py + +NLS_USES= gettext + +post-patch-DOCS-on: + ${REINPLACE_CMD} -e 's|python3|${PYTHON_CMD}|g' ${WRKSRC}/docs/Makefile + ${REINPLACE_CMD} -e 's|sphinx-build|&-${PYTHON_VER}|' ${WRKSRC}/docs/Makefile + +do-build: + cd ${WRKSRC} && CC=clang ${PYTHON_CMD} setup.py --prefix ${STAGEDIR}${PREFIX} linux-package + +do-install: + @${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/kitty/kitty/fast_data_types.so \ + ${STAGEDIR}${PREFIX}/lib/kitty/kitty/glfw-x11.so \ + ${STAGEDIR}${PREFIX}/lib/kitty/kittens/diff/diff_speedup.so \ + ${STAGEDIR}${PREFIX}/lib/kitty/kittens/unicode_input/unicode_names.so \ + ${STAGEDIR}${PREFIX}/bin/kitty + ${INSTALL_DATA} ${WRKSRC}/terminfo/kitty.terminfo \ + ${STAGEDIR}${PREFIX}/share/misc/ + +.include diff --git a/x11/kitty/distinfo b/x11/kitty/distinfo new file mode 100644 index 000000000000..0b1e98624083 --- /dev/null +++ b/x11/kitty/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1541462009 +SHA256 (kovidgoyal-kitty-v0.12.3_GH0.tar.gz) = 8d8a1f9c48519e618ac53b614056cf4589edb02fd1d19aa26d5f478e7067887e +SIZE (kovidgoyal-kitty-v0.12.3_GH0.tar.gz) = 3485747 diff --git a/x11/kitty/files/bell-off-patch-kitty_config__data.py b/x11/kitty/files/bell-off-patch-kitty_config__data.py new file mode 100644 index 000000000000..2b03827aa206 --- /dev/null +++ b/x11/kitty/files/bell-off-patch-kitty_config__data.py @@ -0,0 +1,11 @@ +--- kitty/config_data.py.orig 2018-11-06 01:20:16 UTC ++++ kitty/config_data.py +@@ -426,7 +426,7 @@ If so, set this to no.''')) + + g('bell') # {{{ + +-o('enable_audio_bell', True, long_text=_(''' ++o('enable_audio_bell', False, long_text=_(''' + Enable/disable the audio bell. Useful in environments that require silence.''')) + + o('visual_bell_duration', 0.0, option_type=positive_float, long_text=_(''' diff --git a/x11/kitty/files/docs-off-patch-setup.py b/x11/kitty/files/docs-off-patch-setup.py new file mode 100644 index 000000000000..fb31cfcfbf03 --- /dev/null +++ b/x11/kitty/files/docs-off-patch-setup.py @@ -0,0 +1,33 @@ +--- setup.py.orig 2018-11-05 23:48:44 UTC ++++ setup.py +@@ -595,12 +595,6 @@ def package(args, for_bundle=False, sh_launcher=False) + if os.path.exists(libdir): + shutil.rmtree(libdir) + os.makedirs(os.path.join(libdir, 'logo')) +- for x in (libdir, os.path.join(ddir, 'share')): +- odir = os.path.join(x, 'terminfo') +- safe_makedirs(odir) +- subprocess.check_call(['tic', '-x', '-o' + odir, 'terminfo/kitty.terminfo']) +- if not glob.glob(os.path.join(odir, '*/xterm-kitty')): +- raise SystemExit('tic failed to output the compiled kitty terminfo file') + shutil.copy2('__main__.py', libdir) + shutil.copy2('logo/kitty.rgba', os.path.join(libdir, 'logo')) + shutil.copy2('logo/beam-cursor.png', os.path.join(libdir, 'logo')) +@@ -625,8 +619,6 @@ def package(args, for_bundle=False, sh_launcher=False) + safe_makedirs(launcher_dir) + build_linux_launcher(args, launcher_dir, for_bundle, sh_launcher, args.for_freeze) + if not is_macos: # {{{ linux desktop gunk +- copy_man_pages(ddir) +- copy_html_docs(ddir) + icdir = os.path.join(ddir, 'share', 'icons', 'hicolor', '256x256', 'apps') + safe_makedirs(icdir) + shutil.copy2('logo/kitty.png', icdir) +@@ -813,8 +805,6 @@ def main(): + ) + elif args.action == 'linux-package': + build(args, native_optimizations=False) +- if not os.path.exists(os.path.join(base, 'docs/_build/html')): +- run_tool(['make', 'docs']) + package(args) + elif args.action == 'osx-bundle': + build(args, native_optimizations=False) diff --git a/x11/kitty/files/docs-on-patch-setup.py b/x11/kitty/files/docs-on-patch-setup.py new file mode 100644 index 000000000000..b23f902c06b5 --- /dev/null +++ b/x11/kitty/files/docs-on-patch-setup.py @@ -0,0 +1,24 @@ +--- setup.py.orig 2018-11-05 23:49:34 UTC ++++ setup.py +@@ -595,12 +595,6 @@ def package(args, for_bundle=False, sh_launcher=False) + if os.path.exists(libdir): + shutil.rmtree(libdir) + os.makedirs(os.path.join(libdir, 'logo')) +- for x in (libdir, os.path.join(ddir, 'share')): +- odir = os.path.join(x, 'terminfo') +- safe_makedirs(odir) +- subprocess.check_call(['tic', '-x', '-o' + odir, 'terminfo/kitty.terminfo']) +- if not glob.glob(os.path.join(odir, '*/xterm-kitty')): +- raise SystemExit('tic failed to output the compiled kitty terminfo file') + shutil.copy2('__main__.py', libdir) + shutil.copy2('logo/kitty.rgba', os.path.join(libdir, 'logo')) + shutil.copy2('logo/beam-cursor.png', os.path.join(libdir, 'logo')) +@@ -814,7 +808,7 @@ def main(): + elif args.action == 'linux-package': + build(args, native_optimizations=False) + if not os.path.exists(os.path.join(base, 'docs/_build/html')): +- run_tool(['make', 'docs']) ++ run_tool(['gmake', 'docs']) + package(args) + elif args.action == 'osx-bundle': + build(args, native_optimizations=False) diff --git a/x11/kitty/files/patch-kitty_child.c b/x11/kitty/files/patch-kitty_child.c new file mode 100644 index 000000000000..0c696d0ec50f --- /dev/null +++ b/x11/kitty/files/patch-kitty_child.c @@ -0,0 +1,22 @@ +--- kitty/child.c.orig 2018-11-06 00:56:31 UTC ++++ kitty/child.c +@@ -12,6 +12,7 @@ + #include + #include + #include ++#include + + static inline char** + serialize_string_tuple(PyObject *src) { +@@ -87,10 +88,9 @@ spawn(PyObject *self UNUSED, PyObject *args) { + // Establish the controlling terminal (see man 7 credentials) + int tfd = open(name, O_RDWR); + if (tfd == -1) exit_on_err("Failed to open controlling terminal"); +-#ifdef TIOCSTTY ++ + // On BSD open() does not establish the controlling terminal + if (ioctl(tfd, TIOCSCTTY, 0) == -1) exit_on_err("Failed to set controlling terminal with TIOCSCTTY"); +-#endif + close(tfd); + + // Redirect stdin/stdout/stderr to the pty diff --git a/x11/kitty/files/patch-kitty_child.py b/x11/kitty/files/patch-kitty_child.py new file mode 100644 index 000000000000..86aeac02e177 --- /dev/null +++ b/x11/kitty/files/patch-kitty_child.py @@ -0,0 +1,19 @@ +--- kitty/child.py.orig 2018-11-06 00:29:36 UTC ++++ kitty/child.py +@@ -4,6 +4,7 @@ + + import fcntl + import os ++import pty + + import kitty.fast_data_types as fast_data_types + +@@ -102,7 +103,7 @@ class Child: + if self.forked: + return + self.forked = True +- master, slave = os.openpty() # Note that master and slave are in blocking mode ++ master, slave = pty.openpty() # Note that master and slave are in blocking mode + remove_cloexec(slave) + fast_data_types.set_iutf8(master, True) + stdin, self.stdin = self.stdin, None diff --git a/x11/kitty/pkg-descr b/x11/kitty/pkg-descr new file mode 100644 index 000000000000..f7ef5f288e7d --- /dev/null +++ b/x11/kitty/pkg-descr @@ -0,0 +1,20 @@ +Kitty is the fast, featureful, GPU based terminal emulator + : +kitty is designed for power keyboard users. To that end all its controls work +with the keyboard (although it fully supports mouse interactions as well). Its +configuration is a simple, human editable, single file for easy reproducibility +(I like to store configuration in source control). + +The code in kitty is designed to be simple, modular and hackable. It is written +in a mix of C (for performance sensitive parts) and Python (for easy hackability +of the UI). It does not depend on any large and complex UI toolkit, using only +OpenGL for rendering everything. + +Finally, kitty is designed from the ground up to support all modern terminal +features, such as unicode, true color, bold/italic fonts, text formatting, etc. +It even extends existing text formatting escape codes, to add support for +features not available elsewhere, such as colored and styled (curly) underlines. +One of the design goals of kitty is to be easily extensible so that new features +can be added in the future with relatively less effort. + +WWW: https://sw.kovidgoyal.net/kitty/ diff --git a/x11/kitty/pkg-message b/x11/kitty/pkg-message new file mode 100644 index 000000000000..0325ff3afc0d --- /dev/null +++ b/x11/kitty/pkg-message @@ -0,0 +1,32 @@ +============================================================================== + Some features may require read-only mounting /proc. + mount -t procfs proc /proc + + To make this permanent add the follow to /etc/fstab: + proc /proc procfs r 0 0 + +============================================================================== + + This package has installed the terminfo entries for xterm-kitty into your + terminfo.db. Unfortunately, this may not be picked up my ncurses. To workaround + this you must either add this to your termcap database or set the TERMCAP + variable + + Set in database (requires root): + tic -C -K -s -x ${LOCALBASE}/share/misc/kitty.terminfo >> \ + /usr/share/misc/termcap + cap_mkdb /usr/share/misc/termcap + + Alternatively, you may set the TERMCAP environment variable. + sh or bash: + export TERMCAP=xterm-kitty|KovIdTTY:am:hs:km:mi:ms:xn:co#80:it#8:li#24:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:K1=:K3=:K4=:K5=:LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:ae=\E(B:al=\E[L:as=\E(0:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=\r:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=\n:ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:kd=\EOB:ke=\E[?1l:kh=\EOH:kl=\EOD:kr=\EOC:ks=\E[?1h:ku=\EOA:le=^H:md=\E[1m:me=\E[0m:mh=\E[2m:mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:se=\E[27m:sf=\n:so=\E[7m:sr=\EM:st=\EH:ta=^I:te=\E[?1049l:ti=\E[?1049h:ts=\E]2;:ue=\E[24m:up=\E[A:us=\E[4m:vb=\E[?5h\E[?5l:ve=\E[?12l\E[?25h:vi=\E[?25l:vs=\E[?12;25h: + + csh or tcsh: + setenv TERMCAP xterm-kitty|KovIdTTY:am:hs:km:mi:ms:xn:co#80:it#8:li#24:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:K1=:K3=:K4=:K5=:LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:ae=\E(B:al=\E[L:as=\E(0:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=\r:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=\n:ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:ho=\E[H:im=\E[4h:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:kd=\EOB:ke=\E[?1l:kh=\EOH:kl=\EOD:kr=\EOC:ks=\E[?1h:ku=\EOA:le=^H:md=\E[1m:me=\E[0m:mh=\E[2m:mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:se=\E[27m:sf=\n:so=\E[7m:sr=\EM:st=\EH:ta=^I:te=\E[?1049l:ti=\E[?1049h:ts=\E]2;:ue=\E[24m:up=\E[A:us=\E[4m:vb=\E[?5h\E[?5l:ve=\E[?12l\E[?25h:vi=\E[?25l:vs=\E[?12;25h: + + + To remove the termcap entry later, if desired remove relevant lines from + /usr/share/misc/termcap and run: + cap_mkdb /usr/share/misc/termcap + +============================================================================== diff --git a/x11/kitty/pkg-plist b/x11/kitty/pkg-plist new file mode 100644 index 000000000000..ef90ae51ae54 --- /dev/null +++ b/x11/kitty/pkg-plist @@ -0,0 +1,90 @@ +bin/kitty +lib/kitty/__main__.py +lib/kitty/kittens/__init__.py +lib/kitty/kittens/ask/__init__.py +lib/kitty/kittens/ask/main.py +lib/kitty/kittens/clipboard/__init__.py +lib/kitty/kittens/clipboard/main.py +lib/kitty/kittens/diff/__init__.py +lib/kitty/kittens/diff/collect.py +lib/kitty/kittens/diff/config.py +lib/kitty/kittens/diff/config_data.py +lib/kitty/kittens/diff/diff_speedup.so +lib/kitty/kittens/diff/highlight.py +lib/kitty/kittens/diff/main.py +lib/kitty/kittens/diff/patch.py +lib/kitty/kittens/diff/render.py +lib/kitty/kittens/diff/search.py +lib/kitty/kittens/hints/__init__.py +lib/kitty/kittens/hints/main.py +lib/kitty/kittens/hints/url_regex.py +lib/kitty/kittens/icat/__init__.py +lib/kitty/kittens/icat/main.py +lib/kitty/kittens/panel/__init__.py +lib/kitty/kittens/panel/main.py +lib/kitty/kittens/resize_window/__init__.py +lib/kitty/kittens/resize_window/main.py +lib/kitty/kittens/runner.py +lib/kitty/kittens/show_error/__init__.py +lib/kitty/kittens/show_error/main.py +lib/kitty/kittens/ssh/__init__.py +lib/kitty/kittens/ssh/main.py +lib/kitty/kittens/tui/__init__.py +lib/kitty/kittens/tui/handler.py +lib/kitty/kittens/tui/images.py +lib/kitty/kittens/tui/line_edit.py +lib/kitty/kittens/tui/loop.py +lib/kitty/kittens/tui/operations.py +lib/kitty/kittens/unicode_input/__init__.py +lib/kitty/kittens/unicode_input/main.py +lib/kitty/kittens/unicode_input/unicode_names.so +lib/kitty/kitty/__init__.py +lib/kitty/kitty/blit_fragment.glsl +lib/kitty/kitty/blit_vertex.glsl +lib/kitty/kitty/border_fragment.glsl +lib/kitty/kitty/border_vertex.glsl +lib/kitty/kitty/borders.py +lib/kitty/kitty/boss.py +lib/kitty/kitty/cell_fragment.glsl +lib/kitty/kitty/cell_vertex.glsl +lib/kitty/kitty/child.py +lib/kitty/kitty/cli.py +lib/kitty/kitty/client.py +lib/kitty/kitty/cmds.py +lib/kitty/kitty/complete.py +lib/kitty/kitty/conf/__init__.py +lib/kitty/kitty/conf/definition.py +lib/kitty/kitty/conf/utils.py +lib/kitty/kitty/config.py +lib/kitty/kitty/config_data.py +lib/kitty/kitty/constants.py +lib/kitty/kitty/fast_data_types.so +lib/kitty/kitty/fonts/__init__.py +lib/kitty/kitty/fonts/box_drawing.py +lib/kitty/kitty/fonts/core_text.py +lib/kitty/kitty/fonts/fontconfig.py +lib/kitty/kitty/fonts/list.py +lib/kitty/kitty/fonts/render.py +lib/kitty/kitty/glfw-x11.so +lib/kitty/kitty/graphics_fragment.glsl +lib/kitty/kitty/graphics_vertex.glsl +lib/kitty/kitty/key_encoding.py +lib/kitty/kitty/keys.py +lib/kitty/kitty/launcher/kitty +lib/kitty/kitty/layout.py +lib/kitty/kitty/main.py +lib/kitty/kitty/remote_control.py +lib/kitty/kitty/rgb.py +lib/kitty/kitty/session.py +lib/kitty/kitty/shell.py +lib/kitty/kitty/tab_bar.py +lib/kitty/kitty/tabs.py +lib/kitty/kitty/terminfo.py +lib/kitty/kitty/utils.py +lib/kitty/kitty/window.py +lib/kitty/logo/beam-cursor.png +lib/kitty/logo/beam-cursor@2x.png +lib/kitty/logo/kitty.rgba +share/applications/kitty.desktop +share/icons/hicolor/256x256/apps/kitty.png +share/misc/kitty.terminfo -- 2.19.1