summary refs log tree commit diff stats
path: root/TODO
blob: 715ebc1b9fd268eab0e0dfb816f38b9b04cd754f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Console

   (X) #0   09/12/06  console commands
   (X) #1   09/12/06  quick find
   (X) #2   09/12/06  open with
   (X) #4   09/12/06  history for console
   (X) #13  09/12/27  display docstring of a command


General

   (X) #5   09/12/06  move code from fm into objects
   (X) #6   09/12/06  move main to __init__
   (X) #7   09/12/06  cooler titlebar
   (X) #8   09/12/17  Add operations to modify files/directories
   (X) #9   09/12/24  add a widget for managing running operations
   (X) #10  09/12/24  sorting
   (X) #11  09/12/27  filter
   (X) #12  09/12/27  jump through the list in a specific order
   (X) #14  09/12/29  make filelists inherit from pagers
   (X) #15  09/12/29  better way of running processes!!~
   (X) #16  10/01/01  list of bookmarks
   (X) #21  10/01/01  write help!
   (X) #22  10/01/03  add getopt options to change flags/mode
   (X) #29  10/01/06  add chmod command
   (X) #30  10/01/06  add a way to create symlinks
   (X) #32  10/01/08  place the (hidden) cursor to a meaningful position
   (X) #34  10/01/09  display free disk space
   (X) #35  10/01/09  display disk usage of files in current directory
   ( ) #36  10/01/11  help coloring is terribly inefficient
   (X) #37  10/01/13  better tab completion for OpenConsole
   ( ) #38  10/01/16  searching in pager
   (X) #39  10/01/17  flushinput not always good
   (X) #42  10/01/17  memorize directory for `` when using :cd
   (X) #43  10/01/18  internally treat the bookmarks ` and ' the same
   ( ) #44  10/01/18  more error messages :P
   (X) #47  10/01/19  less restricive auto preview
   (X) #48  10/01/19  abbreviate commands with first unambiguous substring
   ( ) #50  10/01/19  add more unit tests
   ( ) #51  10/01/21  remove directory.marked_items ?
   (X) #55  10/01/24  allow change of filename when pasting
          you're given the choice between overwriting or appending a "_"
   ( ) #56  10/01/30  warn before deleting mount points
   ( ) #57  10/01/30  warn before deleting unseen marked files
   (X) #58  10/02/04  change the title of the terminal
   (X) #61  10/02/09  show sum of size of marked files
   (X) #63  10/02/15  limit filesize in previews
   ( ) #64  10/02/25  scroll in previews
   (X) #66  10/02/28  explain how colorschemes work
   (X) #70  10/03/14  mouse handler for titlebar
   (X) #71  10/03/21  previews: black/whitelist + read file
   (X) #79  10/04/08  tab number zero
   ( ) #80  10/04/08  when closing tabs, avoid gaps?


Bugs

   (X) #17  10/01/01  why do bookmarks disappear sometimes?
   (X) #18  10/01/01  fix notify widget (by adding a LogView?)
   (X) #19  10/01/01  resizing after pressing g
   (X) #23  10/01/04  stop dir loading with ^C -> wont load anymore
   (X) #25  10/01/06  directories sometimes dont reload correctly
   (X) #26  10/01/06  :delete on symlinks of directories fails
   (X) #31  10/01/06  ^C breaks cd-after-exit by stopping sourced shell script
   (X) #40  10/01/17  freeze with unavailable sshfs
          Not rangers fault (?)
   (X) #41  10/01/17  capital file extensions are not recognized
   (X) #46  10/01/19  old username displayed after using su
   (X) #49  10/01/19  fix unit tests :'(
   (X) #52  10/01/23  special characters in tab completion
   (X) #54  10/01/23  max_dirsize_for_autopreview not working
   ( ) #60  10/02/05  utf support improvable
   (X) #62  10/02/15  curs_set can raise an exception
   ( ) #65  10/02/16  "source ranger ranger some/file.txt" shouldn't cd after exit
   (X) #67  10/03/08  terminal title in tty
   (X) #69  10/03/11  tab-completion breaks with Apps subclass
   (X) #73  10/03/21  when clicking on the first column, it goes 1x down
   (X) #74  10/03/21  console doesn't scroll
   ( ) #78  10/03/31  broken preview when deleting all files in a directory


