{ "info": { "author": "Zulip", "author_email": "zulip-devel@googlegroups.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Communications :: Chat" ], "description": "# Zulip Terminal (zulip-term)\n\nAn interactive terminal interface for [Zulip](https://zulipchat.com).\n\n[Recent changes](CHANGELOG.md) | [Installation & Running](#Installation--running) | [Hot Keys](#hot-keys) | [Troubleshooting](#troubleshooting-common-issues) | [Development](#contributor-guidelines)\n\n[![Zulip chat](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg)](https://chat.zulip.org/#narrow/stream/206-zulip-terminal)\n[![PyPI](https://img.shields.io/pypi/v/zulip-term.svg)](https://pypi.python.org/pypi/zulip-term)\n[![Python Versions](https://img.shields.io/pypi/pyversions/zulip-term.svg)](https://pypi.python.org/pypi/zulip-term)\n[![Build Status](https://travis-ci.org/zulip/zulip-terminal.svg?branch=master)](https://travis-ci.org/zulip/zulip-terminal)\n[![Coverage status](https://img.shields.io/codecov/c/github/zulip/zulip-terminal/master.svg)](https://codecov.io/gh/zulip/zulip-terminal)\n[![Checked with mypy](http://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/)\n\n## Installation & Running\n\nWe recommend installing `zulip-term` in a new python virtual environment (venv); with the required python 3.5+, the following should work on most systems:\n1. `python3 -m venv zulip-terminal-venv` (creates a venv named `zulip-terminal-venv` in the current directory)\n2. `source zulip-terminal-venv/bin/activate` (activates the venv; this assumes a bash-like shell)\n3. `pip3 install zulip-term` (downloads and installs the latest zulip-terminal release from PyPI)\n\nZulip Terminal installs as `zulip-term`, so you can then run:\n```\n$ zulip-term\n```\n\nIf you see further text, like the following, `zulip-term` should be loading!\n```\nLoading with:\n theme 'default' specified with no config.\n autohide setting 'no_autohide' specified with no config.\nWelcome to Zulip.\n```\n\n### NOTE: Running in subsequent/different sessions\n\nIf you open a different terminal window (or log-off/restart your computer), you'll need to run **step 2** of the installation again before running `zulip-term`, since that activates that virtual environment. You can read more about virtual environments in the [Python 3 library venv documentation](https://docs.python.org/3/library/venv.html).\n\n### NOTE: The zuliprc file\n\nUpon first running, `zulip-term` looks for a `zuliprc` file, by default in your home directory.\n\nIf it doesn't find one, you have two options:\n\n1. `zulip-term` will prompt you for your server, email and password, and create a `zuliprc` file for you in that location\n\n2. You can specify the path to an existing `zuliprc` file using the `-c` or `--config-file` options, eg.\n```\n$ zulip-term -c /path/to/zuliprc\n```\n\nYou can obtain a personal zuliprc file from Zulip servers in your account settings, which gives you all the permissions you have in the web app. Bot zuliprc files can be downloaded from the area for each bot, and will have more limited permissions.\n\n**NOTE:** If you use Google/Github Auth to login into your zulip organization then you don't have a password and you need to create one. Please go to your `/accounts/password/reset/` (eg: https://chat.zulip.org/accounts/password/reset/) to create a new password for your associated account.\n\n### Example zuliprc file\n\nThe `[api]` section of a `zuliprc` file is relatively standard; `zulip-term` also reads extra options from the `[zterm]` section, if they are added:\n\n```\n[api]\nemail=example@example.com\nkey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\nsite=https://realm.zulipchat.com\n\n[zterm]\n# Theme can also be set to 'gruvbox' ('blue' & 'light' are older themes needing work)\ntheme=default\n# Autohide defaults to 'no_autohide', but can be set to 'autohide' to hide the left & right panels except when focused.\nautohide=autohide\n```\n\n## Hot Keys\n| Command | Key Combination |\n| ----------------------------------------------------- | --------------------------------------------- |\n| Show/hide help menu | ? |\n| Go Back | esc |\n| Previous message | Up / k |\n| Next message | Down / j |\n| Go left | left / h |\n| Go right | right / l |\n| Scroll up | PgUp / K |\n| Scroll down | PgDn / J |\n| Go to the last message | G / end |\n| Reply to the current message | r |\n| Reply mentioning the sender of the current message | @ |\n| Reply quoting the current message text | > |\n| Reply privately to the sender of the current message | R |\n| New message to a stream | c |\n| New message to a person or group of people | x |\n| Toggle focus box in compose box | tab |\n| Toggle topics in a stream | t |\n| Send a message | Alt Enter / Ctrl d |\n| Edit a sent message | e |\n| Show message information | i |\n| Narrow to the stream of the current message | s |\n| Narrow to the topic of the current message | S |\n| Narrow to a topic/private-chat, or stream/all-private-messages| z |\n| Narrow to all private messages | P |\n| Narrow to all starred messages | f |\n| Next Unread Topic | n |\n| Next Unread private message | p |\n| Search Users | w |\n| Search Messages | / |\n| Search Streams | q |\n| Mute/unmute Streams | m |\n| Add/remove thumbs-up reaction to the current message | + |\n| Add/remove star status of the current message | * |\n| Jump to the Beginning of line | Ctrl + A |\n| Jump backward one character | Ctrl + B / \u2190 |\n| Jump backward one word | Meta + B |\n| Delete one character | Ctrl + D |\n| Delete one word | Meta + D |\n| Jump to the end of line | Ctrl + E |\n| Jump forward one character | Ctrl + F / \u2192 |\n| Jump forward one word | Meta + F |\n| Delete previous character | Ctrl + H |\n| Transpose characters | Ctrl + T |\n| Kill (cut) forwards to the end of the line | Ctrl + K |\n| Kill (cut) backwards to the start of the line | Ctrl + U |\n| Kill (cut) forwards to the end of the current word | Meta + D |\n| Kill (cut) backwards to the start of the current word | Ctrl + W |\n| Paste last kill | Ctrl + Y |\n| Undo last action | Ctrl + _ |\n| Jump to previous line | Ctrl + P / \u2191 |\n| Jump to next line | Ctrl + N / \u2193 |\n| Quit | Ctrl + C |\n| Clear screen | Ctrl + L |\n\nNote: You can use `arrows`, `home`, `end`, `Page up` and `Page down` keys to move around in Zulip-Terminal.\n\n## Troubleshooting: Common issues\n\n### Unable to render non-ASCII characters\n\n**NOTE** Releases of 0.3.2 onwards should not have this issue, or require this solution.\n\nIf you see `?` in place of emojis or Zulip Terminal gives a `UnicodeError` / `CanvasError`, you haven't enabled utf-8\nencoding in your terminal. To enable it by default, add this to the end of you `~/.bashrc`:\n\n```\nexport LANG=en_US.utf-8\n```\n\n### Unable to open links\n\nIf you are unable to open links in messages, then try double right-click on the link.\n\nAlternatively, you might try different modifier keys (eg. shift, ctrl, alt) with a right-click.\n\nIf you are still facing problems, please discuss it at\n[#zulip-terminal](https://chat.zulip.org/#narrow/stream/206-zulip-terminal) or open an issue\nfor it mentioning your terminal name, version, and OS.\n\n### Above mentioned hotkeys don't work as described\n\nIf any of the above mentioned hotkeys don't work for you, feel free to open an issue or discuss it on [#zulip-terminal](https://chat.zulip.org/#narrow/stream/206-zulip-terminal).\n\n### Zulip-term crashed!\n\nWe hope this doesn't happen, but would love to hear about this in order to fix it, since the application should be increasingly stable! Please let us know the problem, and if you're able to duplicate the issue, on the github issue-tracker or at [#zulip-terminal](https://chat.zulip.org/#narrow/stream/206-zulip-terminal).\n\nThis process would be helped if you could send us the 'traceback' showing the cause of the error, which should be output in such cases:\n* version 0.3.1 and earlier: the error is shown on the terminal;\n* versions 0.3.2+: the error is present/appended to the file `zulip-terminal-tracebacks.log`.\n\n### Something looks wrong! Where's this feature? There's a bug!\nCome meet us on the [#zulip-terminal](https://chat.zulip.org/#narrow/stream/206-zulip-terminal) stream on *chat.zulip.org*.\n\n## Contributor Guidelines\n\nZulip Terminal is being built by the awesome [Zulip](https://zulipchat.com/team) community.\n\nTo be a part of it and to contribute to the code, feel free to work on any [issue](https://github.com/zulip/zulip-terminal/issues) or propose your idea on\n[#zulip-terminal](https://chat.zulip.org/#narrow/stream/206-zulip-terminal).\n\nPlease read our [commit message guidelines](http://zulip.readthedocs.io/en/latest/contributing/version-control.html) and\n[git guide](http://zulip.readthedocs.io/en/latest/git/index.html).\n\nA simple tutorial for implementing the `typing` indicator is available\nin the [wiki](https://github.com/zulip/zulip-terminal/wiki/Developer-Documentation). Follow\nit to understand the how to implement a new feature for zulip-terminal.\n\n### Setting up a development environment\n\nVarious options are available; we are exploring the benefits of each and would appreciate feedback on which you use or feel works best.\n\nNote that the tools used in each case are typically the same, but are called in different ways.\n\nWith any option, you first need to clone the zulip/zulip-terminal repository locally (the following will place the repository in the current directory):\n```\n$ git clone git@github.com:zulip/zulip-terminal.git\n```\nThe following commands should be run in the repository directory, which can be achieved with `cd zulip-terminal`.\n\n#### Pipenv\n\n1. Install pipenv (see the [recommended installation notes](https://pipenv.readthedocs.io/en/latest/install/#pragmatic-installation-of-pipenv); pipenv can be installed in a virtual environment, if you wish)\n```\n$ pip3 install --user pipenv\n```\n2. Initialize the pipenv virtual environment for zulip-term (using the default python 3; use eg. `--python 3.6` to be more specific)\n\n```\n$ pipenv --three\n```\n\n3. Install zulip-term, with the development requirements\n\n```\n$ pipenv install --dev\n$ pipenv run pip3 install -e .[dev]\n```\n\n#### Pip\n\n1. Manually create & activate a virtual environment; any method should work, such as that used in the above simple installation\n\n 1. `python3 -m venv zulip-terminal-venv` (creates a venv named `zulip-terminal-venv` in the current directory)\n 2. `source zulip-terminal-venv/bin/activate` (activates the venv; this assumes a bash-like shell)\n\n2. Install zulip-term, with the development requirements\n```\n$ pip3 install -e .[dev]\n```\n\n### Development tasks\n\nOnce you have a development environment set up, you might find the following useful, depending upon your type of environment:\n\n| Task | Pip | Pipenv |\n|-|-|-|\n| Run normally | `zulip-term` | `pipenv run zulip-term` |\n| Run in debug mode | `zulip-term -d` | `pipenv run zulip-term -d` |\n| Run with profiling | `zulip-term --profile` | `pipenv run zulip-term --profile` |\n| Run all tests (including linter) | `pytest` | `pipenv run pytest` |\n| Build test coverage report | `pytest --cov-report html:cov_html --cov=./` | `pipenv run pytest --cov-report html:cov_html --cov=./` |\n| Check type annotations | `./tools/run-mypy` | `pipenv run ./tools/run-mypy` |\n\n#### GitLint (optional)\n\nIf you plan to add git commits and submit pull-requests (PRs), then we highly suggest installing the `gitlint` commit-message hook by running `gitlint install-hook` (or `pipenv run gitlint install-hook` with pipenv setups). While the content still depends upon your writing skills, this ensures a more consistent formatting structure between commits, including by different authors.\n\nIf the hook is installed as described above, then after completing the text for a commit, it will be checked by gitlint against the style we have set up, and will offer advice if there are any issues it notices. If gitlint finds any, it will ask if you wish to commit with the message as it is (`y` for 'yes'), stop the commit process (`n` for 'no'), or edit the commit message (`e` for 'edit').\n\nOther gitlint options are available; for example it is possible to apply it to a range of commits with the `--commits` option, eg. `gitlint --commits HEAD~2..HEAD` would apply it to the last few commits.\n\n### Debugging Tips\n\n#### Output using `print`\n\nThe stdout for zulip-terminal is redirected to `./debug.log` by default.\n\nIf you want to check the value of a variable, or perhaps indicate reaching a certain point in the code, you can simply write\n```python3\nprint(variable, flush=True)\n```\nand the value of the variable will be printed to `./debug.log`.\n\nWe suggest the `flush=True` to ensure it prints straight away.\n\nIf you have a bash-like terminal, you can run something like `tail -f debug.log` in another terminal, to see the output from `print` as it happens.\n\n#### Interactive debugging using pudb & telnet\n\nIf you want to debug zulip-terminal while it is running, or in a specific state, you can insert\n```python3\nfrom pudb.remote import set_trace\nset_trace()\n```\nin the part of the code you want to debug. This will start a telnet connection for you. You can find the IP address and\nport of the telnet connection in `./debug.log`. Then simply run\n```\n$ telnet 127.0.0.1 6899\n```\nin another terminal, where `127.0.0.1` is the IP address and `6899` is port you find in `./debug.log`.\n\n#### There's no effect in Zulip Terminal after making local changes!\n\nThis likely means that you have installed both normal and development versions of zulip-terminal.\n\nTo ensure you run the development version:\n* If using pipenv, call `pipenv run zulip-term` from the cloned/downloaded `zulip-terminal` directory;\n* If using pip (pip3), ensure you have activated the correct virtual environment (venv); depending on how your shell is configured, the name of the venv may appear in the command prompt. Note that not including the `-e` in the pip3 command will also cause this problem.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/zulip/zulip-terminal", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "zulip-term", "package_url": "https://pypi.org/project/zulip-term/", "platform": "", "project_url": "https://pypi.org/project/zulip-term/", "project_urls": { "Homepage": "https://github.com/zulip/zulip-terminal" }, "release_url": "https://pypi.org/project/zulip-term/0.4.0/", "requires_dist": [ "urwid (==2.0.1)", "zulip (==0.5.9)", "emoji (==0.5.0)", "urwid-readline (==0.8)", "beautifulsoup4 (==4.6.0)", "lxml (==4.2.3)", "mypy-extensions (>=0.4)", "pytest (==3.4.2) ; extra == 'dev'", "pytest-cov (==2.5.1) ; extra == 'dev'", "pytest-mock (==1.7.1) ; extra == 'dev'", "pytest-pep8 (==1.0.6) ; extra == 'dev'", "mypy (==0.641) ; extra == 'dev'", "pudb (==2017.1.4) ; extra == 'dev'", "snakeviz (==0.4.2) ; extra == 'dev'", "gitlint (>=0.10) ; extra == 'dev'" ], "requires_python": ">=3.5, <3.8", "summary": "A terminal-based interface to zulip chat", "version": "0.4.0" }, "last_serial": 5566630, "releases": { "0.2.0": [ { "comment_text": "", "digests": { "md5": "d35334f1b6efee93e0d8886c0372808c", "sha256": "a69b2df6efcad31272ef18fea437fe185b591a7e85db39841690df989728b5f2" }, "downloads": -1, "filename": "zulip_term-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d35334f1b6efee93e0d8886c0372808c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 43608, "upload_time": "2018-07-15T16:49:40", "url": "https://files.pythonhosted.org/packages/11/c4/cf59ca68916c629df3b84cce9d1e718a47c19d3fae2cacb089f39a60bacf/zulip_term-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "35a443ad22983aaa368715dde090d6c7", "sha256": "c8ed57b9f65510ae3a0ae7998609015f3b3375df6543f8904a9f751f38ed0f8b" }, "downloads": -1, "filename": "zulip-term-0.2.0.tar.gz", "has_sig": false, "md5_digest": "35a443ad22983aaa368715dde090d6c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39119, "upload_time": "2018-07-15T16:49:42", "url": "https://files.pythonhosted.org/packages/eb/03/a08541639c138524838823353584fa09c110b38cee158f03fd2787c260d5/zulip-term-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "554b523e9a982c12e7c8043fa79bab04", "sha256": "2e2bdb5c61faaef64fccb2fd40b91e710ba5bc8857c30afc9d286f22f36b149f" }, "downloads": -1, "filename": "zulip_term-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "554b523e9a982c12e7c8043fa79bab04", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47744, "upload_time": "2018-10-01T14:28:49", "url": "https://files.pythonhosted.org/packages/1d/bf/34a8910c52c64eb06fecbba7cc3ca329518fde6dddb79106591581ff7d46/zulip_term-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1756cd7c6b6775bfec886086615893cb", "sha256": "1929b34c63ea206a85757d66f36ec7a6d880c650152e623a0a2567638ce65d2b" }, "downloads": -1, "filename": "zulip-term-0.2.1.tar.gz", "has_sig": false, "md5_digest": "1756cd7c6b6775bfec886086615893cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38738, "upload_time": "2018-10-01T14:28:51", "url": "https://files.pythonhosted.org/packages/f8/25/37cc1ff9dfcd635235ebf6a7cb79fee82411b24b19b5ad2683aa6b459936/zulip-term-0.2.1.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "7633e7fd443610a8741c2c9d3cc48d21", "sha256": "2a659ef57e5dbdb6e1b0a973131dec04909189c844e509462e0f64418426b190" }, "downloads": -1, "filename": "zulip_term-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7633e7fd443610a8741c2c9d3cc48d21", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4, <3.8", "size": 61580, "upload_time": "2018-12-26T13:32:33", "url": "https://files.pythonhosted.org/packages/5d/ee/bf19fc24a9bd050d8bd91fe5a45d996cf8e0b343acbd51ff982d1e588f80/zulip_term-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ef6692d4b5e045e9c0438dd789eebbe6", "sha256": "313a6abebd01937f20a37c3629c67172c277e132c1a30a3d31398153fa25a691" }, "downloads": -1, "filename": "zulip-term-0.3.1.tar.gz", "has_sig": false, "md5_digest": "ef6692d4b5e045e9c0438dd789eebbe6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4, <3.8", "size": 51206, "upload_time": "2018-12-26T13:32:36", "url": "https://files.pythonhosted.org/packages/08/ef/0597fa804ed7ce4f7e1b2a17a1fdf71a02357ab3c9ca39c9dfa7bfe471eb/zulip-term-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "c5734a1f07f4bc459614b25c54b2ed5a", "sha256": "26d64082d8f3d675c3dfe1983880f8ff48052596fa410428e3f7e5d15c8e9e65" }, "downloads": -1, "filename": "zulip_term-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c5734a1f07f4bc459614b25c54b2ed5a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5, <3.8", "size": 53815, "upload_time": "2019-07-22T10:08:37", "url": "https://files.pythonhosted.org/packages/e1/39/d58a75d56c6d1b1bd93faa7a463310a2a2056f26abda4fb7c795b0ecdcb7/zulip_term-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "50a4eff01ca036a15383f3fa1deee132", "sha256": "03940c9cec9b32c83fb69c3e71ab5519d4e0fde896119641b214c861f66cd63e" }, "downloads": -1, "filename": "zulip-term-0.4.0.tar.gz", "has_sig": false, "md5_digest": "50a4eff01ca036a15383f3fa1deee132", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5, <3.8", "size": 45895, "upload_time": "2019-07-22T10:08:39", "url": "https://files.pythonhosted.org/packages/25/35/6aedc9cdd84242adffedd53cc75b5c65773e97e5d2abda0c384a1f01971b/zulip-term-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c5734a1f07f4bc459614b25c54b2ed5a", "sha256": "26d64082d8f3d675c3dfe1983880f8ff48052596fa410428e3f7e5d15c8e9e65" }, "downloads": -1, "filename": "zulip_term-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c5734a1f07f4bc459614b25c54b2ed5a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5, <3.8", "size": 53815, "upload_time": "2019-07-22T10:08:37", "url": "https://files.pythonhosted.org/packages/e1/39/d58a75d56c6d1b1bd93faa7a463310a2a2056f26abda4fb7c795b0ecdcb7/zulip_term-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "50a4eff01ca036a15383f3fa1deee132", "sha256": "03940c9cec9b32c83fb69c3e71ab5519d4e0fde896119641b214c861f66cd63e" }, "downloads": -1, "filename": "zulip-term-0.4.0.tar.gz", "has_sig": false, "md5_digest": "50a4eff01ca036a15383f3fa1deee132", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5, <3.8", "size": 45895, "upload_time": "2019-07-22T10:08:39", "url": "https://files.pythonhosted.org/packages/25/35/6aedc9cdd84242adffedd53cc75b5c65773e97e5d2abda0c384a1f01971b/zulip-term-0.4.0.tar.gz" } ] }