1    type Editor
2        def revert self =
3            if not self.app.os_window.is_control_pressed then
4                return
5    
6            let changed =
7                let set = Set<FileItem>.new
8                let changed = List<FileItem>.new
9                for item in self.changed do
10                   if not set.contains item then
11                       set.add item
12                       changed.add item
13   
14               changed
15   
16           let selected_item = self.tree.selected_item.map { _ as FileItem }
17           self.tree.selected_item = None
18           for item in changed do
19               let maybe_parent = item.parent
20               let maybe_actual_parent = item.actual_parent
21               if maybe_parent <> maybe_actual_parent then
22                   if maybe_parent ? Some parent then
23                       parent.items.remove item
24   
25                   if maybe_actual_parent ? Some actual_parent then
26                       actual_parent.items.add item
27   
28                   item.parent = maybe_actual_parent
29   
30               item.name = item.actual_name
31                    path = item.actual_path
32                    directory_path = item.actual_directory_path
33   
34           for item in changed do
35               if item.is_directory && item.actual_path.is_not_empty then
36                   restore_order item
37   
38           if selected_item.is_some
39              && selected_item.unwrap.actual_path.is_not_empty
40           then
41               self.tree.selected_item = selected_item.unwrap
42   
43           for item in changed do
44               if item.actual_path.is_empty then
45                   if self.file_item_tab_items.contains item then
46                       self.tab_control.close_tab self.file_item_tab_items[item]
47   
48           self.changed.clear
49