Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package asciinema for openSUSE:Factory checked in at 2023-10-31 20:26:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/asciinema (Old) and /work/SRC/openSUSE:Factory/.asciinema.new.17445 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "asciinema" Tue Oct 31 20:26:23 2023 rev:11 rq:1121415 version:2.4.0 Changes: -------- --- /work/SRC/openSUSE:Factory/asciinema/asciinema.changes 2023-08-30 10:23:33.482732907 +0200 +++ /work/SRC/openSUSE:Factory/.asciinema.new.17445/asciinema.changes 2023-10-31 20:26:44.352230776 +0100 @@ -1,0 +2,14 @@ +Tue Oct 24 19:16:22 UTC 2023 - Andreas Stieger <andreas.stie...@gmx.de> + +- update to 2.4.0: + * When recording without file arg we now ask whether to save, + upload or discard the recording + * Added capture of terminal resize events + * Fixed blocking write error when PTY master is not ready + * Fixed "broken pipe" errors when piping certain commands during + recording + * Fixed crash during playback of cast files with trailing blank + line +- Requires Python >= 3.7 + +------------------------------------------------------------------- Old: ---- asciinema-2.3.0.tar.gz New: ---- asciinema-2.4.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ asciinema.spec ++++++ --- /var/tmp/diff_new_pack.2Mx9Jj/_old 2023-10-31 20:26:44.960253109 +0100 +++ /var/tmp/diff_new_pack.2Mx9Jj/_new 2023-10-31 20:26:44.960253109 +0100 @@ -18,25 +18,27 @@ %global pythons python3 Name: asciinema -Version: 2.3.0 +Version: 2.4.0 Release: 0 Summary: Terminal session recorder License: GPL-3.0-or-later Group: Productivity/Networking/Other URL: https://asciinema.org Source: https://github.com/asciinema/asciinema/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz +BuildRequires: %{python_module pip} +BuildRequires: %{python_module pytest} +BuildRequires: %{python_module setuptools} +BuildRequires: %{python_module wheel} BuildRequires: fdupes BuildRequires: python-rpm-macros -BuildRequires: python3-pip -BuildRequires: python3-setuptools -BuildRequires: python3-wheel +BuildRequires: python3-base >= 3.7 BuildArch: noarch %description Record of terminal sessions and sharing them on the web. %prep -%setup -q +%autosetup -p1 %build %pyproject_wheel @@ -49,6 +51,9 @@ rm -R %{buildroot}%{_datadir}/doc/%{name} +%check +%pytest -v + %files %license LICENSE %doc CHANGELOG.md CODE_OF_CONDUCT.md CONTRIBUTING.md README.md ++++++ asciinema-2.3.0.tar.gz -> asciinema-2.4.0.tar.gz ++++++ Binary files old/asciinema-2.3.0/.github/sponsor-logos/dashcam/logo-on-dark.png and new/asciinema-2.4.0/.github/sponsor-logos/dashcam/logo-on-dark.png differ Binary files old/asciinema-2.3.0/.github/sponsor-logos/dashcam/logo-on-light.png and new/asciinema-2.4.0/.github/sponsor-logos/dashcam/logo-on-light.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/.github/workflows/asciinema.yml new/asciinema-2.4.0/.github/workflows/asciinema.yml --- old/asciinema-2.3.0/.github/workflows/asciinema.yml 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/.github/workflows/asciinema.yml 2023-10-23 16:06:50.000000000 +0200 @@ -10,7 +10,7 @@ runs-on: ubuntu-latest steps: - name: checkout asciinema - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: setup Python uses: actions/setup-python@v4 with: @@ -42,7 +42,7 @@ TERM: dumb steps: - name: checkout Asciinema - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: setup Python uses: actions/setup-python@v4 with: @@ -58,7 +58,6 @@ distros: - alpine - arch - - centos - debian - fedora - ubuntu @@ -66,15 +65,15 @@ steps: - name: Set up Docker buildx id: buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Authenticate to GHCR - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ghcr.io username: "${{ github.actor }}" password: "${{ secrets.GITHUB_TOKEN }}" - name: "Build ${{ matrix.distros }} image" - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: file: "tests/distros/Dockerfile.${{ matrix.distros }}" tags: | @@ -88,7 +87,6 @@ distros: - alpine - arch - - centos - debian - fedora - ubuntu @@ -102,7 +100,7 @@ options: "--interactive --tty --user=1001:121" steps: - name: checkout Asciinema - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: run integration tests env: TERM: dumb diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/.github/workflows/pre-commit.yml new/asciinema-2.4.0/.github/workflows/pre-commit.yml --- old/asciinema-2.3.0/.github/workflows/pre-commit.yml 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/.github/workflows/pre-commit.yml 2023-10-23 16:06:50.000000000 +0200 @@ -7,7 +7,7 @@ pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: "3.10" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/CHANGELOG.md new/asciinema-2.4.0/CHANGELOG.md --- old/asciinema-2.3.0/CHANGELOG.md 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/CHANGELOG.md 2023-10-23 16:06:50.000000000 +0200 @@ -1,5 +1,13 @@ # asciinema changelog +## 2.4.0 (2023-10-23) + +* When recording without file arg we now ask whether to save, upload or discard the recording (#576) +* Added capture of terminal resize events (#565) +* Fixed blocking write error when PTY master is not ready (#569) (thanks @Low-power!) +* Fixed "broken pipe" errors when piping certain commands during recording (#369) (thanks @Low-power!) +* Fixed crash during playback of cast files with trailing blank line (#577) + ## 2.3.0 (2023-07-05) * Added official support for Python 3.11 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/CODE_OF_CONDUCT.md new/asciinema-2.4.0/CODE_OF_CONDUCT.md --- old/asciinema-2.3.0/CODE_OF_CONDUCT.md 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/CODE_OF_CONDUCT.md 2023-10-23 16:06:50.000000000 +0200 @@ -55,7 +55,7 @@ ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at supp...@asciinema.org. All +reported by contacting the project team at ad...@asciinema.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/CONTRIBUTING.md new/asciinema-2.4.0/CONTRIBUTING.md --- old/asciinema-2.3.0/CONTRIBUTING.md 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/CONTRIBUTING.md 2023-10-23 16:06:50.000000000 +0200 @@ -42,21 +42,14 @@ can simply open a separate issue for a discussion or join #asciinema IRC channel on Libera.Chat. -## Asking for help - -GitHub issue tracker is not a support forum. - -If you need help then either join #asciinema IRC channel on Libera.Chat or -drop us an email at <supp...@asciinema.org>. - ## Reporting security issues If you found a security issue in asciinema please contact us at -supp...@asciinema.org. For the benefit of all asciinema users please **do +ad...@asciinema.org. For the benefit of all asciinema users please **do not** publish details of the vulnerability in a GitHub issue. The PGP key below (1eb33a8760dec34b) can be used when sending encrypted email -to or verifying responses from supp...@asciinema.org. +to or verifying responses from ad...@asciinema.org. ```Public Key -----BEGIN PGP PUBLIC KEY BLOCK----- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/Makefile new/asciinema-2.4.0/Makefile --- old/asciinema-2.3.0/Makefile 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/Makefile 2023-10-23 16:06:50.000000000 +0200 @@ -55,11 +55,13 @@ .PHONY: push push: .pip build - python3 -m twine upload dist/* + . $(VIRTUAL_ENV)/bin/activate \ + && python3 -m twine upload dist/* .PHONY: push.test push.test: .pip build - python3 -m twine upload --repository testpypi dist/* + . $(VIRTUAL_ENV)/bin/activate \ + && python3 -m twine upload --repository testpypi dist/* .PHONY: clean diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/README.md new/asciinema-2.4.0/README.md --- old/asciinema-2.3.0/README.md 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/README.md 2023-10-23 16:06:50.000000000 +0200 @@ -9,6 +9,14 @@ [![demo](https://asciinema.org/a/335480.svg)](https://asciinema.org/a/335480?autoplay=1) +asciinema _[as-kee-nuh-muh]_ is a free and open source solution for recording +terminal sessions and sharing them on the web. + +Shout-out to our Platinum [sponsors](https://github.com/sponsors/ku1ik), whose +financial support helps keep the project alive: + +[<img src="./.github/sponsor-logos/dashcam/logo-on-light.png" width="200" />](https://dashcam.io?utm_source=asciinemagithub) + ## Quick intro asciinema lets you easily record terminal sessions and replay @@ -70,7 +78,8 @@ sent anywhere without your consent. These are the basics, but there's much more you can do. The following sections -cover installation, usage and hosting of the recordings in more detail. +cover installation, usage and hosting of the recordings in more detail. Also, +checkout [agg](https://github.com/asciinema/agg) if you're interested in GIF generation. ## Installation @@ -502,6 +511,13 @@ > asciinema versions prior to 1.1 used `$HOME/.asciinema`. If you have it > there you should `mv $HOME/.asciinema $HOME/.config/asciinema`. +## Sponsors + +asciinema is sponsored by: + +- [**Dashcam**](https://dashcam.io?utm_source=asciinemagithub) +- [Brightbox](https://www.brightbox.com/) + ## Consulting I offer consulting services for asciinema project. See https://asciinema.org/consulting for more information. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/asciinema/__init__.py new/asciinema-2.4.0/asciinema/__init__.py --- old/asciinema-2.3.0/asciinema/__init__.py 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/asciinema/__init__.py 2023-10-23 16:06:50.000000000 +0200 @@ -1,10 +1,10 @@ import sys __author__ = "Marcin Kulik" -__version__ = "2.3.0" +__version__ = "2.4.0" -if sys.version_info < (3, 6): - raise ImportError("Python < 3.6 is unsupported.") +if sys.version_info < (3, 7): + raise ImportError("Python < 3.7 is unsupported.") # pylint: disable=wrong-import-position from typing import Any, Optional diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/asciinema/asciicast/raw.py new/asciinema-2.4.0/asciinema/asciicast/raw.py --- old/asciinema-2.3.0/asciinema/asciicast/raw.py 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/asciinema/asciicast/raw.py 2023-10-23 16:06:50.000000000 +0200 @@ -1,7 +1,7 @@ import os import sys from os import path -from typing import Any, Callable, Optional +from typing import Any, Callable, Optional, Tuple from ..file_writer import file_writer @@ -44,13 +44,16 @@ def write_stdout(self, _ts: float, data: Any) -> None: self._write(data) - # pylint: disable=no-self-use def write_stdin(self, ts: float, data: Any) -> None: pass def write_marker(self, ts: float) -> None: pass + def write_resize(self, ts: float, size: Tuple[int, int]) -> None: + cols, rows = size + self._write(f"\x1b[8;{rows};{cols}t".encode("utf-8")) + # pylint: disable=consider-using-with def _open_file(self) -> None: if self.path == "-": diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/asciinema/asciicast/v2.py new/asciinema-2.4.0/asciinema/asciicast/v2.py --- old/asciinema-2.3.0/asciinema/asciicast/v2.py 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/asciinema/asciicast/v2.py 2023-10-23 16:06:50.000000000 +0200 @@ -12,6 +12,7 @@ List, Optional, TextIO, + Tuple, Union, ) @@ -36,9 +37,13 @@ ) -> Generator[List[Any], None, None]: if type_ is None: for line in self.__file: + if line == "\n": + break yield json.loads(line) else: for line in self.__file: + if line == "\n": + break event = json.loads(line) if event[1] == type_: yield event @@ -148,6 +153,10 @@ def write_marker(self, ts: float) -> None: self.__write_event(ts, "m", "") + def write_resize(self, ts: float, size: Tuple[int, int]) -> None: + cols, rows = size + self.__write_event(ts, "r", f"{cols}x{rows}") + # pylint: disable=consider-using-with def _open_file(self) -> None: if self.path == "-": diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/asciinema/commands/command.py new/asciinema-2.4.0/asciinema/commands/command.py --- old/asciinema-2.3.0/asciinema/commands/command.py 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/asciinema/commands/command.py 2023-10-23 16:06:50.000000000 +0200 @@ -17,6 +17,7 @@ end: str = "\r\n", color: Optional[int] = None, force: bool = False, + flush: bool = False, ) -> None: if not self.quiet or force: if color is not None and os.isatty(sys.stderr.fileno()): @@ -24,6 +25,9 @@ print(text, file=sys.stderr, end=end) + if flush: + sys.stderr.flush() + def print_info(self, text: str) -> None: self.print(f"asciinema: {text}", color=2) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/asciinema/commands/record.py new/asciinema-2.4.0/asciinema/commands/record.py --- old/asciinema-2.3.0/asciinema/commands/record.py 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/asciinema/commands/record.py 2023-10-23 16:06:50.000000000 +0200 @@ -41,7 +41,7 @@ # pylint: disable=too-many-return-statements # pylint: disable=too-many-statements def execute(self) -> int: - upload = False + interactive = False append = self.append if self.filename == "": @@ -51,7 +51,7 @@ ) return 1 self.filename = _tmp_path() - upload = True + interactive = True if self.filename == "-": if sys.stdout.isatty(): @@ -150,18 +150,33 @@ self.print_info("recording finished") - if upload: + if interactive: if not self.assume_yes: - self.print_info( - f"press <enter> to upload to {self.api.hostname()}" - ", <ctrl-c> to save locally" - ) - try: - sys.stdin.readline() - except KeyboardInterrupt: - self.print("\r", end="") - self.print_info(f"asciicast saved to {self.filename}") - return 0 + while True: + self.print( + f"(\x1b[1ms\x1b[0m)ave locally, (\x1b[1mu\x1b[0m)pload to {self.api.hostname()}, (\x1b[1md\x1b[0m)iscard\r\n[s,u,d]? ", + end="", + force=True, + flush=True, + ) + + try: + answer = sys.stdin.readline().strip().lower() + except KeyboardInterrupt: + self.print("") + answer = "s" + + if answer == "s" or answer == "save": + self.print_info(f"asciicast saved to {self.filename}") + return 0 + + elif answer == "u" or answer == "upload": + break + + elif answer == "d" or answer == "discard": + os.remove(self.filename) + self.print_info(f"asciicast discarded") + return 0 try: result, warn = self.api.upload_asciicast(self.filename) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/asciinema/pty_.py new/asciinema-2.4.0/asciinema/pty_.py --- old/asciinema-2.3.0/asciinema/pty_.py 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/asciinema/pty_.py 2023-10-23 16:06:50.000000000 +0200 @@ -41,8 +41,14 @@ add_marker_key = key_bindings.get("add_marker") input_data = bytes() - def set_pty_size() -> None: - cols, rows = get_tty_size() + def handle_resize() -> None: + size = get_tty_size() + set_pty_size(size) + assert start_time is not None + writer.write_resize(time.perf_counter() - start_time, size) + + def set_pty_size(size: Tuple[int, int]) -> None: + cols, rows = size buf = array.array("h", [rows, cols, 0, 0]) fcntl.ioctl(pty_fd, termios.TIOCSWINSZ, buf) @@ -149,22 +155,26 @@ if sig in EXIT_SIGNALS: crfds.remove(signal_fd) if sig == signal.SIGWINCH: - set_pty_size() + handle_resize() if pty_fd in wfds: - n = os.write(pty_fd, input_data) - input_data = input_data[n:] + try: + n = os.write(pty_fd, input_data) + input_data = input_data[n:] + except BlockingIOError: + pass pid, pty_fd = pty.fork() if pid == pty.CHILD: + signal.signal(signal.SIGPIPE, signal.SIG_DFL) os.execvpe(command[0], command, env) flags = fcntl.fcntl(pty_fd, fcntl.F_GETFL, 0) | os.O_NONBLOCK fcntl.fcntl(pty_fd, fcntl.F_SETFL, flags) start_time = time.perf_counter() - set_pty_size() + set_pty_size(get_tty_size()) with SignalFD(EXIT_SIGNALS + [signal.SIGWINCH]) as sig_fd: with raw(tty_stdin_fd): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/asciinema/recorder.py new/asciinema-2.4.0/asciinema/recorder.py --- old/asciinema-2.3.0/asciinema/recorder.py 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/asciinema/recorder.py 2023-10-23 16:06:50.000000000 +0200 @@ -134,6 +134,9 @@ def write_marker(self, ts: float) -> None: self.enqueue([ts, "m", None]) + def write_resize(self, ts: float, size: Tuple[int, int]) -> None: + self.enqueue([ts, "r", size]) + def run(self) -> None: try: with self.writer as w: @@ -148,6 +151,8 @@ w.write_stdin(self.time_offset + ts, data) elif etype == "m": w.write_marker(self.time_offset + ts) + elif etype == "r": + w.write_resize(self.time_offset + ts, data) except IOError: for event in iter(self.queue.get, None): pass diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/doc/asciicast-v2.md new/asciinema-2.4.0/doc/asciicast-v2.md --- old/asciinema-2.3.0/doc/asciicast-v2.md 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/doc/asciicast-v2.md 2023-10-23 16:06:50.000000000 +0200 @@ -15,6 +15,7 @@ [1.001376, "o", "That was ok\rThis is better."] [1.500000, "m", ""] [2.143733, "o", "Now... "] +[4.050000, "r", "80x24"] [6.541828, "o", "Bye!"] ``` @@ -109,73 +110,82 @@ Each element of the event stream is a 3-tuple encoded as JSON array: - [time, event-type, event-data] + [time, code, data] Where: -* `time` (float) - indicates when this event happened, represented as the number +* `time` (float) - indicates when the event happened, represented as the number of seconds since the beginning of the recording session, -* `event-type` (string) - one of: `"o"`, `"i"`, `"m"` -* `event-data` (any) - event specific data, described separately for each event - type. +* `code` (string) - specifies type of event, one of: `"o"`, `"i"`, `"m"`, `"r"` +* `data` (any) - event specific data, described separately for each event + code. For example, let's look at the following line: [1.001376, "o", "Hello world"] -It represents the event which: +It represents: -* happened 1.001376 sec after the start of the recording session, -* is of type `"o"` (output, write to a terminal, see below), -* has data `"Hello world"`. +* output (code `o`), +* of text `Hello world`, +* which happened `1.001376` sec after the start of the recording session. -### Supported event types +### Supported event codes -This section describes the event types supported in asciicast v2 format. +This section describes the event codes supported in asciicast v2 format. -The list is open to extension, and new event types may be added in both the +The list is open to extension, and new event codes may be added in both the current and future versions of the format. For example, we may add new event -type for text overlay (subtitles display). +code for text overlay (subtitles display). A tool which interprets the event stream (web/cli player, post-processor) should -ignore (or pass through) event types it doesn't understand or doesn't care +ignore (or pass through) event codes it doesn't understand or doesn't care about. -#### "o" - output, data written to the terminal +#### "o" - output, data written to a terminal -Event of type `"o"` represents printing new data to terminal's stdout. +Event of code `"o"` represents printing new data to a terminal. -`event-data` is a string containing the data that was printed. It must be valid, -UTF-8 encoded JSON string as described in [JSON RFC section +`data` is a string containing the data that was printed. It must be valid, UTF-8 +encoded JSON string as described in [JSON RFC section 2.5](http://www.ietf.org/rfc/rfc4627.txt), with any non-printable Unicode codepoints encoded as `\uXXXX`. -#### "i" - input, data read from the terminal +#### "i" - input, data read from a terminal -Event of type `"i"` represents character typed in by the user, or more +Event of code `"i"` represents character typed in by the user, or more specifically, raw data sent from a terminal emulator to stdin of the recorded program (usually shell). -`event-data` is a string containing captured ASCII character representing a key, -or a control character like `"\r"` (enter), `"\u0001"` (ctrl-a), `"\u0003"` -(ctrl-c), etc. Like with `"o"` event, it's UTF-8 encoded JSON string, with any +`data` is a string containing captured ASCII character representing a key, or a +control character like `"\r"` (enter), `"\u0001"` (ctrl-a), `"\u0003"` (ctrl-c), +etc. Like with `"o"` event, it's UTF-8 encoded JSON string, with any non-printable Unicode codepoints encoded as `\uXXXX`. > Official asciinema recorder doesn't capture keyboard input by default. All > implementations of asciicast-compatible terminal recorder should not capture -> it either unless explicitly permitted by the user. +> it either unless explicitly requested by the user. #### "m" - marker -Event of type `"m"` represents a marker. +Event of code `"m"` represents a marker. When marker is encountered in the event stream and "pause on markers" functionality of the player is enabled, the playback should pause, and wait for the user to resume. -`event-data` can be used to annotate a marker. Annotations may be used to e.g. +`data` can be used to annotate a marker. Annotations may be used to e.g. show a list of named "chapters". +#### "r" - resize + +Event of code `"r"` represents terminal resize. + +Those are captured in response to `SIGWINCH` signal. + +`data` contains new terminal size (columns + rows) formatted as +`"{COLS}x{ROWS}"`, e.g. `"80x24"`. + ## Notes on compatibility Version 2 of asciicast file format solves several problems which couldn't be diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/asciinema-2.3.0/setup.cfg new/asciinema-2.4.0/setup.cfg --- old/asciinema-2.3.0/setup.cfg 2023-07-05 15:51:16.000000000 +0200 +++ new/asciinema-2.4.0/setup.cfg 2023-10-23 16:06:50.000000000 +0200 @@ -1,6 +1,6 @@ [metadata] name = asciinema -version = 2.3.0 +version = 2.4.0 author = Marcin Kulik author_email = m...@ku1ik.com url = https://asciinema.org