Ideas

   ( ) #20  10/01/01  use inotify to monitor filesystem changes
   ( ) #24  10/01/06  progress bar
   (X) #27  10/01/06  hide bookmarks in list which contain hidden dir
   (X) #28  10/01/06  use regexp instead of string for searching
   ( ) #33  10/01/08  accelerate mousewheel speed
   (X) #45  10/01/18  hooks for events like setting changes
   ( ) #53  10/01/23  merge fm and environment
   ( ) #68  10/03/10  threads, to seperate ui and loading
   ( ) #72  10/03/21  ranger daemon which does the slow io tasks
   ( ) #75  10/03/28  navigate in history
   (X) #76  10/03/28  save history between sessions
   (X) #77  10/03/28  colorscheme overlay in options.py
an class="w"> [ {1: number, foo: bar} <- copy 34 # test comment ] +parse: product: {1: "number", "foo": "bar"} $error: 0 :(scenario dilated_reagent_with_comment_immediately_following) def main [ 1:number <- copy {34: literal} # test comment ] $error: 0 //: First augment next_word to group balanced brackets together. :(before "End next_word Special-cases") if (in.peek() == '(') return slurp_balanced_bracket(in); // treat curlies mostly like parens, but don't mess up labels if (start_of_dilated_reagent(in)) return slurp_balanced_bracket(in); :(code) // A curly is considered a label if it's the last thing on a line. Dilated // reagents should remain all on one line. bool start_of_dilated_reagent(istream& in) { if (in.peek() != '{') return false; int pos = in.tellg(); in.get(); // slurp '{' skip_whitespace_but_not_newline(in); char next = in.peek(); in.seekg(pos); return next != '\n'; } // Assume the first letter is an open bracket, and read everything until the // matching close bracket. // We balance {} () and []. string slurp_balanced_bracket(istream& in) { ostringstream result; char c; list<char> open_brackets; while (in >> c) { if (c == '(') open_brackets.push_back(c); if (c == ')') { if (open_brackets.empty() || open_brackets.back() != '(') { raise << "unbalanced ')'\n" << end(); continue; } assert(open_brackets.back() == '('); open_brackets.pop_back(); } if (c == '[') open_brackets.push_back(c); if (c == ']') { if (open_brackets.empty() || open_brackets.back() != '[') { raise << "unbalanced ']'\n" << end(); continue; } open_brackets.pop_back(); } if (c == '{') open_brackets.push_back(c); if (c == '}') { if (open_brackets.empty() || open_brackets.back() != '{') { raise << "unbalanced '}'\n" << end(); continue; } open_brackets.pop_back(); } result << c; if (open_brackets.empty()) break; } skip_whitespace_and_comments_but_not_newline(in); return result.str(); } :(after "Parsing reagent(string s)") if (starts_with(s, "{")) { assert(properties.empty()); istringstream in(s); in >> std::noskipws; in.get(); // skip '{' name = slurp_key(in); if (name.empty()) { raise << "invalid reagent '" << s << "' without a name\n" << end(); return; } if (name == "}") { raise << "invalid empty reagent '" << s << "'\n" << end(); return; } { string s = next_word(in); if (s.empty()) { assert(!has_data(in)); raise << "incomplete dilated reagent at end of file (0)\n" << end(); return; } string_tree* type_names = new string_tree(s); // End Parsing Dilated Reagent Type Property(type_names) type = new_type_tree(type_names); delete type_names; } while (has_data(in)) { string key = slurp_key(in); if (key.empty()) continue; if (key == "}") continue; string s = next_word(in); if (s.empty()) { assert(!has_data(in)); raise << "incomplete dilated reagent at end of file (1)\n" << end(); return; } string_tree* value = new string_tree(s); // End Parsing Dilated Reagent Property(value) properties.push_back(pair<string, string_tree*>(key, value)); } return; } :(code) string slurp_key(istream& in) { string result = next_word(in); if (result.empty()) { assert(!has_data(in)); raise << "incomplete dilated reagent at end of file (2)\n" << end(); return result; } while (!result.empty() && *result.rbegin() == ':') strip_last(result); while (isspace(in.peek()) || in.peek() == ':') in.get(); return result; }