From 6bb8884f9633768176e61de0e94a54f27002dbff 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 v3: Update to version 0.13.0 Go back to using tic at install v4: Update to version 0.13.3 Depend on termcap instead of USES=terminfo https://reviews.freebsd.org/D19060 --- 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 | 37 ++++++++ x11/kitty/files/docs-on-patch-setup.py | 28 ++++++ x11/kitty/files/patch-kitty_child.c | 22 +++++ x11/kitty/files/patch-kitty_child.py | 11 +++ x11/kitty/pkg-descr | 20 +++++ x11/kitty/pkg-plist | 90 +++++++++++++++++++ 10 files changed, 287 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-plist diff --git a/x11/Makefile b/x11/Makefile index d8e3e2cad0b1..dbb9ded7edbe 100644 --- a/x11/Makefile +++ b/x11/Makefile @@ -129,6 +129,7 @@ SUBDIR += kf5-kwayland SUBDIR += kf5-kwindowsystem SUBDIR += kf5-plasma-framework + SUBDIR += kitty SUBDIR += konsole SUBDIR += leechcraft SUBDIR += lemonbar diff --git a/x11/kitty/Makefile b/x11/kitty/Makefile new file mode 100644 index 000000000000..7fcd2f8fb837 --- /dev/null +++ b/x11/kitty/Makefile @@ -0,0 +1,64 @@ +# Created by: Ben Widawsky +# $FreeBSD$ + +PORTNAME= kitty +PORTVERSION= 0.13.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 +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..ec2256da40fa --- /dev/null +++ b/x11/kitty/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1549088378 +SHA256 (kovidgoyal-kitty-v0.13.3_GH0.tar.gz) = b6f48404349ca99049de40e7bb55511de9ea04a6b1567068997d3fddb2c20f08 +SIZE (kovidgoyal-kitty-v0.13.3_GH0.tar.gz) = 3510975 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..ffc082bacb23 --- /dev/null +++ b/x11/kitty/files/docs-off-patch-setup.py @@ -0,0 +1,37 @@ +--- setup.py.orig 2018-12-06 05:19:25 UTC ++++ setup.py +@@ -600,16 +600,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) +- proc = subprocess.run(['tic', '-x', '-o' + odir, 'terminfo/kitty.terminfo'], check=True, stderr=subprocess.PIPE) +- regex = '^"terminfo/kitty.terminfo", line [0-9]+, col [0-9]+, terminal \'xterm-kitty\': older tic versions may treat the description field as an alias$' +- for error in proc.stderr.decode('utf-8').splitlines(): +- if not re.match(regex, error): +- print(error, file=sys.stderr) +- 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')) +@@ -634,8 +624,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) +@@ -822,8 +810,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..4df00e7e23b2 --- /dev/null +++ b/x11/kitty/files/docs-on-patch-setup.py @@ -0,0 +1,28 @@ +--- setup.py.orig 2018-12-06 05:25:15 UTC ++++ setup.py +@@ -600,16 +600,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) +- proc = subprocess.run(['tic', '-x', '-o' + odir, 'terminfo/kitty.terminfo'], check=True, stderr=subprocess.PIPE) +- regex = '^"terminfo/kitty.terminfo", line [0-9]+, col [0-9]+, terminal \'xterm-kitty\': older tic versions may treat the description field as an alias$' +- for error in proc.stderr.decode('utf-8').splitlines(): +- if not re.match(regex, error): +- print(error, file=sys.stderr) +- 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')) +@@ -823,7 +813,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..413335aef53f --- /dev/null +++ b/x11/kitty/files/patch-kitty_child.py @@ -0,0 +1,11 @@ +--- kitty/child.py.orig 2019-02-02 06:31:57 UTC ++++ kitty/child.py +@@ -154,7 +154,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-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.20.1