Awesome
⚠️ Note that this is the first release of tgt
. Please consider to open an issue if you find any bug or if you have any suggestion. ⚠️
About
tgt
is a terminal user interface for Telegram, written in Rust.
Usage
From crates.io
cargo install tgt
From source downloading the tdlib
cargo build --release --features download-tdlib
After the installation, you can run tgt
with the following command:
tgt --help
From flake.nix
First, create the required TOML configuration files in ~/.tgt/config
using these commands:
git clone https://github.com/FedericoBruzzone/tgt ~/tgt
mkdir -p ~/.tgt/config
cp ~/tgt/config/* ~/.tgt/config
After setting up the configuration files, you have two installation options:
- Run directly with
nix run
:
nix run github:FedericoBruzzone/tgt
- Add
tgt
to your system packages:
Add the following to your flake.nix
:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"
tgt.url = "github:FedericoBruzzone/tgt";
tgt.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = { nixpkgs, tgt, ... }: { /* ... */ }
}
Then add it to your environment.systemPackages
:
{pkgs, tgt, ...}: {
environment = {
systemPackages = [
(tgt.packages.${pkgs.system}.default)
];
};
}
To use a specific version of the program, override the src
attribute:
{pkgs, tgt, ...}: {
environment = {
systemPackages = [
(tgt.packages.${pkgs.system}.default.overrideAttrs (old: {
src = pkgs.fetchFromGitHub {
owner = old.src.owner;
repo = old.src.repo;
rev = "00000000000000000000000000000000000000";
sha256 = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
};
cargoHash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
}))
];
};
}
Configuration
Note that tgt
is fully customizable. For more information about the configuration, please look at here.
Default keybindings:
None state:
esc: to the "None" state
alt+1 | alt+left: Focus on the chat list
alt+2 | alt+right: Focus on the chat
alt+3 | alt+down: Focus on the prompt
alt+h | alt+l: Resize the chat list
alt+j | alt+k: Resize the prompt
alt+n: Toggle chat list
q | ctrl+c: Quit
Chat List
up | down: Move selection
enter | right: Open the chat
left: Unselect chat
esc: Return to the "None" state
alt+1 | alt+left: Focus on the chat list
alt+2 | alt+right: Focus on the chat
alt+3 | alt+down: Focus on the prompt
Chat
up | down: Scroll the messages
left: Unselect message
y: Copy the message
e: Edit the message
r: Reply to the message
d: Delete the message for everyone
D: Delete the message for me
esc: Return to the "None" state
alt+1 | alt+left: Focus on the chat list
alt+2 | alt+right: Focus on the chat
alt+3 | alt+down: Focus on the prompt
Prompt
Note that when the prompt is focused, you can NOT use q
or ctrl+c
to quit the application, you need to press esc
to return to the "None" state.
alt+enter: Send the message
left | right | up | down: Move the cursor
ctrl+left | ctrl+b: Move the cursor to the previous word
ctrl+right | ctrl+f: Move the cursor to the next word
ctrl+alt+left | ctrl+a | home: Move the cursor to the beginning of the line (also ctrl+left+b | shift+super+left | shift+super+b)
ctrl+alt+right | ctrl+e | end: Move the cursor to the end of the line (also ctrl+right+f | shift+super+right | shift+super+f)
shift+left: Move the cursor left and select the text
shift+right: Move the cursor right and select the text
shift+up: Move the cursor up and select the text
shift+down: Move the cursor down and select the text
shift+ctrl+left: Select the text before the cursor
shift+ctrl+right: Select the text after the cursor
ctrl+c: Copy the selected text
ctrl+v: Paste the copied text
ctrl+w | ctrl+backspace | ctrl+h: Delete the word before the cursor
esc: Return to the "None" state
alt+1 | alt+left: Focus on the chat list
alt+2 | alt+right: Focus on the chat
alt+3 | alt+down: Focus on the prompt
Contributing
Contributions to this project are welcome! If you have any suggestions, improvements, or bug fixes, feel free to submit a pull request. For more information, do not hesitate to contact us (see the Contact section).
Build instructions
There are three ways to build tgt
:
- Using the
download-tdlib
feature of tdlib-rs you do not need to set any environment variable. Then you can compiletgt
usingcargo build --features download-tdlib
. - By default,
tgt
assumes that you have the tdlib built and theLOCAL_TDLIB_PATH
environment variable set to the path of thetdlib
directory. You can set the environment variable with the following command:export LOCAL_TDLIB_PATH="/path/to/tdlib"
. Then you can compiletgt
usingcargo build
orcargo build --feature default
. - You can use
pkg-config
to find the path of the library. In this case see the CONTRIBUTING.md file for more information. Then you can compiletgt
usingcargo build --features pkg-config
.
The CONTRIBUTING.md file contains information for building tgt
and the steps to configure the tdlib
in your local environment, starting from the compilation to the configuration of the environment variables.
Road Map
You can find the road map of the project here (in the pinned issues).
Commands
You can use just
, make
or cargo
, as build tools.
If you want to use cargo
, please make sure to read the Justfile
or the Makefile
to understand the flags used for each command.
Here are the available commands:
just COMMAND
make COMMAND
COMMAND:
all # Run fmt, clippy and test
build # Build the project
run # Run the project
test # Run the tests
clippy # Run clippy
fmt # Run rustfmt
clean # Clean the project
License
This repository are licensed under either of
-
Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
-
MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Please review the license file provided in the repository for more information regarding the terms and conditions of the license.
Contact
If you have any questions, suggestions, or feedback, do not hesitate to contact me.
Maintainers:
<!-- [docs-rs]: https://docs.rs/tgt --> <!-- [docs-rs-shield]: https://docs.rs/tgt/badge.svg --> <!-- [![Docs.rs][docs-rs-shield]][docs-rs] -->