3

I do know and have read the appropriate topics section for this site. I have seen various topics about RSI, posture etc closed as being off topic and referred to another site/section. I think however that my question will be worded such that it comes under the "Software Requirements" section as I am looking for input on specific types as well as configuration of software for some very specific medical issues I have.

This is not a topic about prevention of RSI, it is just the closest I can put in a title that people will understand off the bat. I may have already answered my question just by asking it, but in case there is something I have not thought of, the medical and other problems are:

  1. I have a surgically repaired right (dominant hand) index finger following the removal of a benign tumor growth. This growth had clamped the tendon for some 18+ months before it was discovered and excised in 2012. I can use the finger "flat handed" such as for typing English (this email for example) but actions which have me move towards a grip are painful, writing with a pen or using a mouse or touch pad for example. I can use the mouse but not for anywhere near a days work.

  2. I have numbness and pain of an as yet unknown cause in both forearms and little fingers. Repeated fanning of my hands or use of the little fingers makes these very painful which presents obvious problems in using modifier keys when writing code. Even using the ring fingers instead pushes out too much.

  3. Whilst not able to work at the moment my most likely avenue of return is still to my previous job. There is a very limited amount of work I do from home as the primary client insists that you work from their premises and more importantly use their equipment. I do not think I could use any custom equipment (beyond accessories, such as a trackball) even if I offered to pay for it myself, we as a team are greatly removed from Corporate IT Admin. So at best I can be expecting an i3/i5 laptop with 8GB of RAM. I probably could swag/provide an external monitor in addition to the laptop display. We do have admin access to the OS but I cannot be putting native Linux on it or anything, and even if I could I need the corporate communication and meeting tools from Windows.

  4. (edited in). Herniated lumbar disc causing nerve pain in both legs. Again I am working on this from a physical standpoint but for the purpose of this question will assume my current condition is permanent, which precludes pedals or other use of my legs for the purpose of character entry.

So I cannot use a mouse or touch pad (not sure about ball). Cannot use modifier keys and need to work on a Win 7 corporate laptop of the same kind that a business/sales manager might get, albeit with admin access. Primary type of work is LAMP stack although there are also other technologies such as Java, C++ and Python.

