Commit Graph

839 Commits

Author SHA1 Message Date
Jakub Bartodziej
6cbc0aea92 Disable deleting from an empty buffer which can cause a crash. 2021-06-03 23:23:23 +09:00
Blaž Hrastnik
c0332bd935 Fix split sizes getting out of sync with the terminal size, refs #69 2021-06-03 10:28:49 +09:00
Rowan Herbert
1b67fae9f4 Fix panic when buffer larger than terminal width 2021-06-02 16:30:40 -07:00
Ivan Tham
f5f46b1fed Separate document history into Cell
As history is used separately from the rest of the edits, separating it
can avoid needless borrowing and cloning. But one need to be aware later.
2021-06-02 23:47:50 +08:00
Blaž Hrastnik
ce25aa951e Allow setting a filepath on :write 2021-06-01 17:26:03 +09:00
Blaž Hrastnik
2c48d65b15 Format document on save 2021-05-30 00:00:15 +09:00
Blaž Hrastnik
2100f5a2c0 Address clippy lint. 2021-05-17 23:01:45 +09:00
Blaž Hrastnik
8f6f329057 If switching to a previously open buffer in the same view, keep it's old offset 2021-05-17 16:36:13 +09:00
Blaž Hrastnik
4a9d1163e0 Hacky way to specify indent scopes per language via toml configs.
Can't do it via a scm query nicely because it returns an iterator over
all the matches, whereas we want to traverse the tree ourselves.

Can't extract the pattern data from a parsed query either.

