最近的更改|配置|热键|常见问题解答|发展|教程


Zulip Terminal是Zulip的官方终端客户端,提供基于文本的用户界面(TUI)。
具体目的包括:
了解如何在我们的教程中使用Zulip终端。
我们认为客户已经提供了相当稳定的中等优势的日常用户体验。
当前的开发重点是改善更常用的日常用法方面,以减少用户暂时切换到另一个客户的特定功能的需求。
我们期望在长期内仅解决的当前限制包括:
终端客户端当前与Zulip Web客户端有许多有意的差异:
有关缺少功能支持的查询,请查看常见问题(常见问题解答),我们的开放问题或在Zulip社区服务器上与用户和开发人员聊天!
我们建议在专用的Python虚拟环境中安装(请参阅下文)或使用自动选项(例如PIPX)
稳定的版本- 这些可在PYPI上作为包装Zulip -Term提供
要安装,请运行一个命令,例如: pip3 install zulip-term
最新(git)版本- 最新的开发版本可以从GIT存储库main分支机构安装
要安装,请运行一个命令: pip3 install git+https://github.com/zulip/zulip-terminal.git@main
我们还提供了一些示例码头,以在Docker/中构建Docker图像。
由于运行所需的python 3.6+,以下内容应在大多数系统上工作:
python3 -m venv zt_venv (在当前目录中创建一个名为zt_venv的虚拟环境)source zt_venv/bin/activate (激活虚拟环境;这假设一个类似bash的外壳)如果您打开另一个终端窗口(或注销/重新启动计算机),则需要在运行zulip-term之前再次运行上述步骤2 ,因为这会激活该虚拟环境。您可以在Python 3库VENV文档中阅读有关虚拟环境的更多信息。
请注意,没有自动上的系统,因此请跟踪与您的安装版本相关的更新位置:
稳定版本
在升级之前,我们建议您检查最近发行版的更改,以便您知道发行版之间有任何重要的更改。
现在,这些在Zulip Community Server(https://chat.zulip.org)上的#emoins >终端发布主题中宣布,该主题在没有帐户的情况下可见。
如果您希望在宣布更新时收到电子邮件,欢迎您在此服务器上注册一个帐户,这将使您能够启用#Announce流的电子邮件通知(帮助文章,chat.zulip.org上的通知设置)。
您还可以在项目页面上自定义GITHUB手表设置以包含发行版。
PYPI提供了RSS发布供稿,以及其他各种服务跟踪此信息。
最新(git)版本
从main GIT分支安装的版本也不会自动更新 - “最新”是指安装点的状态。
这也适用于其他来源或开发安装(例如https://aur.archlinux.org/packages/python-zulip-term-git/)。
因此,使用上面的命令或与软件包系统相关的一个(例如Arch)升级软件包。
虽然main分支旨在保持稳定,但如果在两个任意的“最新”版本之间升级,请注意,尽管我们的提交日志应该非常可读,但请注意不会汇总更改。
首次运行zulip-term时,它将在主目录中寻找一个zuliprc文件,其中包含以登录Zulip Server的详细信息。
如果找不到此文件,则有两个选择:
zulip-term将提示您获取服务器,电子邮件和密码,并在该位置为您创建zuliprc文件
注意:如果您使用Google,github或其他外部身份验证来访问Zulip组织,那么您可能没有密码集,目前需要创建一个用于使用Zulip-ensinal的密码。
<Zulip server URL>/accounts/password/reset/的等效内容,以创建一个新的密码(例如:https://chat.zulip.org/accounts/password/password/reset/)。每次运行zulip-term时,都可以使用-c或--config-file选项指定替代zuliprc文件的路径。 $ zulip-term -c /path/to/zuliprc
可以通过连接到该服务器的Web或桌面应用程序下载与您在特定Zulip服务器上的帐户相对应的.zuliprc文件。在最近的版本中,可以在您的个人设置中的“帐户和隐私”部分中找到,在API密钥中,为“显示/更改API密钥”。
如果这是您唯一的Zulip帐户,则可能需要将此文件移动并将其重命名为上面的默认文件位置,或将其重命名为更令人难忘的东西,您可以将其传递给---config-file选项。此.zuliprc文件为您提供了该用户的所有权限。
可以从机器人部分下载类似的.zuliprc files ,但您已设置的任何机器人都可以下载。
注意:如果您的服务器使用自签名的证书或不安全的连接,则需要手动向zuliprc文件添加额外的选项 - 请参阅Zulip Python模块的文档。
我们建议在第一次尝试Zulip终端时使用-e或--explore选项(在探索模式下)运行zulip-term ,我们故意不将消息标记为读取。尝试跟随我们的教程,以掌握事物。
zuliprc文件包含两个部分:
[api]部分,其中包含连接到Zulip服务器所需的信息zulip-term配置的[zterm]部分在某些情况下,只能通过zulip-term自动生成第一部分的文件,或者您可以从服务器上的帐户下载一个文件(请参见上文)。当您希望自定义zulip-term的行为时,可以在第二部分的一部分添加和调整。
下面的示例,带有虚拟[api]部分内容,代表一个工作配置文件,所有默认兼容[zterm]值都没有注释,并带有随附的注释:
[api]
[email protected]
key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
site=https://example.zulipchat.com
[zterm]
## Theme: available themes can be found by running `zulip-term --list-themes`, or in docs/FAQ.md
theme=zt_dark
## Autohide: set to 'autohide' to hide the left & right panels except when they're focused
autohide=no_autohide
## Exit Confirmation: set to 'disabled' to exit directly with no warning popup first
exit_confirmation=enabled
## Footlinks: set to 'disabled' to hide footlinks; 'enabled' will show the first 3 per message
## For more flexibility, comment-out this value, and un-comment maximum-footlinks below
footlinks=enabled
## Maximum-footlinks: set to any value 0 or greater, to limit footlinks shown per message
# maximum-footlinks=3
## Notify: set to 'enabled' to display notifications (see elsewhere for configuration notes)
notify=disabled
## Color-depth: set to one of 1 (for monochrome), 16, 256, or 24bit
color-depth=256
## Transparency: set to 'enabled' to allow background transparency
## This is highly dependent on a suitable terminal emulator, and support in the selected theme
## Terminal emulators without this feature may show an arbitrary solid background color
transparency=disabled
## Editor: set external editor command, to edit message content
## If not set, this falls back to the $ZULIP_EDITOR_COMMAND then $EDITOR environment variables
# editor: nano
注意:当
zulip-term启动时,可以在命令行上指定这些配置设置中的大多数;zulip-term -h或zulip-term --help将提供全部选项列表。
请注意,WSL当前不支持通知;参见#767。
以下命令在基于Debian的系统上安装了notify-send ,也可以针对其他Linux系统找到类似的命令。
sudo apt-get install libnotify-bin
不需要附加包来启用OS X中的通知。但是,要具有通知声音,请设置以下变量(基于您的Shell类型)。声音值(此处ping)可以是在/System/Library/Sounds或~/Library/Sounds上找到的.aiff文件中的任何一个。
bash
echo 'export ZT_NOTIFICATION_SOUND=Ping' >> ~/.bash_profile
source ~/.bash_profile
ZSH
echo 'export ZT_NOTIFICATION_SOUND=Ping' >> ~/.zshenv
source ~/.zshenv
Zulip终端允许用户通过Pyperclip将某些文本复制到剪贴板。该模块利用了可能与操作系统随附的各种系统软件包。目前,“复制到剪贴板”功能仅可用于复制流信息弹出的流电子邮件。
在Linux上,此模块使用xclip或xsel命令,该命令应该随着OS随附。如果这些命令都没有安装在您的系统上,请使用以下方式安装任何一个命令:
sudo apt-get install xclip [Recommended]
或者
sudo apt-get install xsel
不需要其他包装即可复制到剪贴板。
尽管Zulip Terminal旨在与任何Zulip服务器一起使用,但主要贡献者位于Zulip社区服务器上的https://chat.zulip.org上, #Zulip-terminal流中的大多数对话。
欢迎您使用上面的链接查看该流中的对话,或注册帐户并与我们聊天 - 无论您是用户还是开发人员!
我们的目标是保持Zulip社区友好,热情和生产力,因此,如果参与,请尊重我们的社区规范。
这些是上面链接的社区规范的一个子集,它们与Zulip终端的用户更相关:这些终端的用户更有可能在文本环境中,在字符行/列中有限,并且存在于这一较小的流中。
更喜欢代码块中的文本,而不是屏幕截图
Zulip Terminal支持下载图像,但不能保证用户能够查看它们。
尝试META + M查看示例内容格式,包括代码块
更喜欢静音而不是常规提及 - 或避免完全提及
有了Zulip的主题,预期的接收者通常已经很清楚。经验丰富的成员将在他们的时间允许的情况下出席 - 返回消息时会响应消息 - 其他成员可能会在此之前提供帮助。
(为那些不希望定期出席的人保存定期提及)
在输入@_指定无声提及之后
更喜欢修剪报价和回复文本仅对较长消息的相关部分 - 或避免完全引用
Zulip的主题通常会清楚您要回复哪些消息。用有限的行和文本列更难阅读长消息,但是如果引用额外内容的整个长消息,这会恶化。
尝试>引用选定的消息,在撰写消息时删除正常文本
更喜欢快速的表情符号反应,而不是简单的简短消息
反应占用较少的空间,包括在Zulip终端中,尤其是当多个用户希望以相同的情感回应时。
尝试+在消息上切换大拇指(+1),或使用:搜索其他反应
Zulip Terminal是由令人敬畏的Zulip社区建造的。
要成为其中的一部分并为该代码做出贡献,请随时在任何问题上工作或在#Zulip-ensinal上提出您的想法。
对于提交结构和样式,请查看下面的“提交样式”部分。
如果您是git的新手(或者!),则可以从Zulip Git指南中受益。贡献时,重要的是要注意,我们使用面向折叠的工作流程。
一个简单的教程可用于实现typing指标。按照它了解如何为Zulip-ensinal实施新功能。
当然,您可以在GitHub上浏览源和您下载的源树中的源,并检查源文件概述,以获取有关当前如何安排文件的想法。
Zulip Terminal使用URWID在端子中渲染UI组件。 Urwid是一个很棒的库,您可以通过使用Python渲染一个体面的终端UI。 URWID的教程是新贡献者开始的好地方。
首先,在github上分叉zulip/zulip-terminal存储库(请参见如何),然后在本地克隆您的分叉存储库,用您的github用户名代替your_username :
$ git clone --config pull.rebase [email protected]:YOUR_USERNAME/zulip-terminal.git
这应该为当前目录中的存储库创建一个新目录,因此,使用cd zulip-terminal输入存储库目录并配置并获取Zulip终端克隆叉子的上游遥控存储库:
$ git remote add -f upstream https://github.com/zulip/zulip-terminal.git
有关用于克隆和设置上游的命令的详细说明,请参阅Zulip Git Guide的“ Get Zulip代码”部分的步骤1。
有各种选项可用;我们正在探索每个人的好处,并会喜欢您使用或感觉最好的反馈。
请注意,每种情况中使用的工具通常相同,但以不同的方式调用。
以下命令应在存储库目录中运行,该目录由与上一节中类似的过程创建。
$ pip3 install --user pipenv
--python 3.6更具体) $ pipenv --three
$ pipenv install --dev
$ pipenv run pip3 install -e '.[dev]'
$ pipenv run gitlint install-hook
手动创建并激活虚拟环境;任何方法都应起作用,例如上述简单安装中使用的方法
python3 -m venv zt_venv (在当前目录中创建一个名为zt_venv的VENV)source zt_venv/bin/activate (激活VENV;这假设一个类似Bash的外壳)安装Zulip-期限,并具有开发要求
$ pip3 install -e '.[dev]'
$ gitlint install-hook
如果您已经make了:这是最新,最简单的方法:
make (在当前目录中的zt_venv中设置一个已安装的虚拟环境)source zt_venv/bin/activate (激活VENV;这假设一个类似Bash的外壳)gitlint install-hook (连接gitlint提交挂钩)建立了开发环境后,您可能会发现以下情况,具体取决于您的类型环境:
| 任务 | 制作和pip | PIPENV |
|---|---|---|
| 正常运行 | zulip-term | pipenv run zulip-term |
| 在调试模式下运行 | zulip-term -d | pipenv run zulip-term -d |
| 进行分析 | zulip-term --profile | pipenv run zulip-term --profile |
| 运行所有衬里 | ./tools/lint-all | pipenv run ./tools/lint-all |
| 运行所有测试 | pytest | pipenv run pytest |
| 建立测试覆盖报告 | pytest --cov-report html:cov_html --cov=./ | pipenv run pytest --cov-report html:cov_html --cov=./ |
如果使用PIP进行制作,则运行make将确保开发环境与指定的依赖关系保持最新,从而在Git和重新审进后很有用。
选择您喜欢的文本编辑器或开发环境!
来源包括一个.editorconfig文件,该文件使许多编辑能够自动配置自己以生成满足项目最低要求的文件。有关编辑器支持,请参见https://editorconfig.org;请注意,如果您想使用此功能,则可能需要插件。
提交拉动请求(pr)或将更改推向现有拉的请求时,衬里和自动化测试(PYTEST)将在CI(GitHub操作)中自动运行。
但是,在计算机上运行这些检查可以通过避免反复将代码推向GitHub来加快开发的速度。实现此目的的命令已在上面的开发任务表中列出(单个衬里也可以通过tools/中的脚本运行)。
另外,如果使用基于make系统:
make lint并make test运行所有每组任务make check运行所有支票,在推动PR之前很有用(或更新)tools/check-branch将运行您分支中的每个make check注意:直到所有林语和测试都通过,包括每次投票,都不太可能合并拉动请求。
纠正某些绒毛错误需要手动干预,例如从mypy进行类型检查。
有关测试的提示,请查看以下有关Pytest的部分。
但是,如下所述,可以自动修复其他绒布错误 -这可以节省大量时间手动调整代码以通过林格!
如果您有麻烦理解为什么衬里或Pytest失败的原因,请将您的代码推到分支/PR,我们可以在PR或Chat.zulip.org中讨论问题。
如果您更新这些,请注意,您不需要在两个地方更新文本以通过覆盖。
真相的来源是在源代码中,因此只需更新Python文件并运行相关工具即可。目前我们有:
tools/lint-hotkeys --fix for config/keys.py再生文档/hotkeys.mdtools/lint-docstring --fix for for file docstrings for docs/develoter-file-overview.md(这些工具也用于覆盖过程,以确保这些文件已同步)
该项目分别使用black和isort进行代码风格和导入排序。
这些工具可以在本地运行,但也可以自动为您格式化代码。
如果您使用的是基于make的设置,则运行make fix将同时运行(和其他一些工具)并重新格式化代码的当前状态 - 因此,如果您对更改感到满意,则首先要--amend 。
您也可以在文件或目录上单独使用工具,例如。 black zulipterminal或isort tests/model/test_model.py
当您在本地工作时,调查了进行的更改,通常会做出一系列小型承诺来存储您的进度。通常,这可能包括在上一个提交中解决覆盖或测试问题的提交。这些是发展风格的投入- 几乎每个人都可能在某种程度上以这种风格写作。
开发风格的委托商店将更改现在对您来说是可以的。但是,在共享您的代码时,提交消息是与他人交流的好地方,而您的原因和原因。整理结构还可以使读者更容易,更快地了解更改,并且您尊重他们的时间。一个例子是,与分裂相比,很大的单一提交可能需要很多时间来审查。另一个是,如果您在提交中修复了测试/裁剪:哪个提交(或提交!)是否可以解决,如果它在同一分支/PR中,为什么原始commit不只是修复?
因此,当创建拉动请求(PR)时,请考虑您的代码更有可能更快地合并,如果更易于阅读,理解和审查- 其中很大一部分就是您将更改构成提交的方式,并描述提交消息中的这些更改。
为了提高生产力,使您的PR更容易进行审查和更新,我们遵循Zulip和其他地方采用的方法,旨在使PRS由一系列最小的连贯提交组成:
请注意,遵守这些原则可以在审查PR之前,之中和之后带来其他好处,包括:
main上的git bisect的效用现在,我们在工作中执行PR的连贯性质的一致性有限,作为我们连续集成(CI)的一部分,确保孤立的PR提交,这基本上是在您的分支机构中make check的每个提交。您可以在使用tools/check-branch推送到GitHub之前在本地复制此内容。
尽管最初的概念验证或概念证明是可以按原样推动的,但可能只会根据整体变化进行审查。通常,如果单独的投入看起来像是发展风格,那么审阅者可能会提供更少的特定反馈,并且在合并之前肯定会要求最少的连贯提交。
重组命令- 大多数重组都依赖于交互式重新构造(例如git rebase -i upstream/main ),但请考虑在线搜索特定的操作,以及在#git help或在cath.zulip.org上搜索或询问#git help或#learning 。
自我审查- 另一种有用的方法是在当地审查自己的承诺(请参阅Zulip建议)和推动GitHub之后。这使您可以检查和修复任何看起来不合适的东西,这些东西可能会在他们的审核中进行,帮助您的提交看起来更加精致,并再次表明您尊重审稿人的时间。
我们的目标是遵循标准的提交样式,以保持git log一致且易于阅读。
就像使用代码一样,我们建议您参考GIT日志中的最新提交,以获取我们积极使用的样式的示例。
我们的提交消息的整体风格广泛遵循Zulip提交消息的一般准则,因此我们建议您首先阅读。
我们的提交标题(摘要)与一般的Zulip风格有轻微的变化:每种风格:
/隔开Tests updated或提交文本中Tests added )refactor: , bugfix:和requirements:请参阅下文)一些示例提交标题:(理想情况下在实践中更具描述性!)
file3/file1/file2: Improve behavior of something.file1.txt , file2.py和file3.mdrefactor: file1/file2: Extract some common function.file1.py和file2.pybugfix: file1: Avoid some noticeable bug.file1.py中的错误tests: file1: Improve test for something.file1的测试,可能在test_file1.py中requirements: Upgrade some-dependency from ==9.2 to ==9.3.为了满足其中一些规则,您可以使用GitLint ,如下部分所述。
但是,请手动检查您的提交与这些样式规则,因为Gitlint无法检查所有内容 - 包括语言或语法!
gitlint工具默认是在开发环境中安装的,并可以帮助确保您的提交符合预期的标准。
该工具可以手动检查特定的提交,例如。 gitlint用于最新的提交或gitlint --commits main..用于从main领导的提交。但是,我们强烈建议运行gitlint install-hook以安装gitlint commen-message钩子(或带有Pipenv设置的pipenv run gitlint install-hook )。
如果挂钩是如上所述安装的,则完成提交文本后,Gitlint将对我们设置的样式进行检查,如果有任何问题,它将提供建议。如果Gitlint找到了任何东西,它将询问您是否希望按照( y是'yes')进行消息,停止提交过程( n for'no no')或编辑提交消息( e for'for'edit')。
尽管内容仍然取决于您的写作技巧,但这可以确保提交(包括不同作者)之间的格式化结构更加一致。
使用Pytest编写Zulip末端的测试。您可以阅读/tests文件夹中的测试,以了解有关新类 /功能的编写测试。如果您是Pytest的新手,那么绝对建议阅读其文档。
目前,我们进行了数千项测试,可以在运行pytest时进行检查。虽然它取决于您的系统功能,但通常需要不到一分钟的时间才能运行。但是,在调试期间,您可能仍然希望限制测试范围,以改善周转时间:
如果许多测试以非常详细的方式失败,则可以尝试-x选项(例如pytest -x )在第一次失败后停止测试;由于测试和测试固定装置的参数化,只需一个修复即可解决许多明显的错误/失败! (例如, pytest --maxfail 3对于较少破坏的版本)
为了避免每次进行所有成功的测试以及失败,您可以使用--lf (例如pytest --lf )运行,缩短了--last-failed (类似有用的选项可能是--failed-first and --new-first ,它可能与-x一起运行得很好)
由于pytest 3.10有--sw ( --stepwise ),它以与--lf和-x相同的方式通过已知的失败起作用,可以将其与--stepwise-skip结合在一起,以控制哪个测试是当前的焦点
如果您知道失败和/或在特定位置的测试名称,则可能会将测试限制为特定位置(例如pytest tests/model )或使用选定的关键字(例如pytest -k __handle )
当仅运行测试的子集时,使用-v选项( --verbose )将变得更加实用和有用。而不是显示. (或F , E , x等)对于每个测试结果,它给出了每个测试的名称(带有参数)(例如pytest -v -k __handle )。此选项在测试中还显示了更多详细信息,可以多次给出(例如pytest -vv )。
有关Pytest选项的其他帮助,请参阅pytest -h ,或查看完整的Pytest文档。
print输出如果使用-d或--debug在运行时启用调试,则将Zulip-ensinal的Stdout(标准输出)重定向到./debug.log 。
这意味着,如果您想检查变量的值,或者可能指示到达代码中的某个点,则可以简单地使用print() ,例如。
print ( f"Just about to do something with { variable } " )并且在使用调试选项运行时,字符串将打印到./debug.log 。
使用BASH状终端,您可以在另一个终端中运行诸如tail -f debug.log之类的东西,以查看其发生的print输出。
如果您想在运行时或在特定状态下调试Zulip-ensinal,则可以插入
from pudb . remote import set_trace
set_trace ()在代码的一部分中,您要调试。这将为您启动Telnet连接。您可以在./debug.log中找到telnet连接的IP地址和端口。然后简单地运行
$ telnet 127.0.0.1 6899
在另一个终端中,其中127.0.0.1是IP地址,而6899是您在./debug.log中找到的端口。
这可能意味着您已经安装了Zulip-ensinal的正常版本和开发版本。
为了确保您运行开发版本:
如果使用Pipenv,请从克隆/下载的zulip-terminal目录中调用pipenv run zulip-term ;
如果使用PIP(PIP3),请确保您激活了正确的虚拟环境(VENV);根据壳的配置方式,VENV的名称可能出现在命令提示符中。请注意,不包括pip3命令中的-e也会引起此问题。