Skip to content

Latest commit

Β 

History

History
2733 lines (2536 loc) Β· 278 KB

CHANGELOG.md

File metadata and controls

2733 lines (2536 loc) Β· 278 KB

βš™οΈ [v2.0.0-beta.1]

2025-01-02

build

chore

ci

docs

feat

  • activity: add additional fields (view commit)
  • add :Cord restart (view commit)
  • add json:Error & msgpack:Error (view commit)
  • add new function to Packet struct (view commit)
  • add notes field (view commit)
  • add TryFrom impl to AssetType (view commit)
  • add vim.g.cord_is_updating to avoid multiple simultaneous updates (view commit)
  • add a logger struct (view commit)
  • add a macro that simplifies field deserialization (view commit)
  • add cleanup logic (view commit)
  • add explicit rich presence clearing; can be completely hidden with force = true (view commit)
  • add message deserialization logic (view commit)
  • add message handler struct (view commit)
  • add program entry point (view commit)
  • add proper serialization for LogEvent (view commit)
  • add server-scoped InitializeEvent (view commit)
  • add the Cord struct which is used as the entry point (view commit)
  • add unix implementation of the IPC server (view commit)
  • add usercommands (view commit)
  • add utility functions for building and fetching the executable (view commit)
  • add windows implementation of the IPC server (view commit)
  • allow parsing client_id from client name (view commit)
  • allow the user to skip updates (view commit)
  • allow users to set a custom activity (view commit)
  • always fetch the executable if it's not present (view commit)
  • always perform the file exists check first (view commit)
  • async: implement Future wrappers for commonly used uv functions (view commit)
  • async: implement the concept of futures and handle async operations via coroutines (view commit)
  • capture build errors (view commit)
  • cli: add --version argument (view commit)
  • cli: implement argument parsing (view commit)
  • config: add advanced.server.build (view commit)
  • config: add advanced.variables_in_functions (view commit)
  • config: add idle.unidle_on_focus (view commit)
  • config: add on_activity hook (view commit)
  • config: add on_disconnect hook (view commit)
  • config: add support for string templates using the new variables option (view commit)
  • config: allow users to choose between different icon styles (view commit)
  • config: custom assets' options now support function types (view commit)
  • config: introduce idle.smart_idle option which lets general activities take precedence over the idle ones (view commit)
  • create Config struct to store internal configuration and refine timeout logic (view commit)
  • create a separate module for icon-related stuff (view commit)
  • display the most recent activity in case a client disconnects; clear the status if none are connected (view commit)
  • events: add client event implementations (view commit)
  • events: add server events (view commit)
  • events: handle client connection (view commit)
  • events: notify the client about errors on their side (view commit)
  • handle automatically moving the server executable to nvim's data directory (view commit)
  • handle the activity type (view commit)
  • icon: expose locals (view commit)
  • implement Default for Overlapped struct (view commit)
  • implement OnEvent trait for all events (view commit)
  • implement a wrapper around curl (view commit)
  • implement caching for workspace and repository entries (view commit)
  • implement custom error type (view commit)
  • implement iterations - a maximum amount of time the server can idle without active connections (view commit)
  • implement reconnection mechanism for Discord (view commit)
  • implement sessions and session manager (view commit)
  • improve cleanup logic (view commit)
  • introduce PresenceContext struct which will be used to build the rich presence (view commit)
  • introduce message communication system (view commit)
  • ipc: continuously read data from Discord pipe to detect sudden disconnects (view commit)
  • ipc: use full pipe path (view commit)
  • json: add robust error handling (view commit)
  • lockfile: implement file locking mechanism (view commit)
  • logger: handle cases in lua callbacks (view commit)
  • lua: automatically start the server (view commit)
  • lua: call on_workspace_change hook if a workspace change is detected (view commit)
  • lua: initial implementation of the Lua codebase (view commit)
  • lua: switch to event-driven architecture (view commit)
  • make server error messages clean (view commit)
  • manager: expose more functions for interacting with rich presence and its manager (view commit)
  • mappings: add cuda filetype (view commit)
  • mappings: add icon for odin (view commit)
  • mappings: add missing filetypes (view commit)
  • mappings: add support for dashboard plugins (view commit)
  • mappings: add support for docs (view commit)
  • modularize the event system and add helper macros for creating messages (view commit)
  • msgpack: add msgpack deserialization (view commit)
  • msgpack: add msgpack serialization (view commit)
  • msgpack: add support for STR8 header (view commit)
  • msgpack: allow serialization of Map values (view commit)
  • msgpack: support owned strings (view commit)
  • notify client when the workspace is found in the blacklist (view commit)
  • notify the client when server is ready to accept connections (view commit)
  • notify the clients about the server shutdown (view commit)
  • prepend the messages with a length header in case they get merged (view commit)
  • prioritize general activities over the idle activity (view commit)
  • producer: allow sending a shutdown request (view commit)
  • provide clear error message for when the connection to Discord IPC fails (view commit)
  • provide clearer server error messages (view commit)
  • provide more data when logging the error (view commit)
  • server: add local ShutdownEvent (view commit)
  • server: improve error handling & error messages (view commit)
  • server: notify the client whether the provided client id is incorrect (view commit)
  • set style-specific default idle icons (view commit)
  • specify MSRV (view commit)
  • specify plugin version (view commit)
  • stop any updates when connection is lost (view commit)
  • store os name and architecture (view commit)
  • switch to next available activity on clear_activity event (view commit)
  • tie each client to a session (view commit)
  • trim stderr messages (view commit)
  • update sessions' last updated time (view commit)
  • use newly added mapping types (view commit)
  • usercmds: add :Cord status (view commit)
  • usercmds: add :Cord update (view commit)
  • util: add additional file-related utility functions (view commit)
  • validate and set editor_image upon initialization (view commit)

fix

  • IPC:is_closing should return true if the pipe does not exist (view commit)
  • should_skip_update should be checked right before the update (view commit)
  • actually update the editor image (view commit)
  • allow sending same activity updates (view commit)
  • an attempt to fix intermittent ui freezes (view commit)
  • async: avoid including debug info on regular errors and fix error propagation (view commit)
  • automatically retry connection on ECONNREFUSED & ETIMEDOUT (view commit)
  • avoid joining the handles (view commit)
  • change cfg-if attribute (view commit)
  • close uv handles before exiting (view commit)
  • config: correctly handle custom client ids (view commit)
  • config: correctly replace config values (view commit)
  • config: do not override the given editor icon (view commit)
  • correct the logic responsible for falling back to defaults (view commit)
  • correctly handle curl's stdout (view commit)
  • correctly serialize activity timestamps (view commit)
  • correctly serialize rich presence packet (view commit)
  • correctly set workspace_dir & workspace_name (view commit)
  • do not queue activity updates upon losing focus (view commit)
  • fallback to default activity type if not provided (view commit)
  • idle timeout check (view commit)
  • implement event queuing for handling events registered after the handler is run (view commit)
  • imports (view commit)
  • include vim.log.levels.OFF when parsing the log level (view commit)
  • ipc: cleanup the stale pipe if the server process was forcefully terminated (view commit)
  • ipc: handle client disconnection on ErrorKind::BrokenPipe (view commit)
  • ipc: properly cleanup on exit (view commit)
  • let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously (view commit)
  • log: correctly write to the client pipe (view commit)
  • mappings: ensure that the tooltips have a minimum length of 2 (view commit)
  • mappings: set plugin managers' default icon to plugin (view commit)
  • normalize path before workspace lookup (view commit)
  • perform a nil check for usercmds interacting with the activity manager (view commit)
  • properly handle chunked data (view commit)
  • properly handle server shutdowns (view commit)
  • replace method definition with a function definition (view commit)
  • resolve autocmds errors (view commit)
  • resolve event serialization issues (view commit)
  • resolve idle timeout related issues (view commit)
  • resolve workspace issues; handle missing hooks (view commit)
  • return if config validation fails (view commit)
  • schedule cleanup logic if necessary (view commit)
  • schedule the callbacks to maintain compatibility with Neovim 0.6.0 (view commit)
  • server: fix logging level comparison (view commit)
  • server: use panic-free means to write to stdout (view commit)
  • sessions: retrieve the correct session based on id instead of always returning the first available (view commit)
  • set executable permissions on unix systems (view commit)
  • spawn: use an absolute path for server executable's fallback path (view commit)
  • stop the plugin on server errors (view commit)
  • update last_activity only if an actual update occurred (view commit)
  • update server's status to ready on receiving the ready event (view commit)
  • use cord --version to determine the current version of the executable and whether an update is required (view commit)
  • windows: properly handle overlapped I/O (view commit)
  • windows: use overlapped io for named pipes to avoid deadlocks (view commit)

perf

refactor

style

BREAKING CHANGE

  • none

βš™οΈ [v2.0.0-beta.1]

2025-01-02

build

chore

ci

docs