Oh well, toml files for now.
2021-05-14 19:21:46 +09:00
Blaž Hrastnik
5cbb4efa6d Add the LICENSE file. 2021-05-11 01:44:00 +09:00
Blaž Hrastnik
35606a3daa Inline tui as helix-tui fork.
We only rely on some of the rendering primitives and implement our
Cursive-style compositor on top.
2021-05-09 17:52:55 +09:00
Blaž Hrastnik
c0a8b81487 Only send the document close event if we're closing the underlying buffer 2021-05-07 14:52:47 +09:00
Blaž Hrastnik
c20813690f View::new is infallible, so is editor.switch/new_file. 2021-05-07 14:45:49 +09:00
Blaž Hrastnik
f2c79e245b Allow switching views back to scratch buffers. 2021-05-07 14:36:37 +09:00
Blaž Hrastnik
418ee17b86 Canonicalize the path on open to avoid duplicates. 2021-05-07 14:30:23 +09:00
Blaž Hrastnik
7c915dc065 Add the :new command, don't crash if saving without filename. 2021-05-07 14:19:58 +09:00
Blaž Hrastnik
fd4fd12fa3 clippy lint 2021-05-06 17:20:00 +09:00
Blaž Hrastnik
d00414f81a Start moving more LSP calls into callbacks/futures without capturing self 2021-05-06 15:08:59 +09:00
Blaž Hrastnik
1ad0581ddd Eliminate a few more futures dependencies. 2021-05-06 14:33:53 +09:00
Blaž Hrastnik
355ad3cb82 Tokio migration. 2021-05-06 13:56:34 +09:00
Blaž Hrastnik
b6a22e955b Closer to a full flake build via naersk.
Blocked on https://github.com/NixOS/nix/issues/4423, build doesn't see
submodules.
2021-05-03 22:39:53 +09:00
Blaž Hrastnik
b0bdcab970 doc: Note about diagnostic mapping. 2021-05-03 17:47:48 +09:00
Blaž Hrastnik
28c167d71d doc: Be smarter about calculating modified status.
This way edit -> undo will properly show up as unmodified.
2021-05-03 17:23:11 +09:00
Blaž Hrastnik
b5b650cfe7 Fix the last line calculation inside ensure_cursor_in_view 2021-04-14 17:15:32 +09:00
Blaž Hrastnik
3e5f24a9d5 lsp: support both utf-8 and utf-16 offsets.
Still need to implement the clangd encoding negotiation, but it's
a start. Should also manually override to utf8 for pyls.
2021-04-14 15:39:31 +09:00
Blaž Hrastnik
180521fefe Adjust scroll() to match kakoune: only scroll the view if cursor in bounds. 2021-04-14 14:27:47 +09:00
Blaž Hrastnik
978f5114d8 Horizontal scrolling! It only took a year to get around to it. 2021-04-09 19:29:01 +09:00
Blaž Hrastnik
52da68e49a Render a separator between vertical splits. 2021-04-08 22:34:06 +09:00
Blaž Hrastnik
9f318a8529 Fix an issue with closing nested splits.
The parent id was never assigned to the split, so removing the container
when it became empty failed.
2021-04-08 22:34:06 +09:00
Blaž Hrastnik
8b33ba2284 Correct the naming issue with vsplit and hsplit being swapped. 2021-04-08 15:52:04 +09:00
Blaž Hrastnik
bc4e54c0c4 Load config files from ~/.config/helix, fallback to defaults. 2021-04-07 23:56:20 +09:00
Blaž Hrastnik
91462af546 Allow starting hx without a file. A new blank file will be created. 2021-04-06 19:02:22 +09:00
Blaž Hrastnik
cf7b19d711 Always update selection: Empty transactions can still change selections. 2021-04-06 17:29:39 +09:00
Blaž Hrastnik
0dbd5b61ef Simplify code by providin cx.current() = (view, doc). 2021-04-01 11:01:26 +09:00
Blaž Hrastnik
ceea5eacd8 clippy lint 2021-03-31 23:42:16 +09:00
Blaž Hrastnik
15c9a33ebc Drop doc.state. Use doc.text + doc.selections. 2021-03-31 23:23:13 +09:00
Blaž Hrastnik
6c4093c946 Weave through view_id references so that views into one file have independent selects. 2021-03-31 17:17:01 +09:00
Blaž Hrastnik
9eaef6e333 Fully drop State references. 2021-03-31 15:45:18 +09:00
Blaž Hrastnik
1b5316ea74 Track document modified state. 2021-03-30 18:23:12 +09:00
Blaž Hrastnik
742b3a709f Store intra-files jumps (goto) on the jumplist. 2021-03-29 16:32:42 +09:00
Blaž Hrastnik
c1f2a14453 view: document.rs cleanup 2021-03-29 15:22:43 +09:00
Blaž Hrastnik
aefafc25cd Replace Mode::Goto with just using on_next_key. 2021-03-29 15:04:29 +09:00
Blaž Hrastnik
cf0e191a6a Clippy lint 2021-03-25 17:45:52 +09:00
Blaž Hrastnik
a65395d94b Load theme from toml file. 2021-03-25 16:42:14 +09:00
Blaž Hrastnik
e3c4edae32 Add the machinery to load syntax config from TOML.
It's embedded into the binary at build time for now, but it's progress.
2021-03-25 15:26:25 +09:00
Blaž Hrastnik
8657c57cf2 Trivial jumplist implementation. 2021-03-24 18:01:26 +09:00
Blaž Hrastnik
4b176caded Reset first_line when changing files. 2021-03-24 16:56:29 +09:00
Blaž Hrastnik
8a0ab447ec editor.open can now either replace the current view or open in a split. 2021-03-24 14:28:26 +09:00
Blaž Hrastnik
b24cdd1295 Derive a separate ViewId type. 2021-03-24 14:03:20 +09:00
Blaž Hrastnik
8328fe926d Drop refcell use, make view simply ref doc.id. 2021-03-23 18:14:35 +09:00
Blaž Hrastnik
bf95ee27aa Store Document on the Editor type, make View reference it. 2021-03-22 13:53:43 +09:00
Blaž Hrastnik
5e6716c89c Add tab_width and indent_unit config. 2021-03-22 13:53:36 +09:00
Blaž Hrastnik
cbcacb1063 Merge some imports. 2021-03-22 12:40:07 +09:00
Blaž Hrastnik
c4792efead clippy lints 2021-03-22 12:29:55 +09:00
Blaž Hrastnik
c331721565 Finish hiding doc.state / State as an implementation detail. 2021-03-18 15:07:02 +09:00
Blaž Hrastnik
8ba1e15d29 Expose doc.syntax() via accessor. 2021-03-18 14:53:29 +09:00
Blaž Hrastnik
2b64f49f2c Document::new should just take a rope. 2021-03-18 14:44:32 +09:00
Blaž Hrastnik
e261f3c50d Expose doc.language_server as an accessor. 2021-03-18 14:40:22 +09:00
Blaž Hrastnik
59e6024186 Remove State from a few more signatures. 2021-03-18 14:17:32 +09:00
Blaž Hrastnik
8eaf9a432d Make Transaction::change only rely on the rope. 2021-03-18 13:39:56 +09:00
Blaž Hrastnik
51c15da3c3 Hold a reference to executor on the Editor type. 2021-03-16 23:14:51 +09:00
Blaž Hrastnik
e3ec5e31ec Fix goto code before merging. 2021-03-16 23:05:43 +09:00
Jan Hrastnik
eadad13efa preparing for gd merge 2021-03-16 23:03:29 +09:00
Jan Hrastnik
4e461bea2f editor.open now checks if view already exists 2021-03-16 23:03:29 +09:00
Jan Hrastnik
3869d7713e added goto functions in helix-term 2021-03-16 23:03:10 +09:00
Jan Hrastnik
b738ae1bc7 more goto lsp functions 2021-03-16 23:03:10 +09:00
Blaž Hrastnik
d8599f3a14 ui: Syntax highlight code inside markdown popups. 2021-03-16 16:38:09 +09:00
Blaž Hrastnik
54a7e893b7 lsp: Wire up didClose notification on editor.close. 2021-03-16 16:27:12 +09:00
Blaž Hrastnik
eca2a73ad0 lsp: Pass through language_id on didOpenTextDocument. 2021-03-16 16:13:41 +09:00
Blaž Hrastnik
143cfe13e0 minor: TODO comment cleanup 2021-03-16 15:41:42 +09:00
Blaž Hrastnik
dd91090a1a Implement keep_selections (filter selections on regex). 2021-03-15 17:09:18 +09:00
Blaž Hrastnik
bb87b08fc9 Configure language servers via LanguageConfiguration. 2021-03-14 17:14:34 +09:00
Blaž Hrastnik
1cf887dea9 Cleanup: use doc.selection() instead of doc.state.selection(). 2021-03-14 17:14:34 +09:00
Blaž Hrastnik
6cbfb050e2 lsp: Emit didSave notifications. 2021-03-12 16:25:12 +09:00
Blaž Hrastnik
9dcfe25e4a Use diagnostic.severity to distinguish between error colors. 2021-03-11 16:31:49 +09:00
Blaž Hrastnik
a5c4314940 commands: Improve scroll functions.
Followed kakoune's implementation, it's no longer janky and can scroll
all the way in either direction.
2021-03-04 16:15:34 +09:00
Blaž Hrastnik
8f4ff4c646 editor: We still want to be able to calculate cursor pos. 2021-03-02 15:44:09 +09:00
Blaž Hrastnik
ec4dd0a176 Add a selection mode again. 2021-03-01 14:31:34 +09:00
Blaž Hrastnik
00808afe3c ui: Make editor more resilient about being shrunk too small. 2021-03-01 14:23:10 +09:00
Blaž Hrastnik
6336c1da20 view: Reposition cursors on tree resize. 2021-02-26 15:53:19 +09:00
Blaž Hrastnik
8289bd1cb0 minor, fix clippy lint 2021-02-25 16:52:32 +09:00
Blaž Hrastnik
01907b3497 commands: Implement count for a few more commands. 2021-02-25 16:49:30 +09:00
Blaž Hrastnik
87a6d4e736 minor: Simplify some code. 2021-02-24 16:07:39 +09:00
Blaž Hrastnik
8b9b02f08b minor 2021-02-22 12:06:28 +09:00
Blaž Hrastnik
3b6c9648f3 fix clippy lint 2021-02-22 11:43:57 +09:00
Blaž Hrastnik
9132c6a591 Make some Document fields read-only. 2021-02-21 19:47:21 +09:00
Blaž Hrastnik
7da6bd6a71 commands: Simplify some code, only calling cx.doc() once. 2021-02-21 19:04:31 +09:00
Blaž Hrastnik
7877647cf0 Allow closing individual views. 2021-02-19 17:46:43 +09:00
Blaž Hrastnik
0827c45d94 view: Disable tree.fullscreen for now to appease clippy. 2021-02-18 18:36:24 +09:00
Blaž Hrastnik
c9dd1c930e treewide: &RopeSlice -> RopeSlice. It's Copy so no reason to pass by ref 2021-02-18 18:34:22 +09:00
Blaž Hrastnik
d5f9622e2e lsp: edit events change ranges need to affect each other. 2021-02-17 17:28:55 +09:00
Blaž Hrastnik
1ffd1e7633 Send updates to the lsp on undo/redo. 2021-02-16 18:11:17 +09:00
Blaž Hrastnik
b7da7f83c3 lsp: Test changeset_to_changes. 2021-02-16 15:45:46 +09:00
Blaž Hrastnik
de5170dcda Parse input counts: 10w, etc. 2021-02-09 16:39:17 +09:00
Blaž Hrastnik
5e73f83efa Implement vertical split calculations. 2021-02-09 15:59:42 +09:00
Blaž Hrastnik
d4b85ce18d popup: wip work on completion popups 2021-02-09 15:40:47 +09:00
Blaž Hrastnik
a924ad2885 simplify. 2021-02-05 16:06:48 +09:00
Blaž Hrastnik
c70080dd68 Work around rendering errors for positions offscreen. 2021-02-05 14:42:56 +09:00
Blaž Hrastnik
8f0ddf9632 Address clippy warnings. 2021-02-05 11:43:16 +09:00
Blaž Hrastnik
9c33b5340a A dumb "next view" implementation that works. 2021-02-04 19:49:29 +09:00
Blaž Hrastnik
5554910e08 Forgot to add the tree.rs definition... 2021-02-04 17:26:11 +09:00
Blaž Hrastnik
446a7e5743 Don't render selections/cursors on views not in focus. 2021-02-04 16:49:55 +09:00
Blaž Hrastnik
448c1abba0 View tree implementation: render multiple split views.
Cursors are still a bit buggy and we should render in focus statusbar
differently than in the other pane.
2021-02-03 19:36:54 +09:00
Blaž Hrastnik
05c7fb98df Refactoring: move language_servers into Editor, proper load for doc. 2021-01-21 16:55:46 +09:00
Blaž Hrastnik
777a80917d Address clippy lints. 2021-01-08 16:37:36 +09:00
Blaž Hrastnik
3bf4e1e8fa Update deps. 2021-01-06 14:08:23 +09:00
Blaž Hrastnik
3cbab20908 lsp: Fix pos_to_lsp_pos calculation. 2020-12-25 17:42:50 +09:00
Blaž Hrastnik
2ab069bb3f lsp: Work on syncing the state with the language server. 2020-12-25 17:20:09 +09:00
Blaž Hrastnik
ea502c8665 fix change -> change -> undo -> change -> undo -> undo. 2020-12-21 13:58:54 +09:00
Blaž Hrastnik
d181027225 fix: undo/redo selection handling. 2020-12-21 13:42:47 +09:00
Blaž Hrastnik
0b63e838e0 Port over Doc::relative_path. 2020-12-18 17:18:11 +09:00
Blaž Hrastnik
5103dc9617 move commands and keymap back to terminal.
Command needs to be able to deal with UI. We'll separate it again later
on.
2020-12-10 18:13:42 +09:00
Blaž Hrastnik
39bf1ca825 Update deps. 2020-12-03 13:12:07 +09:00
Blaž Hrastnik
a7869c728c wip 2020-12-03 13:12:07 +09:00
Blaž Hrastnik
3f707c19f4 Save command 2020-12-03 13:12:05 +09:00
Blaž Hrastnik
8f0bcfe286 Introduce a command context that carries the executor and other fields. 2020-12-03 13:11:12 +09:00
Blaž Hrastnik
ae8a9e5bac lsp: Make base request methods take &self instead of &mut self. 2020-12-03 13:10:35 +09:00
Blaž Hrastnik
cc6bdf8f66 Text change generation, RPC call handling. 2020-12-03 13:10:35 +09:00
Blaž Hrastnik
eff6fac9ec clippy lint 2020-12-03 13:10:35 +09:00
Blaž Hrastnik
f5981f72c2 Introduce Selection::point. 2020-12-03 13:10:35 +09:00
Blaž Hrastnik
55fa86248c Introduce doc.selection()/set_selection() 2020-12-03 13:10:35 +09:00
Blaž Hrastnik
e4070d4de0 Bump document version on undo/redo. 2020-12-03 13:10:35 +09:00
Blaž Hrastnik
efc5aa2016 Simplify old_state handling. 2020-12-03 13:10:35 +09:00
Blaž Hrastnik
c0e17dd324 Fix undo/redo not updating the syntax tree. 2020-12-03 13:10:35 +09:00
Blaž Hrastnik
b39849dde1 Refactor: Document type as a wrapper around barebones State. 2020-12-03 13:10:35 +09:00
Blaž Hrastnik
ef5e5f9296 state.version tracking 2020-12-03 13:10:34 +09:00
Blaž Hrastnik
49254d7180 Total mess but it works: diagnostic marking. 2020-12-03 13:10:34 +09:00
Blaž Hrastnik
f9bfba4d96 Reroute LSP notification events into the main app event loop. 2020-12-03 13:10:32 +09:00
Blaž Hrastnik
64b5b23315 Move theme from view to editor, support multiple views in editor. 2020-12-03 13:07:55 +09:00
Blaž Hrastnik
b2b3083a62 Support multiple open views. 2020-12-03 13:04:42 +09:00
Jan Hrastnik
1a3c647adf added col_height calculation 2020-11-13 00:07:21 +01:00
Jan Hrastnik
2b44031929 various fixes 2020-11-03 10:57:12 +01:00
Jan Hrastnik
c9e9fcf7c5 added base col width 2020-11-02 10:41:27 +01:00
Jan Hrastnik
956173bcea completion is now added to prompt.line 2020-10-24 14:06:10 +02:00
Jan Hrastnik
a123cf37a0 several fixes 2020-10-24 13:36:34 +02:00
Jan Hrastnik
8f37c26f35 completion highlighting 2020-10-20 23:02:02 +02:00
Jan Hrastnik
06502e5a2e added prompt close 2020-10-19 19:39:35 +02:00
Jan Hrastnik
ae8ff9623e fix warnings 2020-10-19 16:16:00 +02:00
Blaž Hrastnik
bc2c652fe8 Bugfix 2020-10-16 16:58:26 +09:00
Blaž Hrastnik
49b4cdb566 Refactor command calling. 2020-10-16 14:37:12 +09:00
Blaž Hrastnik
49cc6c1924 Refactor Editor into Application and Editor/Workspace. 2020-10-16 12:30:46 +09:00
Jan Hrastnik
267602328c changed fn to fnmut 2020-10-16 12:02:05 +09:00
Jan Hrastnik
fa55b1e51c added closures to prompt 2020-10-16 12:01:46 +09:00
Jan Hrastnik
3c0f187c5b added move start&end 2020-10-16 12:01:21 +09:00
Jan Hrastnik
7d58378374 added move left&right, delete char 2020-10-16 12:01:21 +09:00
Jan Hrastnik
ed03ec92a8 moved prompt command matching to prompt.rs 2020-10-16 12:00:28 +09:00
Jan Hrastnik
7208c86f23 separated statusline and prompt 2020-10-16 11:59:09 +09:00
Jan Hrastnik
c60f1a6553 created prompt.rs 2020-10-16 11:59:09 +09:00
Jan Hrastnik
0c0c2c7103 modified editor.render() to prepare for command mode rendering 2020-10-16 11:53:31 +09:00
Blaž Hrastnik
16828d322a wip 2020-10-15 23:31:37 +09:00
Blaž Hrastnik
6e658aae1c Auto-indent on enter based on tree-sitter scopes. 2020-10-14 18:07:42 +09:00
Blaž Hrastnik
4996f1b4d3 Move insert mode commands to a separate namespace. 2020-10-14 13:35:54 +09:00
Blaž Hrastnik
77ff51cef9 Share the padding definition too. 2020-10-14 13:35:54 +09:00
Blaž Hrastnik
d64f4beede Share tab width definitions. 2020-10-14 13:35:54 +09:00
Blaž Hrastnik
989080afed clippy lint 2020-10-13 23:13:56 +09:00
Blaž Hrastnik
0826739c62 < as unindent 2020-10-13 23:13:56 +09:00
Blaž Hrastnik
00e661f600 Indent draft, linewise paste 2020-10-13 23:13:56 +09:00
Blaž Hrastnik
490e23b645 Simplify changeset tracking. 2020-10-13 23:13:56 +09:00
Blaž Hrastnik
518426b9f4 Factor out append_changes_to_history 2020-10-13 23:13:56 +09:00
Blaž Hrastnik
a5be718dc6 x for line selection 2020-10-13 23:13:56 +09:00
Blaž Hrastnik
8098279676 Cleanup 2020-10-13 23:13:56 +09:00
Blaž Hrastnik
1dba0f2b1c Simple yank/paste registers. 2020-10-13 23:13:56 +09:00
Blaž Hrastnik
b765c17896 Hacky undo/redo integration. 2020-10-13 23:13:56 +09:00
Blaž Hrastnik
fd311fb8ad Undo tree draft.
We keep a tree of transactions. This allows for persistent undo by
simply serializing the changesets.
2020-10-13 23:13:56 +09:00
Blaž Hrastnik
03795e5674 Fix cursor jumping when we're positioned in top padding pressing up. 2020-10-07 14:16:12 +09:00
Blaž Hrastnik
7f07e66768 Cleanup: track first_line as usize. 2020-10-07 14:03:38 +09:00
Blaž Hrastnik
61ef0a4e87 Fix scrolling calculations. 2020-10-07 13:58:13 +09:00
Jan Hrastnik
750610f0e7 various fixes 2020-10-07 01:41:09 +02:00
Jan Hrastnik
88f93399fd fixed page up/down 2020-10-05 17:58:16 +02:00
Jan Hrastnik
1035b2aea1 started work on page up/down 2020-10-05 17:18:29 +02:00
Jan Hrastnik
7ccc4993f4 added ge command 2020-10-05 15:47:15 +02:00
Jan Hrastnik
b7ef7985ee added gg command 2020-10-05 15:37:33 +02:00
Jan Hrastnik
038201647c started work on goto mode 2020-10-04 23:47:37 +02:00
Blaž Hrastnik
226fa89d46 Fix line number rendering. 2020-10-04 17:37:47 +09:00
Jan Hrastnik
dc11124df5 added tab to insert mode 2020-10-04 15:40:16 +09:00
Blaž Hrastnik
77d75d9275 Collapse cursors command (;). 2020-10-01 18:44:46 +09:00
Blaž Hrastnik
5945815d97 Fix cursor rendering & placement on append mode. 2020-10-01 18:44:12 +09:00
Blaž Hrastnik
d9d59cd209 Simplify keymap.rs with macros 2020-10-01 16:06:42 +09:00
Blaž Hrastnik
4c49197e20 Fix delete key. 2020-10-01 16:06:28 +09:00
Blaž Hrastnik
e39bd211d1 argh -> clap to speed up compilation (no syn/proc_macro) 2020-10-01 12:25:03 +09:00
Jan Hrastnik
dd94a39810 moved insert keymap to keymap.rs 2020-10-01 01:15:42 +02:00
Blaž Hrastnik
3feb00283d clippy warnings 2020-09-29 18:07:05 +09:00
Blaž Hrastnik
1bb01d27ae Simplify line ending calculation. 2020-09-29 17:49:19 +09:00
Blaž Hrastnik
36e7e2133f Split selection on regex, fix InputEdit generation. 2020-09-29 01:01:27 +09:00
Blaž Hrastnik
3020077da8 Extend selection commands. 2020-09-29 01:00:35 +09:00
Jan Hrastnik
fbe313779e added move_line_start and move_line_end 2020-09-25 16:04:58 +02:00
Blaž Hrastnik
e0785aabe7 Move-by-word commands: w, b, e. 2020-09-24 19:16:35 +09:00
Blaž Hrastnik
eb639eb2e4 More robust syntax detection/grammar loading. 2020-09-22 18:27:37 +09:00
Blaž Hrastnik
935cfeae57 Split parts of helix-term into helix-view.
It still largely depends on term for some types but I plan to change
that later.
2020-09-21 18:24:16 +09:00