Giter Club home page Giter Club logo

iamb's Introduction

Hi, I'm Ulyssa! ๐Ÿ‘‹

she/her pronouns US/Pacific timezone

I like making and contributing to open source software, especially in Rust, C, and JavaScript.

iamb's People

Contributors

aadityadhruv avatar alin742 avatar andrew-collins avatar backroom8816 avatar balejk avatar bbliem avatar benjajaja avatar benjamin-l avatar bsdlme avatar capgelka avatar chlohal avatar errornointernet avatar formindver avatar jahway603 avatar jarkkojs avatar jokeyrhyme avatar kladki avatar lugrim avatar mordquist avatar mpldr avatar octvs avatar paulcarroty avatar photosheep avatar pisquaredover6 avatar popey avatar rerum02 avatar reynoldsme avatar ulyssa avatar vodrazka avatar voidcontext avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

iamb's Issues

Release v0.0.3

This release will include:

The GitHub emoji shortcodes in the README don't render on crates.io, so I'm going to replace them with the codepoints they map to instead.

Enable bracketed paste

The crossterm crate supports reading bracketed paste commands from terminals that support it. This allows differentiating between newlines sent from pressing <Enter> and newlines that are part of pasted text. When iamb receives a bracketed paste, it should insert the text without interpreting it as typed characters, since that is most likely what the user wanted.

Note that this won't work everywhere: terminal multiplexers like screen will sometimes sanitize different escape sequences, so it will be up to users who want bracketed paste to ensure they're running in an environment where it will work.

Want a Matrix client that uses Vim keybindings

I want a Matrix client for the terminal that uses Vim keybindings for editing messages and managing windows. To start with, it should support the following:

  • Choosing between multiple accounts at startup
  • Listing rooms, direct messages, and spaces
  • E2E device verification using Emojis
  • Fetching message scrollback, and sending messages
  • Local echo of sent messages
  • Multiline messages
  • Highlight usernames to help distinguish senders

I have written the modalkit crate to help with supporting Vim's keybindings. A lot of editing features are supported, but there are still several things remaining that iamb will need or probably want:

Open attachments

Either a parameter to :download, e.g. :download open, or a new command :open that downloads and opens. "Opening" could default to xdg-open <downloaded-file-path> or even better have a config setting.
@ulyssa wdyt?

(I am experimenting with a new command).

Support replying to messages

Users should be able to select a message and then reply to it by running a :reply command. The message bar should make it clear which message is being replied to.

Show events that couldn't be decrypted

When an event can't be decrypted by the SDK, it's left as an AnyMessageLikeEvent::RoomEncrypted. This should be inserted into the timeline so that users can see that there was a message, and that the room keys haven't been sent to the client from other devices to decrypt them.

Support adding new aliases to a room

Rooms can be given an alias when created via :create ++alias=localpart, but there's not a way to add them to existing rooms, or to modify which alias is the canonical alias.

Support searching all joined rooms

I've added support for searching through messages loaded within a room's scrollback, but it should also be possible to perform a search across multiple rooms when trying to find a message whose context you can't recall. Matrix supports server-side search (spec), but this doesn't work for encrypted messages. The client should search through encrypted rooms itself, and use server-side search to find content in non-encrypted rooms.

Support sending and displaying typing notifications

When a user is typing into the message bar for a room, the client should send a typing notification to the homeserver. Typing notifications for other users should also be displayed somewhere. It should be possible to disable both sending and displaying notifications in the configuration file.

Fix empty message check when sending

When submitting a message, the message contents are checked with String::is_empty, which will always be false since the text box always contains a terminating newline. It should use EditRope::is_blank to see whether the message is all whitespace instead.

Support sending and displaying read markers

Matrix supports displaying where users have read up to. The client should display this in some way, and support indicating where the user has read up to. Like with #9 , it should be possible for the user to disable this in the configuration file.

Avoid breaking up words during wrapping when possible

The code for wrapping the body of message contents could be improved to avoid breaking up words and instead place them wholesale on the next line. Words that are longer than the current width will still need to be broken up, though.

Support highlighting mentions and watched keywords

When the user is mentioned in a message, it should be highlighted. It should also be possible to configure keywords that the user wants highlighted, on both a global and per-profile level. Notifications should all be viewable somewhere, in a way where the user can jump to them.

Update CI workflow to reduce warnings

