1 | /* |
---|
2 | * neercs console-based window manager |
---|
3 | * Copyright (c) 2006 Sam Hocevar <sam@zoy.org> |
---|
4 | * 2008 Jean-Yves Lamoureux <jylam@lnxscene.org> |
---|
5 | * 2008 Pascal Terjan <pterjan@linuxfr.org> |
---|
6 | * All Rights Reserved |
---|
7 | * |
---|
8 | * $Id: input.c 2493 2008-06-27 17:55:06Z sam $ |
---|
9 | * |
---|
10 | * This program is free software. It comes without any warranty, to |
---|
11 | * the extent permitted by applicable law. You can redistribute it |
---|
12 | * and/or modify it under the terms of the Do What The Fuck You Want |
---|
13 | * To Public License, Version 2, as published by Sam Hocevar. See |
---|
14 | * http://sam.zoy.org/wtfpl/COPYING for more details. |
---|
15 | */ |
---|
16 | #include "config.h" |
---|
17 | #include <caca.h> |
---|
18 | #include <string.h> |
---|
19 | #include "neercs.h" |
---|
20 | |
---|
21 | struct kconv { |
---|
22 | unsigned int key; |
---|
23 | char *val; |
---|
24 | int size; |
---|
25 | }; |
---|
26 | |
---|
27 | struct kconv kconv[] = { |
---|
28 | {CACA_KEY_UP, "\x1b[A", 3}, |
---|
29 | {CACA_KEY_DOWN, "\x1b[B", 3}, |
---|
30 | {CACA_KEY_RIGHT, "\x1b[C", 3}, |
---|
31 | {CACA_KEY_LEFT, "\x1b[D", 3}, |
---|
32 | {CACA_KEY_PAGEUP, "\x1b[5~", 4}, |
---|
33 | {CACA_KEY_PAGEDOWN,"\x1b[6~", 4}, |
---|
34 | {CACA_KEY_HOME, "\x1b[1~", 4}, |
---|
35 | {CACA_KEY_INSERT, "\x1b[2~", 4}, |
---|
36 | {CACA_KEY_DELETE, "\x1b[3~", 4}, |
---|
37 | {CACA_KEY_END, "\x1b[4~", 4}, |
---|
38 | {CACA_KEY_F1, "\x1b[11~", 5}, |
---|
39 | {CACA_KEY_F2, "\x1b[12~", 5}, |
---|
40 | {CACA_KEY_F3, "\x1b[13~", 5}, |
---|
41 | {CACA_KEY_F4, "\x1b[14~", 5}, |
---|
42 | {CACA_KEY_F5, "\x1b[11~", 5}, |
---|
43 | {CACA_KEY_F6, "\x1b[12~", 5}, |
---|
44 | {CACA_KEY_F7, "\x1b[13~", 5}, |
---|
45 | {CACA_KEY_F8, "\x1b[14~", 5}, |
---|
46 | {CACA_KEY_F9, "\x1b[11~", 5}, |
---|
47 | {CACA_KEY_F10, "\x1b[12~", 5}, |
---|
48 | {CACA_KEY_F11, "\x1b[13~", 5}, |
---|
49 | {CACA_KEY_F12, "\x1b[14~", 5}, |
---|
50 | }; |
---|
51 | |
---|
52 | |
---|
53 | |
---|
54 | void *convert_input_ansi(unsigned int *c, int *size) |
---|
55 | { |
---|
56 | unsigned int i; |
---|
57 | for(i = 0; i < sizeof(kconv) / sizeof(struct kconv); i++) |
---|
58 | { |
---|
59 | if(*c==kconv[i].key) |
---|
60 | { |
---|
61 | *size = kconv[i].size; |
---|
62 | return kconv[i].val; |
---|
63 | } |
---|
64 | } |
---|
65 | |
---|
66 | *size = 1; |
---|
67 | return c; |
---|
68 | } |
---|
69 | |
---|
70 | |
---|
71 | |
---|
72 | int handle_command_input(struct screen_list*screen_list, unsigned int c) |
---|
73 | { |
---|
74 | int refresh = 0; |
---|
75 | switch(c) |
---|
76 | { |
---|
77 | case 0x01: //CACA_KEY_CTRL_A: |
---|
78 | screen_list->pty ^= screen_list->prevpty; |
---|
79 | screen_list->prevpty ^= screen_list->pty; |
---|
80 | screen_list->pty ^= screen_list->prevpty; |
---|
81 | refresh = 1; |
---|
82 | break; |
---|
83 | case 'm': |
---|
84 | case 0x0d: //CACA_KEY_CTRL_M: |
---|
85 | screen_list->mini = !screen_list->mini; |
---|
86 | refresh = 1; |
---|
87 | break; |
---|
88 | case 'n': |
---|
89 | case ' ': |
---|
90 | case '\0': |
---|
91 | case 0x0e: //CACA_KEY_CTRL_N: |
---|
92 | screen_list->prevpty = screen_list->pty; |
---|
93 | screen_list->pty = (screen_list->pty + 1) % screen_list->count; |
---|
94 | refresh = 1; |
---|
95 | break; |
---|
96 | case 'p': |
---|
97 | case 0x10: //CACA_KEY_CTRL_P: |
---|
98 | screen_list->prevpty = screen_list->pty; |
---|
99 | screen_list->pty = (screen_list->pty + screen_list->count - 1) % screen_list->count; |
---|
100 | refresh = 1; |
---|
101 | break; |
---|
102 | case 'c': |
---|
103 | case 0x03: //CACA_KEY_CTRL_C: |
---|
104 | screen_list->prevpty = screen_list->pty; |
---|
105 | screen_list->pty = |
---|
106 | add_screen(screen_list, |
---|
107 | create_screen(screen_list->width, |
---|
108 | screen_list->height, |
---|
109 | screen_list->default_shell)); |
---|
110 | refresh = 1; |
---|
111 | break; |
---|
112 | case 'w': |
---|
113 | case 0x17: //CACA_KEY_CTRL_W: |
---|
114 | screen_list->wm_type = (screen_list->wm_type==(WM_MAX-1)? |
---|
115 | screen_list->wm_type=0: |
---|
116 | screen_list->wm_type+1); |
---|
117 | refresh = 1; |
---|
118 | break; |
---|
119 | case 0x0b: //CACA_KEY_CTRL_K: |
---|
120 | add_recurrent(screen_list->recurrent_list, close_screen_recurrent, screen_list->cv); |
---|
121 | refresh = 1; |
---|
122 | break; |
---|
123 | case 'x': |
---|
124 | case 0x18: //CACA_KEY_CTRL_X: |
---|
125 | memset(screen_list->lockpass, 0, 1024); |
---|
126 | screen_list->locked = 1; |
---|
127 | screen_list->lock_offset = 0; |
---|
128 | refresh = 1; |
---|
129 | break; |
---|
130 | case 'h': |
---|
131 | case 0x08: //CACA_KEY_CTRL_H: |
---|
132 | screen_list->help = !screen_list->help; |
---|
133 | refresh = 1; |
---|
134 | break; |
---|
135 | case 'd': |
---|
136 | case 0x04: //CACA_KEY_CTRL_D: |
---|
137 | detach(screen_list, screen_list->dp); |
---|
138 | break; |
---|
139 | } |
---|
140 | return refresh; |
---|
141 | |
---|
142 | } |
---|