Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T03:29:31.940Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

toggle_comments.rs

146 lines · 6.4 KB · rust
1use crate::{Vim, motion::Motion, object::Object};
2use collections::HashMap;
3use editor::{Bias, SelectionEffects, display_map::ToDisplayPoint};
4use gpui::{Context, Window};
5use language::SelectionGoal;
6
7impl Vim {
8    pub fn toggle_comments_motion(
9        &mut self,
10        motion: Motion,
11        times: Option<usize>,
12        forced_motion: bool,
13        window: &mut Window,
14        cx: &mut Context<Self>,
15    ) {
16        self.stop_recording(cx);
17        self.update_editor(cx, |_, editor, cx| {
18            let text_layout_details = editor.text_layout_details(window, cx);
19            editor.transact(window, cx, |editor, window, cx| {
20                let mut selection_starts: HashMap<_, _> = Default::default();
21                editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
22                    s.move_with(&mut |map, selection| {
23                        let anchor = map.display_point_to_anchor(selection.head(), Bias::Right);
24                        selection_starts.insert(selection.id, anchor);
25                        motion.expand_selection(
26                            map,
27                            selection,
28                            times,
29                            &text_layout_details,
30                            forced_motion,
31                        );
32                    });
33                });
34                editor.toggle_comments(&Default::default(), window, cx);
35                editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
36                    s.move_with(&mut |map, selection| {
37                        let anchor = selection_starts.remove(&selection.id).unwrap();
38                        selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
39                    });
40                });
41            });
42        });
43    }
44
45    pub fn toggle_comments_object(
46        &mut self,
47        object: Object,
48        around: bool,
49        times: Option<usize>,
50        window: &mut Window,
51        cx: &mut Context<Self>,
52    ) {
53        self.stop_recording(cx);
54        self.update_editor(cx, |_, editor, cx| {
55            editor.transact(window, cx, |editor, window, cx| {
56                let mut original_positions: HashMap<_, _> = Default::default();
57                editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
58                    s.move_with(&mut |map, selection| {
59                        let anchor = map.display_point_to_anchor(selection.head(), Bias::Right);
60                        original_positions.insert(selection.id, anchor);
61                        object.expand_selection(map, selection, around, times);
62                    });
63                });
64                editor.toggle_comments(&Default::default(), window, cx);
65                editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
66                    s.move_with(&mut |map, selection| {
67                        let anchor = original_positions.remove(&selection.id).unwrap();
68                        selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
69                    });
70                });
71            });
72        });
73    }
74
75    pub fn toggle_block_comments_motion(
76        &mut self,
77        motion: Motion,
78        times: Option<usize>,
79        forced_motion: bool,
80        window: &mut Window,
81        cx: &mut Context<Self>,
82    ) {
83        self.stop_recording(cx);
84        self.update_editor(cx, |_, editor, cx| {
85            let text_layout_details = editor.text_layout_details(window, cx);
86            editor.transact(window, cx, |editor, window, cx| {
87                editor.set_clip_at_line_ends(false, cx);
88                let mut selection_starts: HashMap<_, _> = Default::default();
89                editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
90                    s.move_with(&mut |map, selection| {
91                        let anchor = map.display_point_to_anchor(selection.head(), Bias::Right);
92                        selection_starts.insert(selection.id, anchor);
93                        motion.expand_selection(
94                            map,
95                            selection,
96                            times,
97                            &text_layout_details,
98                            forced_motion,
99                        );
100                    });
101                });
102                editor.toggle_block_comments(&Default::default(), window, cx);
103                editor.set_clip_at_line_ends(true, cx);
104                editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
105                    s.move_with(&mut |map, selection| {
106                        let anchor = selection_starts.remove(&selection.id).unwrap();
107                        selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
108                    });
109                });
110            });
111        });
112    }
113
114    pub fn toggle_block_comments_object(
115        &mut self,
116        object: Object,
117        around: bool,
118        times: Option<usize>,
119        window: &mut Window,
120        cx: &mut Context<Self>,
121    ) {
122        self.stop_recording(cx);
123        self.update_editor(cx, |_, editor, cx| {
124            editor.transact(window, cx, |editor, window, cx| {
125                editor.set_clip_at_line_ends(false, cx);
126                let mut original_positions: HashMap<_, _> = Default::default();
127                editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
128                    s.move_with(&mut |map, selection| {
129                        let anchor = map.display_point_to_anchor(selection.head(), Bias::Right);
130                        original_positions.insert(selection.id, anchor);
131                        object.expand_selection(map, selection, around, times);
132                    });
133                });
134                editor.toggle_block_comments(&Default::default(), window, cx);
135                editor.set_clip_at_line_ends(true, cx);
136                editor.change_selections(SelectionEffects::no_scroll(), window, cx, |s| {
137                    s.move_with(&mut |map, selection| {
138                        let anchor = original_positions.remove(&selection.id).unwrap();
139                        selection.collapse_to(anchor.to_display_point(map), SelectionGoal::None);
140                    });
141                });
142            });
143        });
144    }
145}
146
Served at tenant.openagents/omega Member data and write actions are omitted.