There's a bunch of warnings output from the CI workflow related to node.js v12 being deprecated in GitHub actions. Not all of the actions have newer versions, but I should be able to reduce some of the warnings by upgrading what does have newer releases.

Support sending and accepting room invitations

When viewing a room, it should be possible to run a command like :invite @user:example.com to send an invitation to the room. Rooms that the user has been invited to should also show up in the room list, and there should be a way to accept the invitation.

Support displaying and editing room descriptions

Many Matrix rooms have useful descriptions, and these should be shown in the client. It should also be possible, if the user has a sufficient power level in the room, to change the room description.

Support creating new rooms and spaces

There should be a command for creating new rooms and spaces on the homeserver given an alias. I'm thinking something along the lines of:

  • :room create private [#alias:server.tld] to create a private room
  • :room create public [#alias:server.tld] to create a public room
  • :space create private [#alias:server.tld] to create a private space
  • :space create public [#alias:server.tld] to create a public space

There should probably also be a way to manage spaces and add rooms and other spaces to them.

Links should be "openable"

Most links are longer than the chat-message-grid-column, and thus are broken up into the next line. Then, they cannot be opened by clicking (most modern terminals have such a feature), nor can they be selected easily for copying and pasting.

If a message has no attachments and :open is used, then do a simple match for ^http(s)?://.+ or something like that, and pass a match to the open crate, it should open the browser.

Login fails with cryptic error

Attempting to log into my homeserver pintobyte.com, I get the following:

Matrix client error: the server returned an error: EOF while parsing a value at line 1 column 0

I can see that I successfully logged in (I have a new device ID and access token), but something seems to be breaking on sync. The only hint I have is in my nginx error log:

2023/03/10 16:40:31 [error] 159392#159392: *578750 upstream prematurely closed connection while reading upstream, client: 50.5.223.102, server: pintobyte.com, request: "GET /_matrix/media/r0/thumbnail/zettaport.com/hwueimVHAqYtQGQYQAuiwXaH?width=28&height=28&method=crop HTTP/1.1", upstream: "http://127.0.0.1:8008/_matrix/media/r0/thumbnail/zettaport.com/hwueimVHAqYtQGQYQAuiwXaH?width=28&height=28&method=crop", host: "pintobyte.com:8448"

Support displaying and editing room tags

Matrix supports tagging rooms (spec), which are then visible only to the user and shared across devices. I'm pretty sure that this is what Element uses for displaying Favorites. The client should support this in some way so that it can also display favorite rooms, and sort them to the top of :rooms and :dms.

Open room from last session after login

Store currently opened room/chat in config_dir/profiles//session.json or similar.
On startup, join the last opened room/chat from the relevant session.json.
Alternatively, configure a default_room in the config.json profiles section.

I would like to try to implement this.

Fetch scrollback history independently of main loop

Fetching scrollback history can sometimes take a long time for newly joined rooms, especially some of those on the matrix.org homeserver. This causes the main loop to hang, and prevents the user from being able to navigate away from the room to avoid triggering successive fetches. iamb should use tokio::spawn to do this independently of the main loop, and avoid holding onto the store while doing so.

Show current date and local time for messages

Messages are currently shown with the UTC timestamp next to them, but the date the message was sent isn't shown. iamb should show the date whenever it changes, and the timestamp should be shown in the system's local time to avoid confusion.

Support sending and displaying message reactions

Matrix supports reacting to messages with Emojis. There should be a way to select a message and then react to it with an Emoji. This should probably allow using and searching through the alphanumeric names of the Emojis, in the same way that Element does.

Support configuring client request timeout

The current HTTP request timeout is 60 seconds, which is too short for syncing some accounts. I'm going to add a new request_timeout configuration option, and change the default timeout to 120 seconds. This will allow people whose accounts have large initial sync payloads to adjust it further as needed.

Support configuring a user's color and name

It should be possible to override the way that a user identifier is displayed so that it's possible to override the color or name when two user's are assigned similar colors or have similar user IDs. I'm also going to make it so that the user identifier is only shown for the first message in a sequence of messages from the same user.

Link to iamb space in README

I made a Matrix space for iamb-related rooms a while back. It should have a badge in the README. I'll add it to the site, too.

Release v0.0.2

This will be the initial release of the client. There's still a lot left to do, but this will at least allow anyone who wants to try it out to install it from crates.io.

This release will include:

Support editing messages

Once a message has been sent and appears in the scrollback, a user should be able to select it, run :edit, and then edit the message in the message bar. It should be possible to cancel editing.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.