feat

  • activity: add additional fields (#ffec9cd)
  • add :Cord restart (#ff7b7cf)
  • add json:Error & msgpack:Error (#0f33af2)
  • add new function to Packet struct (#fd4b201)
  • add notes field (#304d171)
  • add TryFrom impl to AssetType (#ca4d5d8)
  • add vim.g.cord_is_updating to avoid multiple simultaneous updates (#166be04)
  • add a logger struct (#d3f4fa0)
  • add a macro that simplifies field deserialization (#ada22e6)
  • add cleanup logic (#df96059)
  • add explicit rich presence clearing; can be completely hidden with force = true (#8e99c03)
  • add message deserialization logic (#3f7fea2)
  • add message handler struct (#e93d9c8)
  • add program entry point (#f0e8727)
  • add proper serialization for LogEvent (#340c504)
  • add server-scoped InitializeEvent (#5097ceb)
  • add the Cord struct which is used as the entry point (#c2f67c0)
  • add unix implementation of the IPC server (#cdc4245)
  • add usercommands (#8582099)
  • add utility functions for building and fetching the executable (#b77455b)
  • add windows implementation of the IPC server (#04192c5)
  • allow parsing client_id from client name (#3e7f1b3)
  • allow the user to skip updates (#381542d)
  • allow users to set a custom activity (#e9d388c)
  • always fetch the executable if it's not present (#7a18740)
  • always perform the file exists check first (#d94b5b8)
  • async: implement Future wrappers for commonly used uv functions (#62b133c)
  • async: implement the concept of futures and handle async operations via coroutines (#8638d30)
  • capture build errors (#64b1103)
  • cli: add --version argument (#1799242)
  • cli: implement argument parsing (#b3051db)
  • config: add advanced.server.build (#bf27f76)
  • config: add advanced.variables_in_functions (#6aae137)
  • config: add idle.unidle_on_focus (#f4e8c93)
  • config: add on_activity hook (#2695288)
  • config: add on_disconnect hook (#299882d)
  • config: add support for string templates using the new variables option (#d5ec225)
  • config: allow users to choose between different icon styles (#3fef850)
  • config: custom assets' options now support function types (#2a5122c)
  • config: introduce idle.smart_idle option which lets general activities take precedence over the idle ones (#99e9e93)
  • create Config struct to store internal configuration and refine timeout logic (#d5c179c)
  • create a separate module for icon-related stuff (#8b83610)
  • display the most recent activity in case a client disconnects; clear the status if none are connected (#eedc94a)
  • events: add client event implementations (#fcda103)
  • events: add server events (#52061da)
  • events: handle client connection (#2e7d5d4)
  • events: notify the client about errors on their side (#db9a2ef)
  • handle automatically moving the server executable to nvim's data directory (#ae0fb6f)
  • handle the activity type (#0bfa07c)
  • icon: expose locals (#15e83b3)
  • implement Default for Overlapped struct (#83d9c4e)
  • implement OnEvent trait for all events (#1675342)
  • implement a wrapper around curl (#4bb65b4)
  • implement caching for workspace and repository entries (#1dc2def)
  • implement custom error type (#ff80157)
  • implement iterations - a maximum amount of time the server can idle without active connections (#b6e8955)
  • implement reconnection mechanism for Discord (#90ba49a)
  • implement sessions and session manager (#312b924)
  • improve cleanup logic (#1b9be0c)
  • introduce PresenceContext struct which will be used to build the rich presence (#59ec145)
  • introduce message communication system (#19ab5c6)
  • ipc: continuously read data from Discord pipe to detect sudden disconnects (#807291f)
  • ipc: use full pipe path (#55ca5ab)
  • json: add robust error handling (#a6697da)
  • lockfile: implement file locking mechanism (#dd8fe2c)
  • logger: handle cases in lua callbacks (#c3ccb35)
  • lua: automatically start the server (#0364cfb)
  • lua: call on_workspace_change hook if a workspace change is detected (#33abe5a)
  • lua: initial implementation of the Lua codebase (#6f72e92)
  • lua: switch to event-driven architecture (#e65f015)
  • make server error messages clean (#c097bd8)
  • manager: expose more functions for interacting with rich presence and its manager (#c34dea1)
  • mappings: add cuda filetype (#9fdd31e)
  • mappings: add icon for odin (#0df0a45)
  • mappings: add missing filetypes (#dbfb1ad)
  • mappings: add support for dashboard plugins (#cd04a8c)
  • mappings: add support for docs (#cfe563f)
  • modularize the event system and add helper macros for creating messages (#f302fa1)
  • msgpack: add msgpack deserialization (#eb2e10d)
  • msgpack: add msgpack serialization (#1f7c2a6)
  • msgpack: add support for STR8 header (#cd634ea)
  • msgpack: allow serialization of Map values (#9dc26b4)
  • msgpack: support owned strings (#0679c31)
  • notify client when the workspace is found in the blacklist (#ae660bd)
  • notify the client when server is ready to accept connections (#b27d763)
  • notify the clients about the server shutdown (#e987ba0)
  • prepend the messages with a length header in case they get merged (#264fde3)
  • prioritize general activities over the idle activity (#b4a837c)
  • producer: allow sending a shutdown request (#354e2a6)
  • provide clear error message for when the connection to Discord IPC fails (#4828894)
  • provide clearer server error messages (#34bfe12)
  • provide more data when logging the error (#22e9ed8)
  • server: add local ShutdownEvent (#3f55760)
  • server: improve error handling & error messages (#9aea257)
  • server: notify the client whether the provided client id is incorrect (#edc9f5a)
  • set style-specific default idle icons (#c17ad89)
  • specify MSRV (#1b520ca)
  • specify plugin version (#cd8142f)
  • stop any updates when connection is lost (#dd1dd43)
  • store os name and architecture (#3f663db)
  • switch to next available activity on clear_activity event (#f05f126)
  • tie each client to a session (#edd2141)
  • trim stderr messages (#4ec5de9)
  • update sessions' last updated time (#9968d94)
  • use newly added mapping types (#015f7ed)
  • usercmds: add :Cord status (#47c3d6a)
  • usercmds: add :Cord update (#eba53d9)
  • util: add additional file-related utility functions (#36d5031)
  • validate and set editor_image upon initialization (#d56416a)

fix

  • IPC:is_closing should return true if the pipe does not exist (#29170fd)
  • should_skip_update should be checked right before the update (#93636dd)
  • actually update the editor image (#b1e5deb)
  • allow sending same activity updates (#1883ba4)
  • an attempt to fix intermittent ui freezes (#e53bf20)
  • async: avoid including debug info on regular errors and fix error propagation (#618ce39)
  • automatically retry connection on ECONNREFUSED & ETIMEDOUT (#55452b3)
  • avoid joining the handles (#3d478f1)
  • change cfg-if attribute (#76ecb5c)
  • close uv handles before exiting (#1bd6bb9)
  • config: correctly handle custom client ids (#a4719a2)
  • config: correctly replace config values (#17dd6f3)
  • config: do not override the given editor icon (#25d31ba)
  • correct the logic responsible for falling back to defaults (#b784a74)
  • correctly handle curl's stdout (#5b44dff)
  • correctly serialize activity timestamps (#6362a2c)
  • correctly serialize rich presence packet (#3e894ee)
  • correctly set workspace_dir & workspace_name (#a56a856)
  • do not queue activity updates upon losing focus (#0b8d609)
  • fallback to default activity type if not provided (#bebea1f)
  • idle timeout check (#2e3e961)
  • implement event queuing for handling events registered after the handler is run (#46b8de4)
  • imports (#9e8819e)
  • include vim.log.levels.OFF when parsing the log level (#cc9ba64)
  • ipc: cleanup the stale pipe if the server process was forcefully terminated (#a77e86c)
  • ipc: handle client disconnection on ErrorKind::BrokenPipe (#a315118)
  • ipc: properly cleanup on exit (#0d5c61b)
  • let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously (#44acc10)
  • log: correctly write to the client pipe (#710b83e)
  • mappings: ensure that the tooltips have a minimum length of 2 (#e9368fa)
  • mappings: set plugin managers' default icon to plugin (#a2be431)
  • normalize path before workspace lookup (#c919c94)
  • perform a nil check for usercmds interacting with the activity manager (#8427bed)
  • properly handle chunked data (#0b8c655)
  • properly handle server shutdowns (#281a93b)
  • replace method definition with a function definition (#8d6bcf9)
  • resolve autocmds errors (#02340b1)
  • resolve event serialization issues (#7ec693e)
  • resolve idle timeout related issues (#21d9a50)
  • resolve workspace issues; handle missing hooks (#4cff958)
  • return if config validation fails (#503371d)
  • schedule cleanup logic if necessary (#9aa6578)
  • schedule the callbacks to maintain compatibility with Neovim 0.6.0 (#35428c0)
  • server: fix logging level comparison (#86f2a70)
  • server: use panic-free means to write to stdout (#23ba754)
  • sessions: retrieve the correct session based on id instead of always returning the first available (#6493da4)
  • set executable permissions on unix systems (#541a563)
  • spawn: use an absolute path for server executable's fallback path (#0ac391a)
  • stop the plugin on server errors (#20d0a48)
  • update last_activity only if an actual update occurred (#1dd0e20)
  • update server's status to ready on receiving the ready event (#8e57129)
  • use cord --version to determine the current version of the executable and whether an update is required (#5c31319)
  • windows: properly handle overlapped I/O (#296e4f4)
  • windows: use overlapped io for named pipes to avoid deadlocks (#2f73ce8)

perf

  • avoid unnecessary lookups (#a4bccf4)
  • avoid unnecessary lookups (#b586eec)
  • fs: switch to async filesystem ops (#961ec2c)
  • handle logic responsible for broadcasting the ready event more efficiently (#a5c8ca3)
  • json: optimize deserialization logic (#02c233f)
  • json: optimize serialization logic and generalize the serializer (#3e7ab98)
  • lua: lazy load some modules (#0f1ebaa)
  • lua: lazily load other modules (#6313f45)
  • mappings: significant performance improvements (#8ea0ad8)
  • remove unnecessary atomics (#85499cf)

refactor

  • AssetType: rename Lsp to LspManager, allow parsing from a string slice (#025092d)
  • Config::buttons should be optional (#363fbee)
  • Packet should not own the Activity (#ca936f8)
  • activity manager: pause() and resume() should check is_paused (#d884b1d)
  • add more logging (#2e78f24)
  • add new message types, rename ServerMessage to LocalMessage, resolve lifetime issues (#9a7d0c6)
  • apply clippy suggestions (#071da49)
  • call on_ready after initializing the activity manager (#378ade3)
  • change 'Connecting' log level to DEBUG (#f0749be)
  • change Deserialize::deserialize to return crate::Result (#28e93f0)
  • change killall -9 -> pkill -15 (#f993173)
  • change validate_buttons function to accept a mutable reference (#29938ed)
  • change error messages (#694fb96)
  • change the return type of OnEvent::on_event to crate::Result<()> (#54f69dc)
  • cli: add a new error type for cli-related errors (#4962a5f)
  • codebase: ensure proper asynchronous flow and reorganize codebase (#9f205ac)
  • config: change default text values (#15a8f58)
  • config: change default values (#3822787)
  • config: remove lsp (#178631a)
  • config: rename advanced.server.build to update (#8f723a5)
  • config: rename enable -> enabled (#849f7a9)
  • config: set cursor_update_mode to 'on_hold' by default (#6b320e9)
  • config: set log_level to INFO by default (#96e9bab)
  • constants: change assets url to the new repo; reset assets version (#a61520e)
  • core: simplify Rust backend by removing internal details (#266b824)
  • correct require path (#6f6899a)
  • error: change CordError type definition; add missing error types (#cf1990d)
  • error: include error kind when converting the error to string (#ecfd967)
  • events: update event implementations (#baaa8fa)
  • events: use the client DisconnectEvent instead of the local ClientDisconnectedEvent (#6535683)
  • fallback to vim.uv (#4d7604d)
  • fallback to os-specific executable path (#19d2ef9)
  • fix error message (#7ae5966)
  • force constructor initialization (#cb81ac9)
  • handle shutdowns directly (#4e9748c)
  • handle the process handle (#edf1a1b)
  • have the session store last_activity (#ca34808)
  • implicitly return result in main function (#e9667f2)
  • improve the way updates are skipped; expose a function in the manager class (#7032c0d)
  • ipc: remove on_error calls (#5f3fcfe)
  • ipc: remove unnecessary scheduling (#3271a52)
  • ipc: use full pipe path (#8090ddf)
  • json: rename value structs and move them to their own file (#542f2f8)
  • make EventContext mutable (#53bae42)
  • manager: force an update upon gaining focus (#4e5778f)
  • mappings: provide a constant value for default icons (#5a93c08)
  • minor changes (#f8b7e0b)
  • move args.rs to its own module (#26575ef)
  • move AssetType to util (#cf9605a)
  • move types.rs to its own module (#aa09011)
  • move autocmd for cleaning up to plugin/cord.vim (#d57d2fc)
  • move Discord IPC logic to a separate module (#5915844)
  • move IPC messages to their own module (#3a70ea6)
  • move usercmds to cord.vim (#ca7bb9d)
  • msgpack: make deseralize accept already deserialized Value (#4051fa2)
  • override opts.filename if it's empty (#5e5dee3)
  • provide debug error messages (#64a6489)
  • reduce code verbosity by using macros (#bee4aa0)
  • reflect codebase changes (#4b03eb2)
  • remove constants.VERSION (#2d43373)
  • remove excessive debug logging (#414b4b2)
  • remove lib.rs (#e01274e)
  • remove redundant functions (#bc814da)
  • remove server-scoped ShutdownEvent (#96f3478)
  • remove unnecessary events (#e4522d6)
  • rename Config to PluginConfig (#e7d3795)
  • rename ResetTimestampEvent -> SetTimestampEvent (#f280750)
  • rename rpc to activity (#09ed1af)
  • rename style -> theme (#b9a7b7e)
  • rename swap_images -> swap_icons (#c40b7ca)
  • rename take_str -> take_string (#c5b0a22)
  • rename directory to presence (#71034b2)
  • replace SessionManager::new with Default derive (#a0587fd)
  • rewrite the codebase to use msgpack instead of json (#f2228cf)
  • separate process spawning logic (#b0d46bd)
  • serialization: move [de]serializers to their own common module; introduce a common error type (#92102e6)
  • set opts.skip_update back to false after skipping an activity update (#fe78f7a)
  • set executable directory to nvim-data/cord/bin (#4e69b5b)
  • split PluginConfig into structs with relevant fields (#3e10a9a)
  • store relevant types and constants in a separate file (#05eb4f4)
  • tweak events (#9dfa106)
  • unconditionally fetch and store the git url (#a786053)
  • update event context to include reference to Cord itself (#30995c6)
  • update log message (#e2d16d2)
  • update serialization logic (#c17fa3e)
  • use crate::Result type (#8cf2bc2)
  • use Packet::empty() (#d4ff8fa)
  • use Cargo to build the server executable (#233b18b)
  • use os-specific defaults (#c5b9e03)
  • usercmds: do not include stack traceback when logging on unknown command (#46164b4)
  • wrap editor_image in Option type (#a59eb25)

style

BREAKING CHANGE

  • none

βš™οΈ [v2.0.0-beta.1]

2025-01-02

build

  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • enable incremental compilation ()
  • prepare for publishing ()
  • set project version to 2.0.0-beta.1 ()
  • specify msrv ()

chore

  • add rustfmt.toml ()
  • add derives and reformat code ()
  • add relevant mods ()
  • assets: delete the assets directory ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • change semantic release config ()
  • code cleanup ()
  • delete redundant file status.rs ()
  • event: remove redundant implementations ()
  • fix clippy warnings ()
  • fix typo ()
  • fix warnings ()
  • fix warnings ()
  • ignore clippy warning ()
  • lua: fix warnings ()
  • prepare for publishing ()
  • release: 1.0.0-beta.1 [skip ci] (), closes #53 #80
  • release: 2.0.0-beta.1 [skip ci] (), closes #147 #152 #155 #53 #80 #147 #152 #155 #53 #80 #147 #152 #155 #53 #80 #147 #152 #155 #53 #80
  • release: 2.0.0-beta.1 [skip ci] (), closes #147 #152 #155 #53 #80 #147 #152 #155 #53 #80
  • release: 2.0.0-beta.1 [skip ci] (), closes #147 #152 #155 #53 #80
  • release: 2.0.0-beta.1 [skip ci] ()
  • release: 2.0.0-beta.2 [skip ci] ()
  • remove changelog ()
  • remove changelog ()
  • remove debug statement ()
  • remove redundant code ()
  • remove redundant file ()
  • remove unnecessary explicit lifetimes ()
  • remove unnecessary statement ()
  • remove unused imports ()
  • remove unused variable ()
  • resolve merge conflicts ()
  • set previous release in .releaserc.json ()
  • temporarily comment out code ()
  • update .gitignore ()
  • update .luacheckrc ()
  • update .luacheckrc ()
  • update .luacheckrc ()
  • update .releaserc.json ()
  • update util/mod.rs ()
  • update releaserc ()
  • update semantic release ()
  • update semantic release ()
  • update semantic release ()

ci

  • add freebsd target ()
  • create release.yml ()
  • integrate semantic release ()
  • prepare for publishing to luarocks ()
  • update release.yml ()
  • update release.yml ()
  • update release workflow ()
  • update release workflow ()
  • update release workflow ()
  • update release.yml ()
  • update semantic release ()

docs

  • add configuration examples ()
  • configration: add missing backticks ()
  • configuration: add default config values ()
  • configuration: center activity options ()
  • create a configuration guide ()
  • create a migration guide ()
  • document string templating ()
  • lua: document exposed interfaces ()
  • migration: fix text highlighting ()
  • prefer :Cord update over :Cord fetch ()
  • readme: add badge icons ()
  • readme: add cord's logo ()
  • readme: add installation step for rocks.nvim ()
  • readme: include a link for cord's brand new discord server ()
  • readme: rewrite README ()
  • readme: update README ()
  • readme: update README ()
  • readme: update README ()
  • readme: update README ()
  • rust: document crucial parts of the codebase ()
  • templates: remove the icon request issue template ()
  • update configuration guide ()
  • update configuration guide ()
  • update configuration guide ()
  • update documentation ()
  • update examples ()
  • update examples ()
  • update examples ()
  • update migration guide ()
  • update migration guide ()
  • update migration guide ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the examples ()
  • update the examples ()
  • update the examples ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()

feat

  • activity: add additional fields ()
  • add :Cord restart ()
  • add json:Error & msgpack:Error ()
  • add new function to Packet struct ()
  • add notes field ()
  • add TryFrom impl to AssetType ()
  • add vim.g.cord_is_updating to avoid multiple simultaneous updates ()
  • add a logger struct ()
  • add a macro that simplifies field deserialization ()
  • add cleanup logic ()
  • add explicit rich presence clearing; can be completely hidden with force = true ()
  • add message deserialization logic ()
  • add message handler struct ()
  • add program entry point ()
  • add proper serialization for LogEvent ()
  • add server-scoped InitializeEvent ()
  • add the Cord struct which is used as the entry point ()
  • add unix implementation of the IPC server ()
  • add usercommands ()
  • add utility functions for building and fetching the executable ()
  • add windows implementation of the IPC server ()
  • allow parsing client_id from client name ()
  • allow the user to skip updates ()
  • allow users to set a custom activity ()
  • always fetch the executable if it's not present ()
  • always perform the file exists check first ()
  • async: implement Future wrappers for commonly used uv functions ()
  • async: implement the concept of futures and handle async operations via coroutines ()
  • capture build errors ()
  • cli: add --version argument ()
  • cli: implement argument parsing ()
  • config: add advanced.server.build ()
  • config: add advanced.variables_in_functions ()
  • config: add idle.unidle_on_focus ()
  • config: add on_activity hook ()
  • config: add on_disconnect hook ()
  • config: add support for string templates using the new variables option ()
  • config: allow users to choose between different icon styles ()
  • config: introduce idle.smart_idle option which lets general activities take precedence over the idle ones ()
  • create Config struct to store internal configuration and refine timeout logic ()
  • create a separate module for icon-related stuff ()
  • display the most recent activity in case a client disconnects; clear the status if none are connected ()
  • events: add client event implementations ()
  • events: add server events ()
  • events: handle client connection ()
  • events: notify the client about errors on their side ()
  • handle automatically moving the server executable to nvim's data directory ()
  • handle the activity type ()
  • icon: expose locals ()
  • implement Default for Overlapped struct ()
  • implement OnEvent trait for all events ()
  • implement a wrapper around curl ()
  • implement caching for workspace and repository entries ()
  • implement custom error type ()
  • implement iterations - a maximum amount of time the server can idle without active connections ()
  • implement reconnection mechanism for Discord ()
  • implement sessions and session manager ()
  • improve cleanup logic ()
  • introduce PresenceContext struct which will be used to build the rich presence ()
  • introduce message communication system ()
  • ipc: continuously read data from Discord pipe to detect sudden disconnects ()
  • ipc: use full pipe path ()
  • json: add robust error handling ()
  • lockfile: implement file locking mechanism ()
  • logger: handle cases in lua callbacks ()
  • lua: automatically start the server ()
  • lua: call on_workspace_change hook if a workspace change is detected ()
  • lua: initial implementation of the Lua codebase ()
  • lua: switch to event-driven architecture ()
  • make server error messages clean ()
  • manager: expose more functions for interacting with rich presence and its manager ()
  • mappings: add cuda filetype ()
  • mappings: add icon for odin ()
  • mappings: add missing filetypes ()
  • mappings: add support for dashboard plugins ()
  • mappings: add support for docs ()
  • modularize the event system and add helper macros for creating messages ()
  • msgpack: add msgpack deserialization ()
  • msgpack: add msgpack serialization ()
  • msgpack: add support for STR8 header ()
  • msgpack: allow serialization of Map values ()
  • msgpack: support owned strings ()
  • notify client when the workspace is found in the blacklist ()
  • notify the client when server is ready to accept connections ()
  • notify the clients about the server shutdown ()
  • prepend the messages with a length header in case they get merged ()
  • prioritize general activities over the idle activity ()
  • producer: allow sending a shutdown request ()
  • provide clear error message for when the connection to Discord IPC fails ()
  • provide clearer server error messages ()
  • provide more data when logging the error ()
  • server: add local ShutdownEvent ()
  • server: improve error handling & error messages ()
  • server: notify the client whether the provided client id is incorrect ()
  • set style-specific default idle icons ()
  • specify MSRV ()
  • specify plugin version ()
  • stop any updates when connection is lost ()
  • store os name and architecture ()
  • switch to next available activity on clear_activity event ()
  • tie each client to a session ()
  • trim stderr messages ()
  • update sessions' last updated time ()
  • use newly added mapping types ()
  • usercmds: add :Cord status ()
  • usercmds: add :Cord update ()
  • util: add additional file-related utility functions ()
  • validate and set editor_image upon initialization ()

fix

  • IPC:is_closing should return true if the pipe does not exist ()
  • should_skip_update should be checked right before the update ()
  • actually update the editor image ()
  • allow sending same activity updates ()
  • an attempt to fix intermittent ui freezes ()
  • async: avoid including debug info on regular errors and fix error propagation ()
  • automatically retry connection on ECONNREFUSED & ETIMEDOUT ()
  • avoid joining the handles ()
  • change cfg-if attribute ()
  • close uv handles before exiting ()
  • config: correctly handle custom client ids ()
  • config: correctly replace config values ()
  • config: do not override the given editor icon ()
  • correct the logic responsible for falling back to defaults ()
  • correctly handle curl's stdout ()
  • correctly serialize activity timestamps ()
  • correctly serialize rich presence packet ()
  • correctly set workspace_dir & workspace_name ()
  • do not queue activity updates upon losing focus ()
  • fallback to default activity type if not provided ()
  • idle timeout check ()
  • implement event queuing for handling events registered after the handler is run ()
  • imports ()
  • include vim.log.levels.OFF when parsing the log level ()
  • ipc: cleanup the stale pipe if the server process was forcefully terminated ()
  • ipc: handle client disconnection on ErrorKind::BrokenPipe ()
  • ipc: properly cleanup on exit ()
  • let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously ()
  • log: correctly write to the client pipe ()
  • mappings: ensure that the tooltips have a minimum length of 2 ()
  • mappings: set plugin managers' default icon to plugin ()
  • normalize path before workspace lookup ()
  • perform a nil check for usercmds interacting with the activity manager ()
  • properly handle chunked data ()
  • properly handle server shutdowns ()
  • replace method definition with a function definition ()
  • resolve autocmds errors ()
  • resolve event serialization issues ()
  • resolve idle timeout related issues ()
  • resolve workspace issues; handle missing hooks ()
  • return if config validation fails ()
  • schedule cleanup logic if necessary ()
  • schedule the callbacks to maintain compatibility with Neovim 0.6.0 ()
  • server: fix logging level comparison ()
  • server: use panic-free means to write to stdout ()
  • sessions: retrieve the correct session based on id instead of always returning the first available ()
  • set executable permissions on unix systems ()
  • spawn: use an absolute path for server executable's fallback path ()
  • stop the plugin on server errors ()
  • update last_activity only if an actual update occurred ()
  • update server's status to ready on receiving the ready event ()
  • use cord --version to determine the current version of the executable and whether an update is required ()
  • windows: properly handle overlapped I/O ()
  • windows: use overlapped io for named pipes to avoid deadlocks ()

perf

  • avoid unnecessary lookups ()
  • avoid unnecessary lookups ()
  • fs: switch to async filesystem ops ()
  • handle logic responsible for broadcasting the ready event more efficiently ()
  • json: optimize deserialization logic ()
  • json: optimize serialization logic and generalize the serializer ()
  • lua: lazy load some modules ()
  • lua: lazily load other modules ()
  • mappings: significant performance improvements ()
  • remove unnecessary atomics ()

refactor

  • AssetType: rename Lsp to LspManager, allow parsing from a string slice ()
  • Config::buttons should be optional ()
  • Packet should not own the Activity ()
  • activity manager: pause() and resume() should check is_paused ()
  • add more logging ()
  • add new message types, rename ServerMessage to LocalMessage, resolve lifetime issues ()
  • apply clippy suggestions ()
  • call on_ready after initializing the activity manager ()
  • change 'Connecting' log level to DEBUG ()
  • change Deserialize::deserialize to return crate::Result ()
  • change killall -9 -> pkill -15 ()
  • change validate_buttons function to accept a mutable reference ()
  • change error messages ()
  • change the return type of OnEvent::on_event to crate::Result<()> ()
  • cli: add a new error type for cli-related errors ()
  • codebase: ensure proper asynchronous flow and reorganize codebase ()
  • config: change default text values ()
  • config: change default values ()
  • config: remove lsp ()
  • config: rename advanced.server.build to update ()
  • config: rename enable -> enabled ()
  • config: set cursor_update_mode to 'on_hold' by default ()
  • config: set log_level to INFO by default ()
  • constants: change assets url to the new repo; reset assets version ()
  • core: simplify Rust backend by removing internal details ()
  • correct require path ()
  • error: change CordError type definition; add missing error types ()
  • error: include error kind when converting the error to string ()
  • events: update event implementations ()
  • events: use the client DisconnectEvent instead of the local ClientDisconnectedEvent ()
  • fallback to vim.uv ()
  • fallback to os-specific executable path ()
  • fix error message ()
  • force constructor initialization ()
  • handle shutdowns directly ()
  • handle the process handle ()
  • have the session store last_activity ()
  • implicitly return result in main function ()
  • improve the way updates are skipped; expose a function in the manager class ()
  • ipc: remove on_error calls ()
  • ipc: remove unnecessary scheduling ()
  • ipc: use full pipe path ()
  • json: rename value structs and move them to their own file ()
  • make EventContext mutable ()
  • manager: force an update upon gaining focus ()
  • mappings: provide a constant value for default icons ()
  • minor changes ()
  • move args.rs to its own module ()
  • move AssetType to util ()
  • move types.rs to its own module ()
  • move autocmd for cleaning up to plugin/cord.vim ()
  • move Discord IPC logic to a separate module ()
  • move IPC messages to their own module ()
  • move usercmds to cord.vim ()
  • msgpack: make deseralize accept already deserialized Value ()
  • override opts.filename if it's empty ()
  • provide debug error messages ()
  • reduce code verbosity by using macros ()
  • reflect codebase changes ()
  • remove constants.VERSION ()
  • remove excessive debug logging ()
  • remove lib.rs ()
  • remove redundant functions ()
  • remove server-scoped ShutdownEvent ()
  • remove unnecessary events ()
  • rename Config to PluginConfig ()
  • rename ResetTimestampEvent -> SetTimestampEvent ()
  • rename rpc to activity ()
  • rename style -> theme ()
  • rename swap_images -> swap_icons ()
  • rename take_str -> take_string ()
  • rename directory to presence ()
  • replace SessionManager::new with Default derive ()
  • rewrite the codebase to use msgpack instead of json ()
  • separate process spawning logic ()
  • serialization: move [de]serializers to their own common module; introduce a common error type ()
  • set opts.skip_update back to false after skipping an activity update ()
  • set executable directory to nvim-data/cord/bin ()
  • split PluginConfig into structs with relevant fields ()
  • store relevant types and constants in a separate file ()
  • tweak events ()
  • unconditionally fetch and store the git url ()
  • update event context to include reference to Cord itself ()
  • update log message ()
  • update serialization logic ()
  • use crate::Result type ()
  • use Packet::empty() ()
  • use Cargo to build the server executable ()
  • use os-specific defaults ()
  • usercmds: do not include stack traceback when logging on unknown command ()
  • wrap editor_image in Option type ()

style

  • correct error message ()
  • fix warning ()
  • fix warnings ()
  • fix warnings ()
  • fix warnings ()
  • fix warnings ()
  • more logging ()
  • move autocmds to the bottom of the file ()
  • reformat code ()
  • reformat codebase ()
  • remove unused import ()
  • remove unused variables ()
  • remove unused variables ()
  • reorder imports ()
  • resolve unused argument warning ()

BREAKING CHANGE

  • none

βš™οΈ [v2.0.0-beta.1]

2025-01-02

build

  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • enable incremental compilation ()
  • prepare for publishing ()
  • set project version to 2.0.0-beta.1 ()
  • specify msrv ()

chore

  • add rustfmt.toml ()
  • add derives and reformat code ()
  • add relevant mods ()
  • assets: delete the assets directory ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • change semantic release config ()
  • code cleanup ()
  • delete redundant file status.rs ()
  • event: remove redundant implementations ()
  • fix clippy warnings ()
  • fix typo ()
  • fix warnings ()
  • fix warnings ()
  • ignore clippy warning ()
  • lua: fix warnings ()
  • release: 1.0.0-beta.1 [skip ci] (), closes #53 #80
  • release: 2.0.0-beta.1 [skip ci] (), closes #147 #152 #155 #53 #80 #147 #152 #155 #53 #80
  • release: 2.0.0-beta.1 [skip ci] (), closes #147 #152 #155 #53 #80
  • release: 2.0.0-beta.1 [skip ci] ()
  • release: 2.0.0-beta.2 [skip ci] ()
  • remove changelog ()
  • remove changelog ()
  • remove debug statement ()
  • remove redundant code ()
  • remove redundant file ()
  • remove unnecessary explicit lifetimes ()
  • remove unnecessary statement ()
  • remove unused imports ()
  • remove unused variable ()
  • resolve merge conflicts ()
  • set previous release in .releaserc.json ()
  • temporarily comment out code ()
  • update .gitignore ()
  • update .luacheckrc ()
  • update .luacheckrc ()
  • update .luacheckrc ()
  • update .releaserc.json ()
  • update util/mod.rs ()
  • update releaserc ()
  • update semantic release ()
  • update semantic release ()
  • update semantic release ()

ci

  • add freebsd target ()
  • create release.yml ()
  • integrate semantic release ()
  • prepare for publishing to luarocks ()
  • update release.yml ()
  • update release.yml ()
  • update release workflow ()
  • update release workflow ()
  • update release workflow ()
  • update release.yml ()
  • update semantic release ()

docs

  • add configuration examples ()
  • configration: add missing backticks ()
  • configuration: add default config values ()
  • configuration: center activity options ()
  • create a configuration guide ()
  • create a migration guide ()
  • document string templating ()
  • lua: document exposed interfaces ()
  • migration: fix text highlighting ()
  • prefer :Cord update over :Cord fetch ()
  • readme: add badge icons ()
  • readme: add cord's logo ()
  • readme: add installation step for rocks.nvim ()
  • readme: include a link for cord's brand new discord server ()
  • readme: rewrite README ()
  • readme: update README ()
  • readme: update README ()
  • readme: update README ()
  • readme: update README ()
  • rust: document crucial parts of the codebase ()
  • templates: remove the icon request issue template ()
  • update configuration guide ()
  • update configuration guide ()
  • update configuration guide ()
  • update documentation ()
  • update examples ()
  • update examples ()
  • update examples ()
  • update migration guide ()
  • update migration guide ()
  • update migration guide ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the examples ()
  • update the examples ()
  • update the examples ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()

feat

  • activity: add additional fields ()
  • add :Cord restart ()
  • add json:Error & msgpack:Error ()
  • add new function to Packet struct ()
  • add notes field ()
  • add TryFrom impl to AssetType ()
  • add vim.g.cord_is_updating to avoid multiple simultaneous updates ()
  • add a logger struct ()
  • add a macro that simplifies field deserialization ()
  • add cleanup logic ()
  • add explicit rich presence clearing; can be completely hidden with force = true ()
  • add message deserialization logic ()
  • add message handler struct ()
  • add program entry point ()
  • add proper serialization for LogEvent ()
  • add server-scoped InitializeEvent ()
  • add the Cord struct which is used as the entry point ()
  • add unix implementation of the IPC server ()
  • add usercommands ()
  • add utility functions for building and fetching the executable ()
  • add windows implementation of the IPC server ()
  • allow parsing client_id from client name ()
  • allow the user to skip updates ()
  • allow users to set a custom activity ()
  • always fetch the executable if it's not present ()
  • always perform the file exists check first ()
  • async: implement Future wrappers for commonly used uv functions ()
  • async: implement the concept of futures and handle async operations via coroutines ()
  • capture build errors ()
  • cli: add --version argument ()
  • cli: implement argument parsing ()
  • config: add advanced.server.build ()
  • config: add advanced.variables_in_functions ()
  • config: add idle.unidle_on_focus ()
  • config: add on_activity hook ()
  • config: add on_disconnect hook ()
  • config: add support for string templates using the new variables option ()
  • config: allow users to choose between different icon styles ()
  • config: custom assets' options now support function types ()
  • config: introduce idle.smart_idle option which lets general activities take precedence over the idle ones ()
  • create Config struct to store internal configuration and refine timeout logic ()
  • create a separate module for icon-related stuff ()
  • display the most recent activity in case a client disconnects; clear the status if none are connected ()
  • events: add client event implementations ()
  • events: add server events ()
  • events: handle client connection ()
  • events: notify the client about errors on their side ()
  • handle automatically moving the server executable to nvim's data directory ()
  • handle the activity type ()
  • icon: expose locals ()
  • implement Default for Overlapped struct ()
  • implement OnEvent trait for all events ()
  • implement a wrapper around curl ()
  • implement caching for workspace and repository entries ()
  • implement custom error type ()
  • implement iterations - a maximum amount of time the server can idle without active connections ()
  • implement reconnection mechanism for Discord ()
  • implement sessions and session manager ()
  • improve cleanup logic ()
  • introduce PresenceContext struct which will be used to build the rich presence ()
  • introduce message communication system ()
  • ipc: continuously read data from Discord pipe to detect sudden disconnects ()
  • ipc: use full pipe path ()
  • json: add robust error handling ()
  • lockfile: implement file locking mechanism ()
  • logger: handle cases in lua callbacks ()
  • lua: automatically start the server ()
  • lua: call on_workspace_change hook if a workspace change is detected ()
  • lua: initial implementation of the Lua codebase ()
  • lua: switch to event-driven architecture ()
  • make server error messages clean ()
  • manager: expose more functions for interacting with rich presence and its manager ()
  • mappings: add cuda filetype ()
  • mappings: add icon for odin ()
  • mappings: add missing filetypes ()
  • mappings: add support for dashboard plugins ()
  • mappings: add support for docs ()
  • modularize the event system and add helper macros for creating messages ()
  • msgpack: add msgpack deserialization ()
  • msgpack: add msgpack serialization ()
  • msgpack: add support for STR8 header ()
  • msgpack: allow serialization of Map values ()
  • msgpack: support owned strings ()
  • notify client when the workspace is found in the blacklist ()
  • notify the client when server is ready to accept connections ()
  • notify the clients about the server shutdown ()
  • prepend the messages with a length header in case they get merged ()
  • prioritize general activities over the idle activity ()
  • producer: allow sending a shutdown request ()
  • provide clear error message for when the connection to Discord IPC fails ()
  • provide clearer server error messages ()
  • provide more data when logging the error ()
  • server: add local ShutdownEvent ()
  • server: improve error handling & error messages ()
  • server: notify the client whether the provided client id is incorrect ()
  • set style-specific default idle icons ()
  • specify MSRV ()
  • specify plugin version ()
  • stop any updates when connection is lost ()
  • store os name and architecture ()
  • switch to next available activity on clear_activity event ()
  • tie each client to a session ()
  • trim stderr messages ()
  • update sessions' last updated time ()
  • use newly added mapping types ()
  • usercmds: add :Cord status ()
  • usercmds: add :Cord update ()
  • util: add additional file-related utility functions ()
  • validate and set editor_image upon initialization ()

fix

  • IPC:is_closing should return true if the pipe does not exist ()
  • should_skip_update should be checked right before the update ()
  • actually update the editor image ()
  • allow sending same activity updates ()
  • an attempt to fix intermittent ui freezes ()
  • async: avoid including debug info on regular errors and fix error propagation ()
  • automatically retry connection on ECONNREFUSED & ETIMEDOUT ()
  • avoid joining the handles ()
  • change cfg-if attribute ()
  • close uv handles before exiting ()
  • config: correctly handle custom client ids ()
  • config: correctly replace config values ()
  • config: do not override the given editor icon ()
  • correct the logic responsible for falling back to defaults ()
  • correctly handle curl's stdout ()
  • correctly serialize activity timestamps ()
  • correctly serialize rich presence packet ()
  • correctly set workspace_dir & workspace_name ()
  • do not queue activity updates upon losing focus ()
  • fallback to default activity type if not provided ()
  • idle timeout check ()
  • implement event queuing for handling events registered after the handler is run ()
  • imports ()
  • include vim.log.levels.OFF when parsing the log level ()
  • ipc: cleanup the stale pipe if the server process was forcefully terminated ()
  • ipc: handle client disconnection on ErrorKind::BrokenPipe ()
  • ipc: properly cleanup on exit ()
  • let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously ()
  • log: correctly write to the client pipe ()
  • mappings: ensure that the tooltips have a minimum length of 2 ()
  • mappings: set plugin managers' default icon to plugin ()
  • normalize path before workspace lookup ()
  • perform a nil check for usercmds interacting with the activity manager ()
  • properly handle chunked data ()
  • properly handle server shutdowns ()
  • replace method definition with a function definition ()
  • resolve autocmds errors ()
  • resolve event serialization issues ()
  • resolve idle timeout related issues ()
  • resolve workspace issues; handle missing hooks ()
  • return if config validation fails ()
  • schedule cleanup logic if necessary ()
  • schedule the callbacks to maintain compatibility with Neovim 0.6.0 ()
  • server: fix logging level comparison ()
  • server: use panic-free means to write to stdout ()
  • sessions: retrieve the correct session based on id instead of always returning the first available ()
  • set executable permissions on unix systems ()
  • spawn: use an absolute path for server executable's fallback path ()
  • stop the plugin on server errors ()
  • update last_activity only if an actual update occurred ()
  • update server's status to ready on receiving the ready event ()
  • use cord --version to determine the current version of the executable and whether an update is required ()
  • windows: properly handle overlapped I/O ()
  • windows: use overlapped io for named pipes to avoid deadlocks ()

perf

  • avoid unnecessary lookups ()
  • avoid unnecessary lookups ()
  • fs: switch to async filesystem ops ()
  • handle logic responsible for broadcasting the ready event more efficiently ()
  • json: optimize deserialization logic ()
  • json: optimize serialization logic and generalize the serializer ()
  • lua: lazy load some modules ()
  • lua: lazily load other modules ()
  • mappings: significant performance improvements ()
  • remove unnecessary atomics ()

refactor

  • AssetType: rename Lsp to LspManager, allow parsing from a string slice ()
  • Config::buttons should be optional ()
  • Packet should not own the Activity ()
  • activity manager: pause() and resume() should check is_paused ()
  • add more logging ()
  • add new message types, rename ServerMessage to LocalMessage, resolve lifetime issues ()
  • apply clippy suggestions ()
  • call on_ready after initializing the activity manager ()
  • change 'Connecting' log level to DEBUG ()
  • change Deserialize::deserialize to return crate::Result ()
  • change killall -9 -> pkill -15 ()
  • change validate_buttons function to accept a mutable reference ()
  • change error messages ()
  • change the return type of OnEvent::on_event to crate::Result<()> ()
  • cli: add a new error type for cli-related errors ()
  • codebase: ensure proper asynchronous flow and reorganize codebase ()
  • config: change default text values ()
  • config: change default values ()
  • config: remove lsp ()
  • config: rename advanced.server.build to update ()
  • config: rename enable -> enabled ()
  • config: set cursor_update_mode to 'on_hold' by default ()
  • config: set log_level to INFO by default ()
  • constants: change assets url to the new repo; reset assets version ()
  • core: simplify Rust backend by removing internal details ()
  • correct require path ()
  • error: change CordError type definition; add missing error types ()
  • error: include error kind when converting the error to string ()
  • events: update event implementations ()
  • events: use the client DisconnectEvent instead of the local ClientDisconnectedEvent ()
  • fallback to vim.uv ()
  • fallback to os-specific executable path ()
  • fix error message ()
  • force constructor initialization ()
  • handle shutdowns directly ()
  • handle the process handle ()
  • have the session store last_activity ()
  • implicitly return result in main function ()
  • improve the way updates are skipped; expose a function in the manager class ()
  • ipc: remove on_error calls ()
  • ipc: remove unnecessary scheduling ()
  • ipc: use full pipe path ()
  • json: rename value structs and move them to their own file ()
  • make EventContext mutable ()
  • manager: force an update upon gaining focus ()
  • mappings: provide a constant value for default icons ()
  • minor changes ()
  • move args.rs to its own module ()
  • move AssetType to util ()
  • move types.rs to its own module ()
  • move autocmd for cleaning up to plugin/cord.vim ()
  • move Discord IPC logic to a separate module ()
  • move IPC messages to their own module ()
  • move usercmds to cord.vim ()
  • msgpack: make deseralize accept already deserialized Value ()
  • override opts.filename if it's empty ()
  • provide debug error messages ()
  • reduce code verbosity by using macros ()
  • reflect codebase changes ()
  • remove constants.VERSION ()
  • remove excessive debug logging ()
  • remove lib.rs ()
  • remove redundant functions ()
  • remove server-scoped ShutdownEvent ()
  • remove unnecessary events ()
  • rename Config to PluginConfig ()
  • rename ResetTimestampEvent -> SetTimestampEvent ()
  • rename rpc to activity ()
  • rename style -> theme ()
  • rename swap_images -> swap_icons ()
  • rename take_str -> take_string ()
  • rename directory to presence ()
  • replace SessionManager::new with Default derive ()
  • rewrite the codebase to use msgpack instead of json ()
  • separate process spawning logic ()
  • serialization: move [de]serializers to their own common module; introduce a common error type ()
  • set opts.skip_update back to false after skipping an activity update ()
  • set executable directory to nvim-data/cord/bin ()
  • split PluginConfig into structs with relevant fields ()
  • store relevant types and constants in a separate file ()
  • tweak events ()
  • unconditionally fetch and store the git url ()
  • update event context to include reference to Cord itself ()
  • update log message ()
  • update serialization logic ()
  • use crate::Result type ()
  • use Packet::empty() ()
  • use Cargo to build the server executable ()
  • use os-specific defaults ()
  • usercmds: do not include stack traceback when logging on unknown command ()
  • wrap editor_image in Option type ()

style

  • correct error message ()
  • fix warning ()
  • fix warnings ()
  • fix warnings ()
  • fix warnings ()
  • fix warnings ()
  • more logging ()
  • move autocmds to the bottom of the file ()
  • reformat code ()
  • reformat codebase ()
  • remove unused import ()
  • remove unused variables ()
  • remove unused variables ()
  • reorder imports ()
  • resolve unused argument warning ()

BREAKING CHANGE

  • none

βš™οΈ [v2.0.0-beta.1]

2025-01-02

  • feat!: update semantic release's ci ()
  • fix!: bugfixes related to opts handling, workspace detection callback, button validation as well as slight changes in configuration ()
  • merge #147 (), closes #147
  • merge #152 (), closes #152
  • merge #155 (), closes #155
  • Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ()
  • Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ()
  • refactor!: rename git_url -> repo_url ()

build

  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • enable incremental compilation ()
  • prepare for publishing ()
  • set project version to 2.0.0-beta.1 ()
  • specify msrv ()

chore

  • add rustfmt.toml ()
  • add derives and reformat code ()
  • add relevant mods ()
  • assets: delete the assets directory ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • change semantic release config ()
  • code cleanup ()
  • delete redundant file status.rs ()
  • event: remove redundant implementations ()
  • fix clippy warnings ()
  • fix typo ()
  • fix warnings ()
  • fix warnings ()
  • ignore clippy warning ()
  • lua: fix warnings ()
  • release: 1.0.0-beta.1 [skip ci] (), closes #53 #80
  • release: 2.0.0-beta.1 [skip ci] (), closes #147 #152 #155 #53 #80
  • release: 2.0.0-beta.1 [skip ci] ()
  • release: 2.0.0-beta.2 [skip ci] ()
  • remove changelog ()
  • remove changelog ()
  • remove debug statement ()
  • remove redundant code ()
  • remove redundant file ()
  • remove unnecessary explicit lifetimes ()
  • remove unnecessary statement ()
  • remove unused imports ()
  • remove unused variable ()
  • resolve merge conflicts ()
  • set previous release in .releaserc.json ()
  • temporarily comment out code ()
  • update .gitignore ()
  • update .luacheckrc ()
  • update .luacheckrc ()
  • update .luacheckrc ()
  • update .releaserc.json ()
  • update util/mod.rs ()
  • update releaserc ()
  • update semantic release ()
  • update semantic release ()

ci

  • add freebsd target ()
  • create release.yml ()
  • integrate semantic release ()
  • prepare for publishing to luarocks ()
  • update release.yml ()
  • update release.yml ()
  • update release workflow ()
  • update release workflow ()
  • update release workflow ()
  • update release.yml ()
  • update semantic release ()

docs

  • add configuration examples ()
  • configration: add missing backticks ()
  • configuration: add default config values ()
  • configuration: center activity options ()
  • create a configuration guide ()
  • create a migration guide ()
  • document string templating ()
  • lua: document exposed interfaces ()
  • migration: fix text highlighting ()
  • prefer :Cord update over :Cord fetch ()
  • readme: add badge icons ()
  • readme: add cord's logo ()
  • readme: add installation step for rocks.nvim ()
  • readme: include a link for cord's brand new discord server ()
  • readme: rewrite README ()
  • readme: update README ()
  • readme: update README ()
  • readme: update README ()
  • readme: update README ()
  • rust: document crucial parts of the codebase ()
  • templates: remove the icon request issue template ()
  • update configuration guide ()
  • update configuration guide ()
  • update configuration guide ()
  • update documentation ()
  • update examples ()
  • update examples ()
  • update examples ()
  • update migration guide ()
  • update migration guide ()
  • update migration guide ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the examples ()
  • update the examples ()
  • update the examples ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()

feat

  • activity: add additional fields ()
  • add :Cord restart ()
  • add json:Error & msgpack:Error ()
  • add new function to Packet struct ()
  • add notes field ()
  • add TryFrom impl to AssetType ()
  • add vim.g.cord_is_updating to avoid multiple simultaneous updates ()
  • add a logger struct ()
  • add a macro that simplifies field deserialization ()
  • add cleanup logic ()
  • add explicit rich presence clearing; can be completely hidden with force = true ()
  • add message deserialization logic ()
  • add message handler struct ()
  • add program entry point ()
  • add proper serialization for LogEvent ()
  • add server-scoped InitializeEvent ()
  • add the Cord struct which is used as the entry point ()
  • add unix implementation of the IPC server ()
  • add usercommands ()
  • add utility functions for building and fetching the executable ()
  • add windows implementation of the IPC server ()
  • allow parsing client_id from client name ()
  • allow the user to skip updates ()
  • allow users to set a custom activity ()
  • always fetch the executable if it's not present ()
  • always perform the file exists check first ()
  • async: implement Future wrappers for commonly used uv functions ()
  • async: implement the concept of futures and handle async operations via coroutines ()
  • capture build errors ()
  • cli: add --version argument ()
  • cli: implement argument parsing ()
  • config: add advanced.server.build ()
  • config: add advanced.variables_in_functions ()
  • config: add idle.unidle_on_focus ()
  • config: add on_activity hook ()
  • config: add on_disconnect hook ()
  • config: add support for string templates using the new variables option ()
  • config: allow users to choose between different icon styles ()
  • config: custom assets' options now support function types ()
  • config: introduce idle.smart_idle option which lets general activities take precedence over the idle ones ()
  • create Config struct to store internal configuration and refine timeout logic ()
  • create a separate module for icon-related stuff ()
  • display the most recent activity in case a client disconnects; clear the status if none are connected ()
  • events: add client event implementations ()
  • events: add server events ()
  • events: handle client connection ()
  • events: notify the client about errors on their side ()
  • handle automatically moving the server executable to nvim's data directory ()
  • handle the activity type ()
  • icon: expose locals ()
  • implement Default for Overlapped struct ()
  • implement OnEvent trait for all events ()
  • implement a wrapper around curl ()
  • implement caching for workspace and repository entries ()
  • implement custom error type ()
  • implement iterations - a maximum amount of time the server can idle without active connections ()
  • implement reconnection mechanism for Discord ()
  • implement sessions and session manager ()
  • improve cleanup logic ()
  • introduce PresenceContext struct which will be used to build the rich presence ()
  • introduce message communication system ()
  • ipc: continuously read data from Discord pipe to detect sudden disconnects ()
  • ipc: use full pipe path ()
  • json: add robust error handling ()
  • lockfile: implement file locking mechanism ()
  • logger: handle cases in lua callbacks ()
  • lua: automatically start the server ()
  • lua: call on_workspace_change hook if a workspace change is detected ()
  • lua: initial implementation of the Lua codebase ()
  • lua: switch to event-driven architecture ()
  • make server error messages clean ()
  • manager: expose more functions for interacting with rich presence and its manager ()
  • mappings: add cuda filetype ()
  • mappings: add icon for odin ()
  • mappings: add missing filetypes ()
  • mappings: add support for dashboard plugins ()
  • mappings: add support for docs ()
  • modularize the event system and add helper macros for creating messages ()
  • msgpack: add msgpack deserialization ()
  • msgpack: add msgpack serialization ()
  • msgpack: add support for STR8 header ()
  • msgpack: allow serialization of Map values ()
  • msgpack: support owned strings ()
  • notify client when the workspace is found in the blacklist ()
  • notify the client when server is ready to accept connections ()
  • notify the clients about the server shutdown ()
  • prepend the messages with a length header in case they get merged ()
  • prioritize general activities over the idle activity ()
  • producer: allow sending a shutdown request ()
  • provide clear error message for when the connection to Discord IPC fails ()
  • provide clearer server error messages ()
  • provide more data when logging the error ()
  • server: add local ShutdownEvent ()
  • server: improve error handling & error messages ()
  • server: notify the client whether the provided client id is incorrect ()
  • set style-specific default idle icons ()
  • specify MSRV ()
  • specify plugin version ()
  • stop any updates when connection is lost ()
  • store os name and architecture ()
  • switch to next available activity on clear_activity event ()
  • tie each client to a session ()
  • trim stderr messages ()
  • update sessions' last updated time ()
  • use newly added mapping types ()
  • usercmds: add :Cord status ()
  • usercmds: add :Cord update ()
  • util: add additional file-related utility functions ()
  • validate and set editor_image upon initialization ()

fix

  • IPC:is_closing should return true if the pipe does not exist ()
  • should_skip_update should be checked right before the update ()
  • actually update the editor image ()
  • allow sending same activity updates ()
  • an attempt to fix intermittent ui freezes ()
  • async: avoid including debug info on regular errors and fix error propagation ()
  • automatically retry connection on ECONNREFUSED & ETIMEDOUT ()
  • avoid joining the handles ()
  • change cfg-if attribute ()
  • close uv handles before exiting ()
  • config: correctly handle custom client ids ()
  • config: correctly replace config values ()
  • config: do not override the given editor icon ()
  • correct the logic responsible for falling back to defaults ()
  • correctly handle curl's stdout ()
  • correctly serialize activity timestamps ()
  • correctly serialize rich presence packet ()
  • correctly set workspace_dir & workspace_name ()
  • do not queue activity updates upon losing focus ()
  • fallback to default activity type if not provided ()
  • idle timeout check ()
  • implement event queuing for handling events registered after the handler is run ()
  • imports ()
  • include vim.log.levels.OFF when parsing the log level ()
  • ipc: cleanup the stale pipe if the server process was forcefully terminated ()
  • ipc: handle client disconnection on ErrorKind::BrokenPipe ()
  • ipc: properly cleanup on exit ()
  • let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously ()
  • log: correctly write to the client pipe ()
  • mappings: ensure that the tooltips have a minimum length of 2 ()
  • mappings: set plugin managers' default icon to plugin ()
  • normalize path before workspace lookup ()
  • perform a nil check for usercmds interacting with the activity manager ()
  • properly handle chunked data ()
  • properly handle server shutdowns ()
  • replace method definition with a function definition ()
  • resolve autocmds errors ()
  • resolve event serialization issues ()
  • resolve idle timeout related issues ()
  • resolve workspace issues; handle missing hooks ()
  • return if config validation fails ()
  • schedule cleanup logic if necessary ()
  • schedule the callbacks to maintain compatibility with Neovim 0.6.0 ()
  • server: fix logging level comparison ()
  • server: use panic-free means to write to stdout ()
  • sessions: retrieve the correct session based on id instead of always returning the first available ()
  • set executable permissions on unix systems ()
  • spawn: use an absolute path for server executable's fallback path ()
  • stop the plugin on server errors ()
  • update last_activity only if an actual update occurred ()
  • update server's status to ready on receiving the ready event ()
  • use cord --version to determine the current version of the executable and whether an update is required ()
  • windows: properly handle overlapped I/O ()
  • windows: use overlapped io for named pipes to avoid deadlocks ()

perf

  • avoid unnecessary lookups ()
  • avoid unnecessary lookups ()
  • fs: switch to async filesystem ops ()
  • handle logic responsible for broadcasting the ready event more efficiently ()
  • json: optimize deserialization logic ()
  • json: optimize serialization logic and generalize the serializer ()
  • lua: lazy load some modules ()
  • lua: lazily load other modules ()
  • mappings: significant performance improvements ()
  • remove unnecessary atomics ()

refactor

  • AssetType: rename Lsp to LspManager, allow parsing from a string slice ()
  • Config::buttons should be optional ()
  • Packet should not own the Activity ()
  • activity manager: pause() and resume() should check is_paused ()
  • add more logging ()
  • add new message types, rename ServerMessage to LocalMessage, resolve lifetime issues ()
  • apply clippy suggestions ()
  • call on_ready after initializing the activity manager ()
  • change 'Connecting' log level to DEBUG ()
  • change Deserialize::deserialize to return crate::Result ()
  • change killall -9 -> pkill -15 ()
  • change validate_buttons function to accept a mutable reference ()
  • change error messages ()
  • change the return type of OnEvent::on_event to crate::Result<()> ()
  • cli: add a new error type for cli-related errors ()
  • codebase: ensure proper asynchronous flow and reorganize codebase ()
  • config: change default text values ()
  • config: change default values ()
  • config: remove lsp ()
  • config: rename advanced.server.build to update ()
  • config: rename enable -> enabled ()
  • config: set cursor_update_mode to 'on_hold' by default ()
  • config: set log_level to INFO by default ()
  • constants: change assets url to the new repo; reset assets version ()
  • core: simplify Rust backend by removing internal details ()
  • correct require path ()
  • error: change CordError type definition; add missing error types ()
  • error: include error kind when converting the error to string ()
  • events: update event implementations ()
  • events: use the client DisconnectEvent instead of the local ClientDisconnectedEvent ()
  • fallback to vim.uv ()
  • fallback to os-specific executable path ()
  • fix error message ()
  • force constructor initialization ()
  • handle shutdowns directly ()
  • handle the process handle ()
  • have the session store last_activity ()
  • implicitly return result in main function ()
  • improve the way updates are skipped; expose a function in the manager class ()
  • ipc: remove on_error calls ()
  • ipc: remove unnecessary scheduling ()
  • ipc: use full pipe path ()
  • json: rename value structs and move them to their own file ()
  • make EventContext mutable ()
  • manager: force an update upon gaining focus ()
  • mappings: provide a constant value for default icons ()
  • minor changes ()
  • move args.rs to its own module ()
  • move AssetType to util ()
  • move types.rs to its own module ()
  • move autocmd for cleaning up to plugin/cord.vim ()
  • move Discord IPC logic to a separate module ()
  • move IPC messages to their own module ()
  • move usercmds to cord.vim ()
  • msgpack: make deseralize accept already deserialized Value ()
  • override opts.filename if it's empty ()
  • provide debug error messages ()
  • reduce code verbosity by using macros ()
  • reflect codebase changes ()
  • remove constants.VERSION ()
  • remove excessive debug logging ()
  • remove lib.rs ()
  • remove redundant functions ()
  • remove server-scoped ShutdownEvent ()
  • remove unnecessary events ()
  • rename Config to PluginConfig ()
  • rename ResetTimestampEvent -> SetTimestampEvent ()
  • rename rpc to activity ()
  • rename style -> theme ()
  • rename swap_images -> swap_icons ()
  • rename take_str -> take_string ()
  • rename directory to presence ()
  • replace SessionManager::new with Default derive ()
  • rewrite the codebase to use msgpack instead of json ()
  • separate process spawning logic ()
  • serialization: move [de]serializers to their own common module; introduce a common error type ()
  • set opts.skip_update back to false after skipping an activity update ()
  • set executable directory to nvim-data/cord/bin ()
  • split PluginConfig into structs with relevant fields ()
  • store relevant types and constants in a separate file ()
  • tweak events ()
  • unconditionally fetch and store the git url ()
  • update event context to include reference to Cord itself ()
  • update log message ()
  • update serialization logic ()
  • use crate::Result type ()
  • use Packet::empty() ()
  • use Cargo to build the server executable ()
  • use os-specific defaults ()
  • usercmds: do not include stack traceback when logging on unknown command ()
  • wrap editor_image in Option type ()

style

  • correct error message ()
  • fix warning ()
  • fix warnings ()
  • fix warnings ()
  • fix warnings ()
  • fix warnings ()
  • more logging ()
  • move autocmds to the bottom of the file ()
  • reformat code ()
  • reformat codebase ()
  • remove unused import ()
  • remove unused variables ()
  • remove unused variables ()
  • reorder imports ()
  • resolve unused argument warning ()

BREAKING CHANGE

  • none

βš™οΈ [v2.0.0-beta.1]

2025-01-02

  • feat!: update semantic release's ci ()
  • fix!: bugfixes related to opts handling, workspace detection callback, button validation as well as slight changes in configuration ()
  • merge #147 (), closes #147
  • merge #152 (), closes #152
  • merge #155 (), closes #155
  • Merge branch 'client-server' of https://github.com/vyfor/cord.nvim into client-server ()
  • refactor!: rename git_url -> repo_url ()

build

  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • bump project version ()
  • enable incremental compilation ()
  • prepare for publishing ()
  • set project version to 2.0.0-beta.1 ()
  • specify msrv ()

chore

  • add rustfmt.toml ()
  • add derives and reformat code ()
  • add relevant mods ()
  • assets: delete the assets directory ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • bump assets version ()
  • change semantic release config ()
  • code cleanup ()
  • delete redundant file status.rs ()
  • event: remove redundant implementations ()
  • fix clippy warnings ()
  • fix typo ()
  • fix warnings ()
  • fix warnings ()
  • ignore clippy warning ()
  • lua: fix warnings ()
  • release: 1.0.0-beta.1 [skip ci] (), closes #53 #80
  • release: 2.0.0-beta.1 [skip ci] ()
  • release: 2.0.0-beta.2 [skip ci] ()
  • remove changelog ()
  • remove changelog ()
  • remove debug statement ()
  • remove redundant code ()
  • remove redundant file ()
  • remove unnecessary explicit lifetimes ()
  • remove unnecessary statement ()
  • remove unused imports ()
  • remove unused variable ()
  • resolve merge conflicts ()
  • set previous release in .releaserc.json ()
  • temporarily comment out code ()
  • update .gitignore ()
  • update .luacheckrc ()
  • update .luacheckrc ()
  • update .luacheckrc ()
  • update .releaserc.json ()
  • update util/mod.rs ()
  • update releaserc ()

ci

  • add freebsd target ()
  • create release.yml ()
  • integrate semantic release ()
  • prepare for publishing to luarocks ()
  • update release.yml ()
  • update release.yml ()
  • update release workflow ()
  • update release workflow ()
  • update release workflow ()
  • update release.yml ()
  • update semantic release ()

docs

  • add configuration examples ()
  • configration: add missing backticks ()
  • configuration: add default config values ()
  • configuration: center activity options ()
  • create a configuration guide ()
  • create a migration guide ()
  • document string templating ()
  • lua: document exposed interfaces ()
  • migration: fix text highlighting ()
  • prefer :Cord update over :Cord fetch ()
  • readme: add badge icons ()
  • readme: add cord's logo ()
  • readme: add installation step for rocks.nvim ()
  • readme: include a link for cord's brand new discord server ()
  • readme: rewrite README ()
  • readme: update README ()
  • readme: update README ()
  • readme: update README ()
  • readme: update README ()
  • rust: document crucial parts of the codebase ()
  • templates: remove the icon request issue template ()
  • update configuration guide ()
  • update configuration guide ()
  • update configuration guide ()
  • update documentation ()
  • update examples ()
  • update examples ()
  • update examples ()
  • update migration guide ()
  • update migration guide ()
  • update migration guide ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update readme ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the configuration guide ()
  • update the examples ()
  • update the examples ()
  • update the examples ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()
  • update the migration guide ()

feat

  • activity: add additional fields ()
  • add :Cord restart ()
  • add json:Error & msgpack:Error ()
  • add new function to Packet struct ()
  • add notes field ()
  • add TryFrom impl to AssetType ()
  • add vim.g.cord_is_updating to avoid multiple simultaneous updates ()
  • add a logger struct ()
  • add a macro that simplifies field deserialization ()
  • add cleanup logic ()
  • add explicit rich presence clearing; can be completely hidden with force = true ()
  • add message deserialization logic ()
  • add message handler struct ()
  • add program entry point ()
  • add proper serialization for LogEvent ()
  • add server-scoped InitializeEvent ()
  • add the Cord struct which is used as the entry point ()
  • add unix implementation of the IPC server ()
  • add usercommands ()
  • add utility functions for building and fetching the executable ()
  • add windows implementation of the IPC server ()
  • allow parsing client_id from client name ()
  • allow the user to skip updates ()
  • allow users to set a custom activity ()
  • always fetch the executable if it's not present ()
  • always perform the file exists check first ()
  • async: implement Future wrappers for commonly used uv functions ()
  • async: implement the concept of futures and handle async operations via coroutines ()
  • capture build errors ()
  • cli: add --version argument ()
  • cli: implement argument parsing ()
  • config: add advanced.server.build ()
  • config: add advanced.variables_in_functions ()
  • config: add idle.unidle_on_focus ()
  • config: add on_activity hook ()
  • config: add on_disconnect hook ()
  • config: add support for string templates using the new variables option ()
  • config: allow users to choose between different icon styles ()
  • config: custom assets' options now support function types ()
  • config: introduce idle.smart_idle option which lets general activities take precedence over the idle ones ()
  • create Config struct to store internal configuration and refine timeout logic ()
  • create a separate module for icon-related stuff ()
  • display the most recent activity in case a client disconnects; clear the status if none are connected ()
  • events: add client event implementations ()
  • events: add server events ()
  • events: handle client connection ()
  • events: notify the client about errors on their side ()
  • handle automatically moving the server executable to nvim's data directory ()
  • handle the activity type ()
  • icon: expose locals ()
  • implement Default for Overlapped struct ()
  • implement OnEvent trait for all events ()
  • implement a wrapper around curl ()
  • implement caching for workspace and repository entries ()
  • implement custom error type ()
  • implement iterations - a maximum amount of time the server can idle without active connections ()
  • implement reconnection mechanism for Discord ()
  • implement sessions and session manager ()
  • improve cleanup logic ()
  • introduce PresenceContext struct which will be used to build the rich presence ()
  • introduce message communication system ()
  • ipc: continuously read data from Discord pipe to detect sudden disconnects ()
  • ipc: use full pipe path ()
  • json: add robust error handling ()
  • lockfile: implement file locking mechanism ()
  • logger: handle cases in lua callbacks ()
  • lua: automatically start the server ()
  • lua: call on_workspace_change hook if a workspace change is detected ()
  • lua: initial implementation of the Lua codebase ()
  • lua: switch to event-driven architecture ()
  • make server error messages clean ()
  • manager: expose more functions for interacting with rich presence and its manager ()
  • mappings: add cuda filetype ()
  • mappings: add icon for odin ()
  • mappings: add missing filetypes ()
  • mappings: add support for dashboard plugins ()
  • mappings: add support for docs ()
  • modularize the event system and add helper macros for creating messages ()
  • msgpack: add msgpack deserialization ()
  • msgpack: add msgpack serialization ()
  • msgpack: add support for STR8 header ()
  • msgpack: allow serialization of Map values ()
  • msgpack: support owned strings ()
  • notify client when the workspace is found in the blacklist ()
  • notify the client when server is ready to accept connections ()
  • notify the clients about the server shutdown ()
  • prepend the messages with a length header in case they get merged ()
  • prioritize general activities over the idle activity ()
  • producer: allow sending a shutdown request ()
  • provide clear error message for when the connection to Discord IPC fails ()
  • provide clearer server error messages ()
  • provide more data when logging the error ()
  • server: add local ShutdownEvent ()
  • server: improve error handling & error messages ()
  • server: notify the client whether the provided client id is incorrect ()
  • set style-specific default idle icons ()
  • specify MSRV ()
  • specify plugin version ()
  • stop any updates when connection is lost ()
  • store os name and architecture ()
  • switch to next available activity on clear_activity event ()
  • tie each client to a session ()
  • trim stderr messages ()
  • update sessions' last updated time ()
  • use newly added mapping types ()
  • usercmds: add :Cord status ()
  • usercmds: add :Cord update ()
  • util: add additional file-related utility functions ()
  • validate and set editor_image upon initialization ()

fix

  • IPC:is_closing should return true if the pipe does not exist ()
  • should_skip_update should be checked right before the update ()
  • actually update the editor image ()
  • allow sending same activity updates ()
  • an attempt to fix intermittent ui freezes ()
  • async: avoid including debug info on regular errors and fix error propagation ()
  • automatically retry connection on ECONNREFUSED & ETIMEDOUT ()
  • avoid joining the handles ()
  • change cfg-if attribute ()
  • close uv handles before exiting ()
  • config: correctly handle custom client ids ()
  • config: correctly replace config values ()
  • config: do not override the given editor icon ()
  • correct the logic responsible for falling back to defaults ()
  • correctly handle curl's stdout ()
  • correctly serialize activity timestamps ()
  • correctly serialize rich presence packet ()
  • correctly set workspace_dir & workspace_name ()
  • do not queue activity updates upon losing focus ()
  • fallback to default activity type if not provided ()
  • idle timeout check ()
  • implement event queuing for handling events registered after the handler is run ()
  • imports ()
  • include vim.log.levels.OFF when parsing the log level ()
  • ipc: cleanup the stale pipe if the server process was forcefully terminated ()
  • ipc: handle client disconnection on ErrorKind::BrokenPipe ()
  • ipc: properly cleanup on exit ()
  • let the updater alone handle executable spawning, or we might have two threads attempting to spawn it simultaneously ()
  • log: correctly write to the client pipe ()
  • mappings: ensure that the tooltips have a minimum length of 2 ()
  • mappings: set plugin managers' default icon to plugin ()
  • normalize path before workspace lookup ()
  • perform a nil check for usercmds interacting with the activity manager ()
  • properly handle chunked data ()
  • properly handle server shutdowns ()
  • replace method definition with a function definition ()
  • resolve autocmds errors ()
  • resolve event serialization issues ()
  • resolve idle timeout related issues ()
  • resolve workspace issues; handle missing hooks ()
  • return if config validation fails ()
  • schedule cleanup logic if necessary ()
  • schedule the callbacks to maintain compatibility with Neovim 0.6.0 ()
  • server: fix logging level comparison ()
  • server: use panic-free means to write to stdout ()
  • sessions: retrieve the correct session based on id instead of always returning the first available ()
  • set executable permissions on unix systems ()
  • spawn: use an absolute path for server executable's fallback path ()
  • stop the plugin on server errors ()
  • update last_activity only if an actual update occurred ()
  • update server's status to ready on receiving the ready event ()
  • use cord --version to determine the current version of the executable and whether an update is required ()
  • windows: properly handle overlapped I/O ()
  • windows: use overlapped io for named pipes to avoid deadlocks ()

perf

  • avoid unnecessary lookups ()
  • avoid unnecessary lookups ()
  • fs: switch to async filesystem ops ()
  • handle logic responsible for broadcasting the ready event more efficiently ()
  • json: optimize deserialization logic ()
  • json: optimize serialization logic and generalize the serializer ()
  • lua: lazy load some modules ()
  • lua: lazily load other modules ()
  • mappings: significant performance improvements ()
  • remove unnecessary atomics ()

refactor

  • AssetType: rename Lsp to LspManager, allow parsing from a string slice ()
  • Config::buttons should be optional ()
  • Packet should not own the Activity ()
  • activity manager: pause() and resume() should check is_paused ()
  • add more logging ()
  • add new message types, rename ServerMessage to LocalMessage, resolve lifetime issues ()
  • apply clippy suggestions ()
  • call on_ready after initializing the activity manager ()
  • change 'Connecting' log level to DEBUG ()
  • change Deserialize::deserialize to return crate::Result ()
  • change killall -9 -> pkill -15 ()
  • change validate_buttons function to accept a mutable reference ()
  • change error messages ()
  • change the return type of OnEvent::on_event to crate::Result<()> ()
  • cli: add a new error type for cli-related errors ()
  • codebase: ensure proper asynchronous flow and reorganize codebase ()
  • config: change default text values ()
  • config: change default values ()
  • config: remove lsp ()
  • config: rename advanced.server.build to update ()
  • config: rename enable -> enabled ()
  • config: set cursor_update_mode to 'on_hold' by default ()
  • config: set log_level to INFO by default ()
  • constants: change assets url to the new repo; reset assets version ()
  • core: simplify Rust backend by removing internal details ()
  • correct require path ()
  • error: change CordError type definition; add missing error types ()
  • error: include error kind when converting the error to string ()
  • events: update event implementations ()
  • events: use the client DisconnectEvent instead of the local ClientDisconnectedEvent ()
  • fallback to vim.uv ()
  • fallback to os-specific executable path ()
  • fix error message ()
  • force constructor initialization ()
  • handle shutdowns directly ()
  • handle the process handle ()
  • have the session store last_activity ()
  • implicitly return result in main function ()
  • improve the way updates are skipped; expose a function in the manager class ()
  • ipc: remove on_error calls ()
  • ipc: remove unnecessary scheduling ()
  • ipc: use full pipe path ()
  • json: rename value structs and move them to their own file ()
  • make EventContext mutable ()
  • manager: force an update upon gaining focus ()
  • mappings: provide a constant value for default icons ()
  • minor changes ()
  • move args.rs to its own module ()
  • move AssetType to util ()
  • move types.rs to its own module ()
  • move autocmd for cleaning up to plugin/cord.vim ()
  • move Discord IPC logic to a separate module ()
  • move IPC messages to their own module ()
  • move usercmds to cord.vim ()
  • msgpack: make deseralize accept already deserialized Value ()
  • override opts.filename if it's empty ()
  • provide debug error messages ()
  • reduce code verbosity by using macros ()
  • reflect codebase changes ()
  • remove constants.VERSION ()
  • remove excessive debug logging ()
  • remove lib.rs ()
  • remove redundant functions ()
  • remove server-scoped ShutdownEvent ()
  • remove unnecessary events ()
  • rename Config to PluginConfig ()
  • rename ResetTimestampEvent -> SetTimestampEvent ()
  • rename rpc to activity ()
  • rename style -> theme ()
  • rename swap_images -> swap_icons ()
  • rename take_str -> take_string ()
  • rename directory to presence ()
  • replace SessionManager::new with Default derive ()
  • rewrite the codebase to use msgpack instead of json ()
  • separate process spawning logic ()
  • serialization: move [de]serializers to their own common module; introduce a common error type ()
  • set opts.skip_update back to false after skipping an activity update ()
  • set executable directory to nvim-data/cord/bin ()
  • split PluginConfig into structs with relevant fields ()
  • store relevant types and constants in a separate file ()
  • tweak events ()
  • unconditionally fetch and store the git url ()
  • update event context to include reference to Cord itself ()
  • update log message ()
  • update serialization logic ()
  • use crate::Result type ()
  • use Packet::empty() ()
  • use Cargo to build the server executable ()
  • use os-specific defaults ()
  • usercmds: do not include stack traceback when logging on unknown command ()
  • wrap editor_image in Option type ()

style

  • correct error message ()
  • fix warning ()
  • fix warnings ()
  • fix warnings ()
  • fix warnings ()
  • fix warnings ()
  • more logging ()
  • move autocmds to the bottom of the file ()
  • reformat code ()
  • reformat codebase ()
  • remove unused import ()
  • remove unused variables ()
  • remove unused variables ()
  • reorder imports ()
  • resolve unused argument warning ()

BREAKING CHANGE

  • none