I had seen the voice coding by Tavis Rudd (here: http://www.youtube.com/watch?v=8SkdfdXWYaI) which would be an option from home but not the open plan client office. The idea did get me thinking however that my solution may lie in the use of something like emacs with remapped bindings. I probably could get a laptop powerful enough to run a minimalist X11 desktop (say maybe Fluxbox) under Oracle VM or something. Or I could install and use Cygwin.

I never did use full blown IDEs, but never used emacs beyond trivial tasks either. My go to for work would be scite and some xterm shells. It may have improved but I found IDEs a bit sluggish on the laptops we got. I know the IDEs as well as scite will be extensible, the latter under lua, but I suspect emacs will offer more in terms of existing extensions for multiple languages as well as task such as repository work or other access to servers etc (most of which would be *nix).

I am still working on physical investigation and rehab but for the moment am assuming these limitations are here to stay. What would be most helpful here is some indication from those more familiar with emacs or IDEs such as Eclipse or NetBeans, that the software is fit for my purpose, before I go and start learning to use it, which I would have to do (unpaid) before returning to work, needing to hit the ground at least 80% of where I was before.

Such that I can try and avoid any brick walls down the line which I did not foresee. My gut reaction as the first thing to be doing is "learn emacs" as it would be a useful skill in my area regardless, although if there is something else more suited to the primary goal I would do that.

Many thanks.

Axiombadger
  • 161
  • 10
  • If modifier keys using your little fingers is a problem then I'd suggest a keyboard where the modifiers are mostly on the thumbs like the [Kinesis Advantage](https://www.kinesis-ergo.com/shop/advantage-for-pc-mac/). Not only are most modifiers on the thumbs, the entire keyboard is programmable on the keyboard itself which would allow you to shuffle keys around at will without the use of special software on the machine. The disadvantage of this particular keyboard would potentially be the "bowl" shape where the fingers go which might cause issues if you can't bend your pointer finger at all. – Randy Morris Jul 17 '14 at 12:47
  • On a similar note (extracting from the end of my answer, where it's a bit buried) you could use other hardware devices such as foot pedals to provide modifier keys (and/or many other potentially useful facilities). http://xkeys.com/xkeys.php is one such source. – phils Jul 17 '14 at 14:18
  • 2
    Foot pedals are a very good solution. I use one myself for ctrl. You can buy a three pedal board for ctrl, alt, and shift if have at it. I know a few professional developers that only use their index fingers to program. With those together, it should work well. Also definitely try out a vertical mouse before you totally write them off. – Jordon Biondo Jul 17 '14 at 20:31
  • Thank you for the input. I will look into the keyboard(s) although I am not sure if using the thumbs for modifier keys would help as I would still need to stretch for the character. regarding the foot pedals . . . I have further health problems which I had left out for brevity. One of them is a herniated lumbar disc causing nerve pain in both legs. Again I am working on this from a physical standpoint but for the purpose of this question will assume my current condition is permanent, which precludes pedals. – Axiombadger Jul 17 '14 at 22:44
  • I missed the bit about vertical mice there sorry, had not seen those before. I will take a look at that as it may be helpful for general computer use even if I end up needing some kind of emacs/vi solution for actual coding. – Axiombadger Jul 18 '14 at 03:12
  • I found this by Ashley Feniello: https://www.youtube.com/watch?v=TEBMlXRjhZY It is similar to and references the work by Tavis Rudd but uses Windows Speech Recognition to control vim (with a couple of addons). The voice input part does not seem as clean (as in Windows vs Dragon) but it is a free, easy to setup system for at least learning to use vim – Axiombadger Aug 02 '14 at 06:50
  • I have no tried both Windows Speech Recognition and Dragon 12.5. Windows Speech got so many words wrong, Dragon less so and I am getting the impression it will learn a lot better. I have still not gotten to code yet, just prose, but am working through training it. – Axiombadger Aug 20 '14 at 16:00

1 Answers1

3

Default Emacs bindings make heavy use of modifier keys; however there are alternatives to the defaults, without necessarily requiring you to manually customise all the bindings.

Vi/Vim may be a good choice of alternative editor, as rather than using modifier keys to initiate commands, you switch between "insert mode" (in which the keys you type produce text), and "command mode" (in which the keys you type trigger editing commands), so you would rarely (if ever?) need to hold multiple keys at the same time.

Emacs may still be desirable, though. An advantage of Emacs is the degree to which it can integrate with many other processes and applications, thus giving you a familiar keyboard interface to many activities besides editing text. I would say this is far more the case under Unix than Windows, but I'm sure there are still benefits.

There are also ways to use the Vi approach within Emacs, which may be an even better answer. I understand that the evil-mode package ("extensible vi layer for Emacs") is the most comprehensive approach to using vi-style bindings in Emacs.

I'm not a vi user myself, so I'll leave it to others to provide details.

Keeping with the modal editing approach, God Mode gives you Vi-like modal separation, but using the familiar Emacs key sequences (follow the link to make better sense of that statement). The author says "You'll find that this mode comes surprisingly naturally and that you already know how to run your existing Emacs commands."

Leaving modal editing aside, packages such as ErgoEmacs endeavour to provide friendlier keybindings than the defaults, and may be useful.

A custom approach I read about (used by Xah Lee) was to dedicate certain keys as prefix bindings through which everything else could be accessed without modifiers. This is simple for some kinds of binding, and requires effort in other cases (probably in most cases, realistically).

For example, a great many bindings start with the prefix C-x (ctrl+x), but it's possible to assign that entire prefix to a sequence which doesn't require a modifier. e.g.: (global-set-key (kbd "<f6> x") 'Control-X-prefix) would allow you to type F6 followed by x instead of holding down Ctrl while typing x.

Other similar reassignments will not be so trivial, but it's all possible.

More generally (and so perhaps more usefully; certainly with less customisation) you can send any modified key using custom (and thus potentially modifier-free) sequences.

The event-apply-*-modifier functions (for shift, control, meta (your Alt key), super, hyper, & alt (not your Alt key)) are the trick to doing this. When called, they read the next key from the user, and then apply the required modifier to that key, passing the result through as if it had been typed using the real modifier key.

The following would use the number keys on the keypad to represent all the modifier keys. You could then type the sequence C-xC-b as 1x1b.

(define-key function-key-map (kbd "<kp-1>") 'event-apply-control-modifier)
(define-key function-key-map (kbd "<kp-2>") 'event-apply-meta-modifier)
(define-key function-key-map (kbd "<kp-3>") 'event-apply-super-modifier)
(define-key function-key-map (kbd "<kp-4>") 'event-apply-shift-modifier)
(define-key function-key-map (kbd "<kp-5>") 'event-apply-hyper-modifier)
(define-key function-key-map (kbd "<kp-6>") 'event-apply-alt-modifier)

You'd need to do some extra work to enable you to combine multiple modifiers for a single key, but it's possible.

The elisp manual page on Modifying and Translating Input Events is also relevant:
C-hig (elisp) Event Mod RET

A completely different approach would be to use foot pedals (or some other input device; e.g.: http://xkeys.com/xkeys.php) to enable you to use the modifier keys as intended, without the need to rebind anything at all.

phils
  • 71,335
  • 11
  • 153
  • 198
  • I like the evil-mode idea as well. Reducing modifier use but keeping the other stuff Emacs brings. Am I correct in assuming that as part of Emacs "more than an editor" mandate it could provide my own editing setup on my local machine even when editing a file on a remote *nix machine via ssh for example? As in, I would not have to on every test server setup my own user account, copy over my bindings etc (or install emacs and/or vi if they are not there in the first place). – Axiombadger Jul 17 '14 at 23:45
  • 1
    Yes, Emacs has a mechanism called Tramp which facilitates this. You can edit and save remote files over a variety of protocols, and you get nice benefits with it (in particular, calling a shell command from a remote buffer executes the command on the remote server). Tramp from Windows isn't always as easy or fast, though. On Windows I actually preferred to host a (non-desktop) Linux VM and run Emacs inside that, using Cygwin to provide the X display. The big thing you miss in Windows is SSH ControlMaster to keep a persistent connection open for Tramp activity. – phils Jul 18 '14 at 01:14
  • 1
    I have a couple of related answers here: http://stackoverflow.com/q/2690050/324105. You can also use Putty and its Plink protocol for Tramp under Windows. It's a long time since I've needed it, so I don't know what the *best* solution is these days. – phils Jul 18 '14 at 01:16
  • 1
    I'll add that Tramp is completely brilliant for light usage, but if you'll be doing long-term work on a server and you can install Emacs on it, I'd definitely consider doing that. I always install Emacs locally on my development VMs, for the performance boost. As for vi, one of the things people like about it is that you can virtually *guarantee* that some form of it is present on any *nix server. – phils Jul 18 '14 at 01:24
  • Thanks, I have used putty in the past for when I have needed *nix terminal access on a Windows machine. I have used Windows based X11 Servers on a remote *nix host before but had not thought to do that into a locally hosted VM. That would take some load off the local machine which despite massive improvements for integrated GPUs in the last 3 or 4 years is still a concern. – Axiombadger Jul 18 '14 at 02:53
  • The other thing I thought to do in emacs was actually unset combinations which are bad for me. It is my instinct for example to "quote things" using my little finger and middle finger on my left hand (UK keyboard). I do this even typing now, which hurts but I only notice after doing it a few times. I see from another one of your answers here: http://stackoverflow.com/questions/13965966/unset-key-binding-in-emacs that the correct way to do this is nil bind, I suspected something like that would be available. If it did not work, I would stop doing it . . . eventually. – Axiombadger Jul 18 '14 at 03:00
  • Don't feel like you needed to accept this answer, Axiombadger. I hope my comments are useful, but I think it's a broader question than just the angles I've covered, and I don't consider myself well-qualified to advise on the subject in general. I'm really hoping that other folks will still weigh in (even if just to point towards other resources). – phils Jul 20 '14 at 22:18
  • OK, I have unmarked it for now and will see what happens although thank you for your comments so far, they have at least reinforced that I am along the, or at least a right track. I had added tags for vi and evil-mode and just now, vim as well so will leave it a bit and see what comes back. – Axiombadger Jul 22 '14 at 01:55