diff options
| author | Devin J. Pohly <djpohly@gmail.com> | 2018-02-22 01:05:12 -0600 |
|---|---|---|
| committer | Devin J. Pohly <djpohly@gmail.com> | 2018-02-25 21:53:24 -0600 |
| commit | 33201ac65f74e45b4fa60822ba9a538c3cfa9b25 (patch) | |
| tree | d14efba42f31bc0f4900a9af90988093464ad781 | |
| parent | 52d6fb1ab1f7d41839edebb63c3408578cd44e3c (diff) | |
| download | st-33201ac65f74e45b4fa60822ba9a538c3cfa9b25.tar.gz st-33201ac65f74e45b4fa60822ba9a538c3cfa9b25.zip | |
Move CRLF input processing into ttywrite
This also allows us to remove the crlf field from the Key struct, since
the only difference it made was converting "\r" to "\r\n" (which is now
done automatically in ttywrite). In addition, MODE_CRLF is no longer
referenced from x.c.
Signed-off-by: Devin J. Pohly <djpohly@gmail.com>
| -rw-r--r-- | config.def.h | 423 | ||||
| -rw-r--r-- | st.c | 32 | ||||
| -rw-r--r-- | x.c | 6 |
3 files changed, 240 insertions, 221 deletions
diff --git a/config.def.h b/config.def.h index 1c181ab..616616a 100644 --- a/config.def.h +++ b/config.def.h | |||
| @@ -229,219 +229,216 @@ static uint forceselmod = ShiftMask; | |||
| 229 | * world. Please decide about changes wisely. | 229 | * world. Please decide about changes wisely. |
| 230 | */ | 230 | */ |
| 231 | static Key key[] = { | 231 | static Key key[] = { |
| 232 | /* keysym mask string appkey appcursor crlf */ | 232 | /* keysym mask string appkey appcursor */ |
| 233 | { XK_KP_Home, ShiftMask, "\033[2J", 0, -1, 0}, | 233 | { XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, |
| 234 | { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1, 0}, | 234 | { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, |
| 235 | { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1, 0}, | 235 | { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, |
| 236 | { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1, 0}, | 236 | { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, |
| 237 | { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0, 0}, | 237 | { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, |
| 238 | { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1, 0}, | 238 | { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, |
| 239 | { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1, 0}, | 239 | { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, |
| 240 | { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0, 0}, | 240 | { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, |
| 241 | { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1, 0}, | 241 | { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, |
| 242 | { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1, 0}, | 242 | { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, |
| 243 | { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0, 0}, | 243 | { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, |
| 244 | { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1, 0}, | 244 | { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, |
| 245 | { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1, 0}, | 245 | { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, |
| 246 | { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0, 0}, | 246 | { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, |
| 247 | { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1, 0}, | 247 | { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, |
| 248 | { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1, 0}, | 248 | { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, |
| 249 | { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0, 0}, | 249 | { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, |
| 250 | { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0, 0}, | 250 | { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, |
| 251 | { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0, 0}, | 251 | { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, |
| 252 | { XK_KP_End, ControlMask, "\033[J", -1, 0, 0}, | 252 | { XK_KP_End, ControlMask, "\033[J", -1, 0}, |
| 253 | { XK_KP_End, ControlMask, "\033[1;5F", +1, 0, 0}, | 253 | { XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, |
| 254 | { XK_KP_End, ShiftMask, "\033[K", -1, 0, 0}, | 254 | { XK_KP_End, ShiftMask, "\033[K", -1, 0}, |
| 255 | { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0, 0}, | 255 | { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, |
| 256 | { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0, 0}, | 256 | { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, |
| 257 | { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0, 0}, | 257 | { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, |
| 258 | { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0, 0}, | 258 | { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, |
| 259 | { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0, 0}, | 259 | { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, |
| 260 | { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0, 0}, | 260 | { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, |
| 261 | { XK_KP_Insert, ControlMask, "\033[L", -1, 0, 0}, | 261 | { XK_KP_Insert, ControlMask, "\033[L", -1, 0}, |
| 262 | { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0, 0}, | 262 | { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, |
| 263 | { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0, 0}, | 263 | { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, |
| 264 | { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0, 0}, | 264 | { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, |
| 265 | { XK_KP_Delete, ControlMask, "\033[M", -1, 0, 0}, | 265 | { XK_KP_Delete, ControlMask, "\033[M", -1, 0}, |
| 266 | { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0, 0}, | 266 | { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, |
| 267 | { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0, 0}, | 267 | { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, |
| 268 | { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0, 0}, | 268 | { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, |
| 269 | { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0, 0}, | 269 | { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, |
| 270 | { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0, 0}, | 270 | { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, |
| 271 | { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0, 0}, | 271 | { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, |
| 272 | { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0, 0}, | 272 | { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, |
| 273 | { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0, 0}, | 273 | { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, |
| 274 | { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0, -1}, | 274 | { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, |
| 275 | { XK_KP_Enter, XK_ANY_MOD, "\r\n", -1, 0, +1}, | 275 | { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, |
| 276 | { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0, 0}, | 276 | { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, |
| 277 | { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0, 0}, | 277 | { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, |
| 278 | { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0, 0}, | 278 | { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, |
| 279 | { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0, 0}, | 279 | { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, |
| 280 | { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0, 0}, | 280 | { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, |
| 281 | { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0, 0}, | 281 | { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, |
| 282 | { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0, 0}, | 282 | { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, |
| 283 | { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0, 0}, | 283 | { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, |
| 284 | { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0, 0}, | 284 | { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, |
| 285 | { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0, 0}, | 285 | { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, |
| 286 | { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0, 0}, | 286 | { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, |
| 287 | { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0, 0}, | 287 | { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, |
| 288 | { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0, 0}, | 288 | { XK_Up, ShiftMask, "\033[1;2A", 0, 0}, |
| 289 | { XK_Up, ShiftMask, "\033[1;2A", 0, 0, 0}, | 289 | { XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, |
| 290 | { XK_Up, Mod1Mask, "\033[1;3A", 0, 0, 0}, | 290 | { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0}, |
| 291 | { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0, 0}, | 291 | { XK_Up, ControlMask, "\033[1;5A", 0, 0}, |
| 292 | { XK_Up, ControlMask, "\033[1;5A", 0, 0, 0}, | 292 | { XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0}, |
| 293 | { XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0, 0}, | 293 | { XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0}, |
| 294 | { XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0, 0}, | 294 | { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0}, |
| 295 | { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0, 0}, | 295 | { XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, |
| 296 | { XK_Up, XK_ANY_MOD, "\033[A", 0, -1, 0}, | 296 | { XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, |
| 297 | { XK_Up, XK_ANY_MOD, "\033OA", 0, +1, 0}, | 297 | { XK_Down, ShiftMask, "\033[1;2B", 0, 0}, |
| 298 | { XK_Down, ShiftMask, "\033[1;2B", 0, 0, 0}, | 298 | { XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, |
| 299 | { XK_Down, Mod1Mask, "\033[1;3B", 0, 0, 0}, | 299 | { XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0}, |
| 300 | { XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0, 0}, | 300 | { XK_Down, ControlMask, "\033[1;5B", 0, 0}, |
| 301 | { XK_Down, ControlMask, "\033[1;5B", 0, 0, 0}, | 301 | { XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0}, |
| 302 | { XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0, 0}, | 302 | { XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0}, |
| 303 | { XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0, 0}, | 303 | { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0}, |
| 304 | { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0, 0}, | 304 | { XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, |
| 305 | { XK_Down, XK_ANY_MOD, "\033[B", 0, -1, 0}, | 305 | { XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, |
| 306 | { XK_Down, XK_ANY_MOD, "\033OB", 0, +1, 0}, | 306 | { XK_Left, ShiftMask, "\033[1;2D", 0, 0}, |
| 307 | { XK_Left, ShiftMask, "\033[1;2D", 0, 0, 0}, | 307 | { XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, |
| 308 | { XK_Left, Mod1Mask, "\033[1;3D", 0, 0, 0}, | 308 | { XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0}, |
| 309 | { XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0, 0}, | 309 | { XK_Left, ControlMask, "\033[1;5D", 0, 0}, |
| 310 | { XK_Left, ControlMask, "\033[1;5D", 0, 0, 0}, | 310 | { XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0}, |
| 311 | { XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0, 0}, | 311 | { XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0}, |
| 312 | { XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0, 0}, | 312 | { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0}, |
| 313 | { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0, 0}, | 313 | { XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, |
| 314 | { XK_Left, XK_ANY_MOD, "\033[D", 0, -1, 0}, | 314 | { XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, |
| 315 | { XK_Left, XK_ANY_MOD, "\033OD", 0, +1, 0}, | 315 | { XK_Right, ShiftMask, "\033[1;2C", 0, 0}, |
| 316 | { XK_Right, ShiftMask, "\033[1;2C", 0, 0, 0}, | 316 | { XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, |
| 317 | { XK_Right, Mod1Mask, "\033[1;3C", 0, 0, 0}, | 317 | { XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0}, |
| 318 | { XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0, 0}, | 318 | { XK_Right, ControlMask, "\033[1;5C", 0, 0}, |
| 319 | { XK_Right, ControlMask, "\033[1;5C", 0, 0, 0}, | 319 | { XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0}, |
| 320 | { XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0, 0}, | 320 | { XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0}, |
| 321 | { XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0, 0}, | 321 | { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0}, |
| 322 | { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0, 0}, | 322 | { XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, |
| 323 | { XK_Right, XK_ANY_MOD, "\033[C", 0, -1, 0}, | 323 | { XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, |
| 324 | { XK_Right, XK_ANY_MOD, "\033OC", 0, +1, 0}, | 324 | { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, |
| 325 | { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0, 0}, | 325 | { XK_Return, Mod1Mask, "\033\r", 0, 0}, |
| 326 | { XK_Return, Mod1Mask, "\033\r", 0, 0, -1}, | 326 | { XK_Return, XK_ANY_MOD, "\r", 0, 0}, |
| 327 | { XK_Return, Mod1Mask, "\033\r\n", 0, 0, +1}, | 327 | { XK_Insert, ShiftMask, "\033[4l", -1, 0}, |
| 328 | { XK_Return, XK_ANY_MOD, "\r", 0, 0, -1}, | 328 | { XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, |
| 329 | { XK_Return, XK_ANY_MOD, "\r\n", 0, 0, +1}, | 329 | { XK_Insert, ControlMask, "\033[L", -1, 0}, |
| 330 | { XK_Insert, ShiftMask, "\033[4l", -1, 0, 0}, | 330 | { XK_Insert, ControlMask, "\033[2;5~", +1, 0}, |
| 331 | { XK_Insert, ShiftMask, "\033[2;2~", +1, 0, 0}, | 331 | { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, |
| 332 | { XK_Insert, ControlMask, "\033[L", -1, 0, 0}, | 332 | { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, |
| 333 | { XK_Insert, ControlMask, "\033[2;5~", +1, 0, 0}, | 333 | { XK_Delete, ControlMask, "\033[M", -1, 0}, |
| 334 | { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0, 0}, | 334 | { XK_Delete, ControlMask, "\033[3;5~", +1, 0}, |
| 335 | { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0, 0}, | 335 | { XK_Delete, ShiftMask, "\033[2K", -1, 0}, |
| 336 | { XK_Delete, ControlMask, "\033[M", -1, 0, 0}, | 336 | { XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, |
| 337 | { XK_Delete, ControlMask, "\033[3;5~", +1, 0, 0}, | 337 | { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, |
| 338 | { XK_Delete, ShiftMask, "\033[2K", -1, 0, 0}, | 338 | { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, |
| 339 | { XK_Delete, ShiftMask, "\033[3;2~", +1, 0, 0}, | 339 | { XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, |
| 340 | { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0, 0}, | 340 | { XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, |
| 341 | { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0, 0}, | 341 | { XK_Home, ShiftMask, "\033[2J", 0, -1}, |
| 342 | { XK_BackSpace, XK_NO_MOD, "\177", 0, 0, 0}, | 342 | { XK_Home, ShiftMask, "\033[1;2H", 0, +1}, |
| 343 | { XK_BackSpace, Mod1Mask, "\033\177", 0, 0, 0}, | 343 | { XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, |
| 344 | { XK_Home, ShiftMask, "\033[2J", 0, -1, 0}, | 344 | { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, |
| 345 | { XK_Home, ShiftMask, "\033[1;2H", 0, +1, 0}, | 345 | { XK_End, ControlMask, "\033[J", -1, 0}, |
| 346 | { XK_Home, XK_ANY_MOD, "\033[H", 0, -1, 0}, | 346 | { XK_End, ControlMask, "\033[1;5F", +1, 0}, |
| 347 | { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1, 0}, | 347 | { XK_End, ShiftMask, "\033[K", -1, 0}, |
| 348 | { XK_End, ControlMask, "\033[J", -1, 0, 0}, | 348 | { XK_End, ShiftMask, "\033[1;2F", +1, 0}, |
| 349 | { XK_End, ControlMask, "\033[1;5F", +1, 0, 0}, | 349 | { XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, |
| 350 | { XK_End, ShiftMask, "\033[K", -1, 0, 0}, | 350 | { XK_Prior, ControlMask, "\033[5;5~", 0, 0}, |
| 351 | { XK_End, ShiftMask, "\033[1;2F", +1, 0, 0}, | 351 | { XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, |
| 352 | { XK_End, XK_ANY_MOD, "\033[4~", 0, 0, 0}, | 352 | { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, |
| 353 | { XK_Prior, ControlMask, "\033[5;5~", 0, 0, 0}, | 353 | { XK_Next, ControlMask, "\033[6;5~", 0, 0}, |
| 354 | { XK_Prior, ShiftMask, "\033[5;2~", 0, 0, 0}, | 354 | { XK_Next, ShiftMask, "\033[6;2~", 0, 0}, |
| 355 | { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0, 0}, | 355 | { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, |
| 356 | { XK_Next, ControlMask, "\033[6;5~", 0, 0, 0}, | 356 | { XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, |
| 357 | { XK_Next, ShiftMask, "\033[6;2~", 0, 0, 0}, | 357 | { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, |
| 358 | { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0, 0}, | 358 | { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, |
| 359 | { XK_F1, XK_NO_MOD, "\033OP" , 0, 0, 0}, | 359 | { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, |
| 360 | { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0, 0}, | 360 | { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, |
| 361 | { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0, 0}, | 361 | { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, |
| 362 | { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0, 0}, | 362 | { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, |
| 363 | { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0, 0}, | 363 | { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, |
| 364 | { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0, 0}, | 364 | { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, |
| 365 | { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0, 0}, | 365 | { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, |
| 366 | { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0, 0}, | 366 | { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, |
| 367 | { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0, 0}, | 367 | { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, |
| 368 | { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0, 0}, | 368 | { XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, |
| 369 | { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0, 0}, | 369 | { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, |
| 370 | { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0, 0}, | 370 | { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, |
| 371 | { XK_F3, XK_NO_MOD, "\033OR" , 0, 0, 0}, | 371 | { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, |
| 372 | { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0, 0}, | 372 | { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, |
| 373 | { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0, 0}, | 373 | { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, |
| 374 | { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0, 0}, | 374 | { XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, |
| 375 | { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0, 0}, | 375 | { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, |
| 376 | { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0, 0}, | 376 | { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, |
| 377 | { XK_F4, XK_NO_MOD, "\033OS" , 0, 0, 0}, | 377 | { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, |
| 378 | { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0, 0}, | 378 | { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, |
| 379 | { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0, 0}, | 379 | { XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, |
| 380 | { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0, 0}, | 380 | { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, |
| 381 | { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0, 0}, | 381 | { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, |
| 382 | { XK_F5, XK_NO_MOD, "\033[15~", 0, 0, 0}, | 382 | { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, |
| 383 | { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0, 0}, | 383 | { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, |
| 384 | { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0, 0}, | 384 | { XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, |
| 385 | { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0, 0}, | 385 | { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, |
| 386 | { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0, 0}, | 386 | { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, |
| 387 | { XK_F6, XK_NO_MOD, "\033[17~", 0, 0, 0}, | 387 | { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, |
| 388 | { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0, 0}, | 388 | { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, |
| 389 | { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0, 0}, | 389 | { XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, |
| 390 | { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0, 0}, | 390 | { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, |
| 391 | { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0, 0}, | 391 | { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, |
| 392 | { XK_F7, XK_NO_MOD, "\033[18~", 0, 0, 0}, | 392 | { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, |
| 393 | { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0, 0}, | 393 | { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, |
| 394 | { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0, 0}, | 394 | { XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, |
| 395 | { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0, 0}, | 395 | { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, |
| 396 | { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0, 0}, | 396 | { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, |
| 397 | { XK_F8, XK_NO_MOD, "\033[19~", 0, 0, 0}, | 397 | { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, |
| 398 | { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0, 0}, | 398 | { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, |
| 399 | { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0, 0}, | 399 | { XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, |
| 400 | { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0, 0}, | 400 | { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, |
| 401 | { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0, 0}, | 401 | { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, |
| 402 | { XK_F9, XK_NO_MOD, "\033[20~", 0, 0, 0}, | 402 | { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, |
| 403 | { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0, 0}, | 403 | { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, |
| 404 | { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0, 0}, | 404 | { XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, |
| 405 | { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0, 0}, | 405 | { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, |
| 406 | { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0, 0}, | 406 | { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, |
| 407 | { XK_F10, XK_NO_MOD, "\033[21~", 0, 0, 0}, | 407 | { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, |
| 408 | { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0, 0}, | 408 | { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, |
| 409 | { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0, 0}, | 409 | { XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, |
| 410 | { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0, 0}, | 410 | { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, |
| 411 | { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0, 0}, | 411 | { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, |
| 412 | { XK_F11, XK_NO_MOD, "\033[23~", 0, 0, 0}, | 412 | { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, |
| 413 | { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0, 0}, | 413 | { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, |
| 414 | { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0, 0}, | 414 | { XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, |
| 415 | { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0, 0}, | 415 | { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, |
| 416 | { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0, 0}, | 416 | { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, |
| 417 | { XK_F12, XK_NO_MOD, "\033[24~", 0, 0, 0}, | 417 | { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, |
| 418 | { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0, 0}, | 418 | { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, |
| 419 | { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0, 0}, | 419 | { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, |
| 420 | { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0, 0}, | 420 | { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, |
| 421 | { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0, 0}, | 421 | { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, |
| 422 | { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0, 0}, | 422 | { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, |
| 423 | { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0, 0}, | 423 | { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, |
| 424 | { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0, 0}, | 424 | { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, |
| 425 | { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0, 0}, | 425 | { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, |
| 426 | { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0, 0}, | 426 | { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, |
| 427 | { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0, 0}, | 427 | { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, |
| 428 | { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0, 0}, | 428 | { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, |
| 429 | { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0, 0}, | 429 | { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, |
| 430 | { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0, 0}, | 430 | { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, |
| 431 | { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0, 0}, | 431 | { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, |
| 432 | { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0, 0}, | 432 | { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, |
| 433 | { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0, 0}, | 433 | { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, |
| 434 | { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0, 0}, | 434 | { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, |
| 435 | { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0, 0}, | 435 | { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, |
| 436 | { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0, 0}, | 436 | { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, |
| 437 | { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0, 0}, | 437 | { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, |
| 438 | { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0, 0}, | 438 | { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, |
| 439 | { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0, 0}, | 439 | { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, |
| 440 | { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0, 0}, | 440 | { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, |
| 441 | { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0, 0}, | 441 | { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, |
| 442 | { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0, 0}, | ||
| 443 | { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0, 0}, | ||
| 444 | { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0, 0}, | ||
| 445 | }; | 442 | }; |
| 446 | 443 | ||
| 447 | /* | 444 | /* |
| @@ -108,6 +108,7 @@ typedef struct { | |||
| 108 | static void execsh(char **); | 108 | static void execsh(char **); |
| 109 | static void stty(char **); | 109 | static void stty(char **); |
| 110 | static void sigchld(int); | 110 | static void sigchld(int); |
| 111 | static void ttywriteraw(const char *, size_t); | ||
| 111 | 112 | ||
| 112 | static void csidump(void); | 113 | static void csidump(void); |
| 113 | static void csihandle(void); | 114 | static void csihandle(void); |
| @@ -786,13 +787,38 @@ ttyread(void) | |||
| 786 | void | 787 | void |
| 787 | ttywrite(const char *s, size_t n, int may_echo) | 788 | ttywrite(const char *s, size_t n, int may_echo) |
| 788 | { | 789 | { |
| 789 | fd_set wfd, rfd; | 790 | const char *next; |
| 790 | ssize_t r; | ||
| 791 | size_t lim = 256; | ||
| 792 | 791 | ||
| 793 | if (may_echo && IS_SET(MODE_ECHO)) | 792 | if (may_echo && IS_SET(MODE_ECHO)) |
| 794 | twrite(s, n, 1); | 793 | twrite(s, n, 1); |
| 795 | 794 | ||
| 795 | if (!IS_SET(MODE_CRLF)) { | ||
| 796 | ttywriteraw(s, n); | ||
| 797 | return; | ||
| 798 | } | ||
| 799 | |||
| 800 | /* This is similar to how the kernel handles ONLCR for ttys */ | ||
| 801 | while (n > 0) { | ||
| 802 | if (*s == '\r') { | ||
| 803 | next = s + 1; | ||
| 804 | ttywriteraw("\r\n", 2); | ||
| 805 | } else { | ||
| 806 | next = memchr(s, '\r', n); | ||
| 807 | DEFAULT(next, s + n); | ||
| 808 | ttywriteraw(s, next - s); | ||
| 809 | } | ||
| 810 | n -= next - s; | ||
| 811 | s = next; | ||
| 812 | } | ||
| 813 | } | ||
| 814 | |||
| 815 | void | ||
| 816 | ttywriteraw(const char *s, size_t n) | ||
| 817 | { | ||
| 818 | fd_set wfd, rfd; | ||
| 819 | ssize_t r; | ||
| 820 | size_t lim = 256; | ||
| 821 | |||
| 796 | /* | 822 | /* |
| 797 | * Remember that we are using a pty, which might be a modem line. | 823 | * Remember that we are using a pty, which might be a modem line. |
| 798 | * Writing too much will clog the line. That's why we are doing this | 824 | * Writing too much will clog the line. That's why we are doing this |
| @@ -38,10 +38,9 @@ typedef struct { | |||
| 38 | KeySym k; | 38 | KeySym k; |
| 39 | uint mask; | 39 | uint mask; |
| 40 | char *s; | 40 | char *s; |
| 41 | /* three valued logic variables: 0 indifferent, 1 on, -1 off */ | 41 | /* three-valued logic variables: 0 indifferent, 1 on, -1 off */ |
| 42 | signed char appkey; /* application keypad */ | 42 | signed char appkey; /* application keypad */ |
| 43 | signed char appcursor; /* application cursor */ | 43 | signed char appcursor; /* application cursor */ |
| 44 | signed char crlf; /* crlf mode */ | ||
| 45 | } Key; | 44 | } Key; |
| 46 | 45 | ||
| 47 | /* X modifiers */ | 46 | /* X modifiers */ |
| @@ -1680,9 +1679,6 @@ kmap(KeySym k, uint state) | |||
| 1680 | if (IS_SET(MODE_APPCURSOR) ? kp->appcursor < 0 : kp->appcursor > 0) | 1679 | if (IS_SET(MODE_APPCURSOR) ? kp->appcursor < 0 : kp->appcursor > 0) |
| 1681 | continue; | 1680 | continue; |
| 1682 | 1681 | ||
| 1683 | if (IS_SET(MODE_CRLF) ? kp->crlf < 0 : kp->crlf > 0) | ||
| 1684 | continue; | ||
| 1685 | |||
| 1686 | return kp->s; | 1682 | return kp->s; |
| 1687 | } | 1683 | } |
| 1688 | 1684 | ||
