2.0.0 - A compiler for syntax highlighting!
⚠️ If you're a package maintainer, please read the last section at the end.
Syntax Highlighting
Edit v2 adds the Lightweight Syntax Highlighter. It has a ~40kB footprint for a dozen languages plus runtime, barely grows with each language added, and runs at >100MB/s.
The highlighter is based on a simple programming language that combines regular expressions with explicit control flow. It's designed such that the runtime can be easily ported to other languages, including JavaScript.
The list of languages will surely grow over time, and contributions for widely used languages are very welcome.
If you're an experienced compiler developer, we'd greatly appreciate any advice and contributions to the LSH compiler. If you're interested in ports of the runtime, please let us know!
See you in v3, with the introduction of a tiny CSS parser for UI theming.
Changes
- Syntax highlighting (#753, #776, #777, #624, #795)
The whole LSH stack: compiler, runtime, integration, and initial language definitions. See above.
For path matching, we've written our own glob matcher (#743). - Preliminary support for
settings.json(#742, #779)
For now, this is limited tofiles.associations, which lets you map file paths and extensions to languages for syntax highlighting. I expect v3 to be centered around configurability. - Find & Replace now supports capture groups (#222) (thanks viyic!)
You can use$1,$2, etc. in the replacement string when regex mode is on. - You can move lines with Alt+Up/Down (#230) (thanks Julio Ramirez (@juemrami)!)
- Tab and Shift+Tab indent and unindent multiple lines at once (#245) (thanks Brian (@liltrendi)!)
- Whitespace inside selections is now visible (#397) (thanks pheonick!)
- Pressing Ctrl+L selects the entire current line (#541) (thanks recently-avoid-dyin!)
- Opening a directory via the CLI drops you into the file picker (#577) (thanks four-poetic-drew!)
- Unsaved work is indicated with a ● in the terminal title (#523) (thanks adamjoer!)
- The file picker now uses natural sort for filenames (#763)
file2.txtsorts beforefile10.txt, as it should.
Bug Fixes
- Invalid CLI arguments are properly rejected instead of silently ignored (#503) (thanks Alex Spînu (@spinualexandru)!)
- Fixed random Unicode text input corruption on *nix (#520) (thanks Mani Tofigh (@manitofigh)!)
- Fixed a file truncation issue when writing Unicode files (#548)
- Fixed undo grouping when backspacing (#590)
- Fixed the alpha blending formula for colors (#594)
We were usingsrgb_to_linearon premultiplied colors, which is no bueno. - Scrolling and clicking have gone through a divorce (#603, #812, #819)
No more phantom selections when you just wanted to scroll. - Fixed UI colors with Terminal.app's new "Clear Dark" theme (#728)
- Fixed multiple issues found under Linux (#706)
UTF-8 parsing for SGR mouse coordinates,sighandler_twarnings, GDB pretty printing. - Single-line files will now properly save as CRLF on Windows (#739) (thanks Cal (@UnnaturalTwilight)!)
- Fixed horizontal scrolling on macOS touchpads (#794) (thanks barkure (@barkure)!)
- You can now replace zero-width regex matches (e.g.
$) (#815) (thanks Mihnea-Teodor Stoica (@MihneaTeodorStoica)!) - Accidentally pasting multiple lines into a single-line input field will not break the UI anymore (#818)
- Fixed a crash when sorting directories on Linux without ICU being available (#823)
Smaller Changes
- SIMD support for LoongArch (#539, #535, #551, #547, #602, #554) (thanks hev (@heiher)!)
- We'll now automatically create parent directories on save (#738) (thanks Sergio Triana Escobedo (@stescobedo92)!)
- Printing
--helpor--versionno longer requires a TTY (#556, #810) - Fixed Ctrl modifier handling during mouse input (#604)
- On Windows,
SetConsoleModefailures now show a useful error message (#639) - The Windows application manifest compatibility section was fixed (#635)
- Fixed a bug where the release announcement contained too much flavor
- Toggling buttons in the search/replace dialog will not move focus around anymore (#821)
Build & Packaging
- The ICU SONAME is configurable at build time via
EDIT_CFG_ICU*(#495)
If this interests you, read the section at the end. - A devcontainer configuration was added (#496) (thanks luisgizirian!)
- A basic
snapcraft.yamlwas added for Snap package builds (#500) (thanks Aaron J Prisk (@aaronprisk)!) - The
.desktopfile was improved (#560) (thanks Nukleari!) - We added our own custom localization system (#591)
All translations live ini18n/edit.tomlfor now. The system allows us to dynamically add more languages over time. - A single-line Linux installer script was added (#628) (thanks Jared Tweed (@JaredTweed)!)
See our readme for more information. clippy::ptr_as_ptrlint was fixed (#730) (thanks xtqqczze!)- Nightly Rust is no longer required (#761, #762, #764)
All nightly features have been replaced with our own, lovingly handcrafted unsafe code.
Localization, Internationalization, Documentation
This release adds 19 new languages, bringing the total to 30 (#596, #629, #634, #655, #663, #669, #688, #693).
Thanks go out to (in no particular order): viyic, VenusGirl❤ (@VenusGirl), Mr Flamel (@mrFlamel), Mohammad Abu Mattar (@MKAbuMattar), Tiago Mouta (@OMouta), Miteigi (@miteigidesu), Emir SARI (@bitigchi), ebraminio, Mads Ohm Larsen (@omegahm), William Beinö (@xTacobaco), Nikola Djordjevic (@marinac-dev), Marginal (@marginal23326), NandeMD, Mekan Soltanov (@msoltanov), Þór Sigurðsson (@TotiTolvukall), Skryta Istota (@hidden-being), Piotr Błażejewicz (Peter Blazejewicz) (@peterblazejewicz), schilive (@schilive), Jakub Kolcar (@ioma8), Michael Avagianos (@maikkundev), Ruzsinszki Gábor (@webmaster442), Erithax, Alex Spînu (@spinualexandru), Ronja Koistinen (@ronja-koistinen), and Yaroslav (@KarpenkoY)!
Other documentation:
- Updated the man page for 1.2.1 (#727) (thanks Stefan (@polluks)!)
- Fixed the localization path in CONTRIBUTING.md (#601) (thanks Aloïs MASSON--CLAUDEZ (@Packingdustry)!)
- Copyright year updated (#760) (thanks Alex Manochio (@ajm19826)!)
Additional notes to Build & Packaging
To summarize the changes above:
- Microsoft Edit now builds with stable Rust. However, Rust 1.93 or later is required.
- The build system now supports SONAME overrides for ICU (primarily relevant on Linux). You can read more about it at the end of our readme.
For instance, a build on Debian 13 (Trixie) may look like this:
# If permitted by your stability policies # and with rust-src installed: export RUSTC_BOOTSTRAP=1 export EDIT_CFG_ICUUC_SONAME=libicuuc.so.76 export EDIT_CFG_ICUI18N_SONAME=libicui18n.so.76 export EDIT_CFG_ICU_RENAMING_VERSION=76 cargo test -- --ignored cargo build --release --config .cargo/release.toml # Otherwise: export EDIT_CFG_ICUUC_SONAME=libicuuc.so.76 export EDIT_CFG_ICUI18N_SONAME=libicui18n.so.76 export EDIT_CFG_ICU_RENAMING_VERSION=76 cargo test -- --ignored cargo build --release
1.2.1
1.2.0
As Steve Ballmer famously said: Fixes! Fixes! Fixes! We do one better and also have new features.
I expect the rate of releases to rise quadratically from now on. 1.1e19.0 should be out in a few weeks.
To Linux package maintainers: We now added an official recommendation for package names to our README.
Changes
- The Open/Save file dialog now features filename autocompletion (#185, #464) (thanks 0x4C33 (@haoruilee))
- The encoding picker is now 100% less confusing and has a fuzzy search field (#255) (thanks b6k)
If you couldn't find Shift-JIS before, because we called it "ibm-943_P15A-2003", rest easy: It's now called "Shift_JIS" as you'd expect. - Control characters are now shown in yellow (#378)
This will make it a lot easier to spot them at a glance! - You can now duplicate lines by simply pressing Ctrl+C, Ctrl+V (#405)
- We'll now detect if your terminal treats "ambiguous" characters as "wide" (#406)
This may be a welcome change for those of you who use CJK characters on Linux. It also fixes issues with the older Windows Console when you use fonts such as "MS Gothic". - Seeking across lines is now up to hundreds of times faster (#408)
If you had issues browsing 1GB+ files before: Now you don't. On my CPU it runs at up to 160GB/s!
Bug Fixes
- Fixed a virtual memory leak on Windows (#404)
- Fixed a bug preventing you from selecting tabs (#412)
- We're experimenting with fixes for those of you who see random input or hangs when you launch Edit (#416, #424)
- The line number margin now gets properly updated at all times (#436) (thanks Jared Irwin (@Link1J))
- Find & Replace now works with empty replacements (#457) (thanks Mark Oborne (@Shivix))
- We fixed another freeze when using Find & Replace (#459)
Smaller Changes
- Pressing F3 will now jump to the next search result (#453) (thanks Key (@keircn))
- Alt+Up in the Open/Save file dialog will now navigate upwards (#458)
Smaller Bug Fixes
- If you're using an older terminal which doesn't support color reporting, Edit should now look a bit prettier (#417)
- Documents are now closed after you were prompted for saving them (#429) (thanks Astro Pig (@Ride-A-Pig))
- The View menu is now properly hidden, when there aren't any files open (#447) (thanks Mark Oborne (@Shivix))
- We fixed an issue preventing you from selecting ".." twice in a row in the Open/Save file dialog (#454)
- Overlapping modals will now clear underlines under them (#460)
Improvements to our use of Rust
- We also remove a redundant heap allocation in
DisplayablePathBuf::from_string(#336) (thanks Linda_pp (@rhysd)) - We removed our dependency on the
os_string_truncatefeature (#421) (thanks Matthew Brown (@matthew-e-brown)) scratch_arenahad some UB and was fixed (#455) (thanks comex)
Localization, Internationalization, Documentation
- Ellipses in localizations are now more consistently applied (#282) (thanks Kiril Ivanov (@ivanovkirilg))
- The "Go to Line" dialog now uses
:instead of/to clarify that you have to type "line:column" (#354) (thanks Shersheial 🕍 (@sharshi)) - We improved the grammar for LargeClipboardWarning in German (#384) (thanks Keks137 (@keks137))
readmeandcategoriesfields were added to Cargo.toml (#415) (thanks Shun Sakai (@sorairolake))- A rudimentary
.desktopfile was added (#420) (thanks 白铭骢 (Mingcong Bai) (@MingcongBai)) - Fixed formatting of
Vec<T>in our docs (#435) (thanks SakuraM) - The "Document Picker" was renamed to "Go to File" to make it easier to find (#456)
Miscellaneous
- We add a CI check for PRs now, which should prevent future "oopsies" (#360, #365)
- We added a
LineCachestruct in advance of adding syntax highlighting in the future (#352) (thanks L1quidH2O) - Benchmarks were added to make it easier to spot any future regressions (#403)
- If you prefer CodeLLDB, the project now has a launch option for it (#444) (thanks Nikita Samusev (@Nikitf777))
1.1.0
Welcome to our first servicing release! Thanks to your contributions, this release contains a large amount of bug fixes and welcome additions. Let us know if you like it in the linked discussion.
If you're using Linux, we would greatly appreciate if you could help us find a name for our editor!
You can read more about it and vote here.
Changes
- We added a "Go to Line/Column" dialog and bound it to CtrlG (#133, #265, #267) (thanks diablo.project (@diabloproject), Astro Pig (@Ride-A-Pig)!)
- You can now open multiple files at once by passing all of them as arguments to
edit(#143) (thanks Koi to Coco (@koitococo)!) - Pressing F10 will now focus the menubar (#198)
- Pressing Home will now toggle between line start and indentation (#199) (thanks Achal Jhawar (@achaljhawar)!)
- Buttons that have hotkeys assigned to them, now have a fancy underline to show which button it is (#276) (thanks Benjamin Fox (@deadalusai)!)
- Edit will now insert a final newline if needed (#300)
Note that creating new files on Windows will default to not inserting a final newline.
Bug Fixes
- Edit should now correctly pick up your user language (#85, #104, #256) (thanks Zack Penn (@hikilaka), Mag Mell (@eatradish)!)
Currently supported languages are: English, German, Spanish, French, Italian, Japanese, Korean, Brazilian Portuguese, Russian, Chinese Simplified, Chinese Traditional - We fixed some incorrect boolean logic in our fuzzy searcher (#134) (thanks Alex Kladov (@matklad)!)
- Pressing Shift + Tab in an empty line will not crash Edit anymore (#137) (thanks Marcos (@marcos-venicius)!)
- Pressing Alt followed by a non-English keyboard key will not crash Edit anymore (#244)
Unfortunately, it will also not do anything. This requires support for the "Kitty Keyboard Protocol" which is not yet implemented in either Edit nor Windows Terminal. - Fixed a whole assortment of bugs and issues around Search & Replace (#258, #274, #299, #327)
- The file picker will now properly warn before overwriting an existing file (#277) (thanks Astro Pig (@Ride-A-Pig)!)
Smaller Changes
- We added the following menu items:
- Select All (#212) (thanks Andrey Kozhev (@ankddev)!)
- Document Picker (#224) (thanks Maciej (@b6k-dev)!)
- You can now select "UTF-8 BOM" in the encoding picker (#225) (thanks Maciej (@b6k-dev)!)
- When you have an unmodified and untitled document, opening a new file will replace the untitled document (#257)
- Tab and Arrow keys should now behave more predictable overall (#272)
- On Windows, the file picker now shows a drive selector if you navigate all the way up (#290)
- We now use much nicer checkbox characters (#321) (thanks aspizu!)
- When you press and hold Ctrl+W it won't accidentally exit the application anymore (#326)
Smaller Bug Fixes
- Our SVG application icon is now 100% more valid XML (#106) (thanks 白铭骢 (Mingcong Bai) (@MingcongBai)!)
- The accelerator key for the "Replace" menu item will now work properly (#126) (thanks Daniel Jacobs (@dan-jac)!)
- Our unit tests now use the correct page size on
aarch64-apple-darwin(#167) (thanks Jeong, YunWon (@youknowone)!) - We fixed a bug where typing S and N was sometimes not possible in the file picker (#298)
- Doc tests intermittently didn't build, but this issue was swiftly fixed (#310) (thanks Linda_pp (@rhysd)!)
- Scrolling inside very large documents (>1GB) will not randomly jump around anymore (#315) (thanks L1quidH2O!)
Platform Support
- Added support for building on macOS and other BSDs (#72) (thanks factormystic!)
- Added winget instructions (#105) (thanks James Alickolli (@licon4812)!)
- Added support for non-x86/AArch64 architectures (#161)
- On Windows, UNC (network) paths can now be opened properly (#193)
- We now use Alt for word-wise navigation on macOS (#207) (thanks diablo.project (@diabloproject)!)
Improvements to our use of Rust
- We made some smaller improvements to our Cargo.toml (#43, #121) (thanks Violet Hansen (@HotCakeX), Autumn (Bee) (@bee-san)!)
- A rust-toolchain.toml was added, ensuring you automatically use nightly Rust (#97) (thanks Toshiki Maekawa (@maekawatoshiki)!)
- We stopped applying MSVC compile flags for non-MSVC toolchains (#98) (thanks Maksim Bondarenkov (@ognevny)!)
- We now use
offset_from_unsignedas it is now available in stable Rust (#131) (thanks Thallium Megalovania (@ThalliMega)!) - Unsafe lifetime transmutes were removed from
vt::Stream(#178) (thanks Adrian Keet (@arkeet)!) - We now use the
Selftype more often (#208) (thanks adamnemecek!) - We're now optimizing
stdfor size as well (#241) (thanks Yui (@yui-915)!)
Localization, Internationalization, Documentation
- Improved Japanese translations (#100, #232) (thanks Masanari Mizuno (@mznms), Seiichi Horie (@suikan4github)!)
- Improved French localizations (#129, #213) (thanks Daniel Jacobs (@dan-jac), Aloïs MASSON--CLAUDEZ (@Packingdustry)!)
- Various spelling mistakes were fixed (#174, #206, #313) (thanks benja2998 (@benja2998), Josh Soref (@jsoref), Noritaka Kobayashi (@noritaka1166)!)
- Our
--helpmessage is now a lot more informative (#181) (thanks Smukx ♠ (@Whitecat18)!) - The repository now contains a preliminary man page (#263) (thanks rhubarb-geek-nz!)
1.0.0
Welcome to the first public release of Edit!
We hope you like it, despite its small nature. Maybe you can help it grow?
File bugs, feature requests, and any ideas in our issue tracker!
