Changeset 025759c in mainline
- Timestamp:
- 2009-11-29T12:47:25Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- da2bd08
- Parents:
- 19528516
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bdsh/input.c
r19528516 r025759c 56 56 57 57 typedef enum { 58 seek_cell,59 seek_max60 } seek_dist_t;61 62 typedef enum {63 58 seek_backward = -1, 64 59 seek_forward = 1 … … 183 178 } 184 179 185 static void tinput_seek(tinput_t *ti, seek_dir_t dir, seek_dist_t dist) 186 { 187 switch (dist) { 188 case seek_cell: 189 ti->pos += dir; 190 break; 191 case seek_max: 192 if (dir == seek_backward) 193 ti->pos = 0; 194 else 195 ti->pos = ti->nc; 196 break; 197 } 198 199 if (ti->pos < 0) ti->pos = 0; 200 if (ti->pos > ti->nc) ti->pos = ti->nc; 180 static void tinput_seek_cell(tinput_t *ti, seek_dir_t dir) 181 { 182 if (dir == seek_forward) { 183 if (ti->pos < ti->nc) 184 ti->pos += 1; 185 } else { 186 if (ti->pos > 0) 187 ti->pos -= 1; 188 } 189 190 tinput_position_caret(ti); 191 } 192 193 static void tinput_seek_word(tinput_t *ti, seek_dir_t dir) 194 { 195 if (dir == seek_forward) { 196 if (ti->pos == ti->nc) 197 return; 198 199 while (1) { 200 ti->pos += 1; 201 202 if (ti->pos == ti->nc) 203 break; 204 205 if (ti->buffer[ti->pos - 1] == ' ' && 206 ti->buffer[ti->pos] != ' ') 207 break; 208 } 209 } else { 210 if (ti->pos == 0) 211 return; 212 213 while (1) { 214 ti->pos -= 1; 215 216 if (ti->pos == 0) 217 break; 218 219 if (ti->buffer[ti->pos - 1] == ' ' && 220 ti->buffer[ti->pos] != ' ') 221 break; 222 } 223 224 } 225 226 tinput_position_caret(ti); 227 } 228 229 static void tinput_seek_max(tinput_t *ti, seek_dir_t dir) 230 { 231 if (dir == seek_backward) 232 ti->pos = 0; 233 else 234 ti->pos = ti->nc; 201 235 202 236 tinput_position_caret(ti); … … 226 260 continue; 227 261 228 if ((ev.mods & (KM_CTRL | KM_ALT | KM_SHIFT)) != 0) 229 continue; 230 231 switch(ev.key) { 232 case KC_ENTER: 233 case KC_NENTER: 234 goto done; 235 case KC_BACKSPACE: 236 tinput_backspace(ti); 237 break; 238 case KC_DELETE: 239 tinput_delete(ti); 240 break; 241 case KC_LEFT: 242 tinput_seek(ti, seek_backward, seek_cell); 243 break; 244 case KC_RIGHT: 245 tinput_seek(ti, seek_forward, seek_cell); 246 247 break; 248 case KC_HOME: 249 tinput_seek(ti, seek_backward, seek_max); 250 break; 251 case KC_END: 252 tinput_seek(ti, seek_forward, seek_max); 253 break; 254 } 262 if ((ev.mods & KM_CTRL) != 0 && 263 (ev.mods & (KM_ALT | KM_SHIFT)) == 0) { 264 switch (ev.key) { 265 case KC_LEFT: 266 tinput_seek_word(ti, seek_backward); 267 break; 268 case KC_RIGHT: 269 tinput_seek_word(ti, seek_forward); 270 break; 271 } 272 } 273 274 if ((ev.mods & (KM_CTRL | KM_ALT | KM_SHIFT)) == 0) { 275 switch (ev.key) { 276 case KC_ENTER: 277 case KC_NENTER: 278 goto done; 279 case KC_BACKSPACE: 280 tinput_backspace(ti); 281 break; 282 case KC_DELETE: 283 tinput_delete(ti); 284 break; 285 case KC_LEFT: 286 tinput_seek_cell(ti, seek_backward); 287 break; 288 case KC_RIGHT: 289 tinput_seek_cell(ti, seek_forward); 290 break; 291 case KC_HOME: 292 tinput_seek_max(ti, seek_backward); 293 break; 294 case KC_END: 295 tinput_seek_max(ti, seek_forward); 296 break; 297 } 298 } 299 255 300 if (ev.c >= ' ') { 256 301 tinput_insert_char(ti, ev.c);
Note:
See TracChangeset
for help on using the changeset viewer.