1package main 2 3import "time" 4 5type sortMethod byte 6 7const ( 8 naturalSort sortMethod = iota 9 nameSort 10 sizeSort 11 timeSort 12 atimeSort 13 ctimeSort 14 extSort 15) 16 17type sortOption byte 18 19const ( 20 dirfirstSort sortOption = 1 << iota 21 hiddenSort 22 reverseSort 23) 24 25type sortType struct { 26 method sortMethod 27 option sortOption 28} 29 30var gOpts struct { 31 anchorfind bool 32 autoquit bool 33 dircache bool 34 dircounts bool 35 dironly bool 36 drawbox bool 37 globsearch bool 38 icons bool 39 ignorecase bool 40 ignoredia bool 41 incfilter bool 42 incsearch bool 43 mouse bool 44 number bool 45 preview bool 46 relativenumber bool 47 smartcase bool 48 smartdia bool 49 waitmsg string 50 wrapscan bool 51 wrapscroll bool 52 findlen int 53 period int 54 scrolloff int 55 tabstop int 56 errorfmt string 57 filesep string 58 ifs string 59 previewer string 60 cleaner string 61 promptfmt string 62 shell string 63 shellflag string 64 timefmt string 65 truncatechar string 66 ratios []int 67 hiddenfiles []string 68 info []string 69 shellopts []string 70 keys map[string]expr 71 cmdkeys map[string]expr 72 cmds map[string]expr 73 sortType sortType 74} 75 76func init() { 77 gOpts.anchorfind = true 78 gOpts.autoquit = false 79 gOpts.dircache = true 80 gOpts.dircounts = false 81 gOpts.dironly = false 82 gOpts.drawbox = false 83 gOpts.globsearch = false 84 gOpts.icons = false 85 gOpts.ignorecase = true 86 gOpts.ignoredia = true 87 gOpts.incfilter = false 88 gOpts.incsearch = false 89 gOpts.mouse = false 90 gOpts.number = false 91 gOpts.preview = true 92 gOpts.relativenumber = false 93 gOpts.smartcase = true 94 gOpts.smartdia = false 95 gOpts.waitmsg = "Press any key to continue" 96 gOpts.wrapscan = true 97 gOpts.wrapscroll = false 98 gOpts.findlen = 1 99 gOpts.period = 0 100 gOpts.scrolloff = 0 101 gOpts.tabstop = 8 102 gOpts.errorfmt = "\033[7;31;47m%s\033[0m" 103 gOpts.filesep = "\n" 104 gOpts.ifs = "" 105 gOpts.previewer = "" 106 gOpts.cleaner = "" 107 gOpts.promptfmt = "\033[32;1m%u@%h\033[0m:\033[34;1m%d\033[0m\033[1m%f\033[0m" 108 gOpts.shell = gDefaultShell 109 gOpts.shellflag = gDefaultShellFlag 110 gOpts.timefmt = time.ANSIC 111 gOpts.truncatechar = "~" 112 gOpts.ratios = []int{1, 2, 3} 113 gOpts.hiddenfiles = []string{".*"} 114 gOpts.info = nil 115 gOpts.shellopts = nil 116 gOpts.sortType = sortType{naturalSort, dirfirstSort} 117 118 gOpts.keys = make(map[string]expr) 119 120 gOpts.keys["k"] = &callExpr{"up", nil, 1} 121 gOpts.keys["<up>"] = &callExpr{"up", nil, 1} 122 gOpts.keys["<c-u>"] = &callExpr{"half-up", nil, 1} 123 gOpts.keys["<c-b>"] = &callExpr{"page-up", nil, 1} 124 gOpts.keys["<pgup>"] = &callExpr{"page-up", nil, 1} 125 gOpts.keys["j"] = &callExpr{"down", nil, 1} 126 gOpts.keys["<down>"] = &callExpr{"down", nil, 1} 127 gOpts.keys["<c-d>"] = &callExpr{"half-down", nil, 1} 128 gOpts.keys["<c-f>"] = &callExpr{"page-down", nil, 1} 129 gOpts.keys["<pgdn>"] = &callExpr{"page-down", nil, 1} 130 gOpts.keys["h"] = &callExpr{"updir", nil, 1} 131 gOpts.keys["<left>"] = &callExpr{"updir", nil, 1} 132 gOpts.keys["l"] = &callExpr{"open", nil, 1} 133 gOpts.keys["<right>"] = &callExpr{"open", nil, 1} 134 gOpts.keys["q"] = &callExpr{"quit", nil, 1} 135 gOpts.keys["gg"] = &callExpr{"top", nil, 1} 136 gOpts.keys["<home>"] = &callExpr{"top", nil, 1} 137 gOpts.keys["G"] = &callExpr{"bottom", nil, 1} 138 gOpts.keys["<end>"] = &callExpr{"bottom", nil, 1} 139 gOpts.keys["<space>"] = &listExpr{[]expr{&callExpr{"toggle", nil, 1}, &callExpr{"down", nil, 1}}, 1} 140 gOpts.keys["v"] = &callExpr{"invert", nil, 1} 141 gOpts.keys["u"] = &callExpr{"unselect", nil, 1} 142 gOpts.keys["y"] = &callExpr{"copy", nil, 1} 143 gOpts.keys["d"] = &callExpr{"cut", nil, 1} 144 gOpts.keys["c"] = &callExpr{"clear", nil, 1} 145 gOpts.keys["p"] = &callExpr{"paste", nil, 1} 146 gOpts.keys["<c-l>"] = &callExpr{"redraw", nil, 1} 147 gOpts.keys["<c-r>"] = &callExpr{"reload", nil, 1} 148 gOpts.keys[":"] = &callExpr{"read", nil, 1} 149 gOpts.keys["$"] = &callExpr{"shell", nil, 1} 150 gOpts.keys["%"] = &callExpr{"shell-pipe", nil, 1} 151 gOpts.keys["!"] = &callExpr{"shell-wait", nil, 1} 152 gOpts.keys["&"] = &callExpr{"shell-async", nil, 1} 153 gOpts.keys["f"] = &callExpr{"find", nil, 1} 154 gOpts.keys["F"] = &callExpr{"find-back", nil, 1} 155 gOpts.keys[";"] = &callExpr{"find-next", nil, 1} 156 gOpts.keys[","] = &callExpr{"find-prev", nil, 1} 157 gOpts.keys["/"] = &callExpr{"search", nil, 1} 158 gOpts.keys["?"] = &callExpr{"search-back", nil, 1} 159 gOpts.keys["n"] = &callExpr{"search-next", nil, 1} 160 gOpts.keys["N"] = &callExpr{"search-prev", nil, 1} 161 gOpts.keys["m"] = &callExpr{"mark-save", nil, 1} 162 gOpts.keys["'"] = &callExpr{"mark-load", nil, 1} 163 gOpts.keys[`"`] = &callExpr{"mark-remove", nil, 1} 164 gOpts.keys[`r`] = &callExpr{"rename", nil, 1} 165 gOpts.keys["<c-n>"] = &callExpr{"cmd-history-next", nil, 1} 166 gOpts.keys["<c-p>"] = &callExpr{"cmd-history-prev", nil, 1} 167 168 gOpts.keys["zh"] = &setExpr{"hidden!", ""} 169 gOpts.keys["zr"] = &setExpr{"reverse!", ""} 170 gOpts.keys["zn"] = &setExpr{"info", ""} 171 gOpts.keys["zs"] = &setExpr{"info", "size"} 172 gOpts.keys["zt"] = &setExpr{"info", "time"} 173 gOpts.keys["za"] = &setExpr{"info", "size:time"} 174 gOpts.keys["sn"] = &listExpr{[]expr{&setExpr{"sortby", "natural"}, &setExpr{"info", ""}}, 1} 175 gOpts.keys["ss"] = &listExpr{[]expr{&setExpr{"sortby", "size"}, &setExpr{"info", "size"}}, 1} 176 gOpts.keys["st"] = &listExpr{[]expr{&setExpr{"sortby", "time"}, &setExpr{"info", "time"}}, 1} 177 gOpts.keys["sa"] = &listExpr{[]expr{&setExpr{"sortby", "atime"}, &setExpr{"info", "atime"}}, 1} 178 gOpts.keys["sc"] = &listExpr{[]expr{&setExpr{"sortby", "ctime"}, &setExpr{"info", "ctime"}}, 1} 179 gOpts.keys["se"] = &listExpr{[]expr{&setExpr{"sortby", "ext"}, &setExpr{"info", ""}}, 1} 180 gOpts.keys["gh"] = &callExpr{"cd", []string{"~"}, 1} 181 182 gOpts.cmdkeys = make(map[string]expr) 183 184 gOpts.cmdkeys["<space>"] = &callExpr{"cmd-insert", []string{" "}, 1} 185 gOpts.cmdkeys["<esc>"] = &callExpr{"cmd-escape", nil, 1} 186 gOpts.cmdkeys["<tab>"] = &callExpr{"cmd-complete", nil, 1} 187 gOpts.cmdkeys["<enter>"] = &callExpr{"cmd-enter", nil, 1} 188 gOpts.cmdkeys["<c-j>"] = &callExpr{"cmd-enter", nil, 1} 189 gOpts.cmdkeys["<c-n>"] = &callExpr{"cmd-history-next", nil, 1} 190 gOpts.cmdkeys["<c-p>"] = &callExpr{"cmd-history-prev", nil, 1} 191 gOpts.cmdkeys["<delete>"] = &callExpr{"cmd-delete", nil, 1} 192 gOpts.cmdkeys["<c-d>"] = &callExpr{"cmd-delete", nil, 1} 193 gOpts.cmdkeys["<backspace>"] = &callExpr{"cmd-delete-back", nil, 1} 194 gOpts.cmdkeys["<backspace2>"] = &callExpr{"cmd-delete-back", nil, 1} 195 gOpts.cmdkeys["<left>"] = &callExpr{"cmd-left", nil, 1} 196 gOpts.cmdkeys["<c-b>"] = &callExpr{"cmd-left", nil, 1} 197 gOpts.cmdkeys["<right>"] = &callExpr{"cmd-right", nil, 1} 198 gOpts.cmdkeys["<c-f>"] = &callExpr{"cmd-right", nil, 1} 199 gOpts.cmdkeys["<home>"] = &callExpr{"cmd-home", nil, 1} 200 gOpts.cmdkeys["<c-a>"] = &callExpr{"cmd-home", nil, 1} 201 gOpts.cmdkeys["<end>"] = &callExpr{"cmd-end", nil, 1} 202 gOpts.cmdkeys["<c-e>"] = &callExpr{"cmd-end", nil, 1} 203 gOpts.cmdkeys["<c-u>"] = &callExpr{"cmd-delete-home", nil, 1} 204 gOpts.cmdkeys["<c-k>"] = &callExpr{"cmd-delete-end", nil, 1} 205 gOpts.cmdkeys["<c-w>"] = &callExpr{"cmd-delete-unix-word", nil, 1} 206 gOpts.cmdkeys["<c-y>"] = &callExpr{"cmd-yank", nil, 1} 207 gOpts.cmdkeys["<c-t>"] = &callExpr{"cmd-transpose", nil, 1} 208 gOpts.cmdkeys["<c-c>"] = &callExpr{"cmd-interrupt", nil, 1} 209 gOpts.cmdkeys["<a-f>"] = &callExpr{"cmd-word", nil, 1} 210 gOpts.cmdkeys["<a-b>"] = &callExpr{"cmd-word-back", nil, 1} 211 gOpts.cmdkeys["<a-c>"] = &callExpr{"cmd-capitalize-word", nil, 1} 212 gOpts.cmdkeys["<a-d>"] = &callExpr{"cmd-delete-word", nil, 1} 213 gOpts.cmdkeys["<a-u>"] = &callExpr{"cmd-uppercase-word", nil, 1} 214 gOpts.cmdkeys["<a-l>"] = &callExpr{"cmd-lowercase-word", nil, 1} 215 gOpts.cmdkeys["<a-t>"] = &callExpr{"cmd-transpose-word", nil, 1} 216 217 gOpts.cmds = make(map[string]expr) 218 219 setDefaults() 220} 221