I often end up in eshell.
Sometimes, because I’m running Emacs on Windows (where shells work, but it’s a pain), and sometimes just because. The problem, until today, was that anytime I would invoke a git command that wanted to call the pager (say, diff), I would see the following annoying message from less:
WARNING: terminal is not fully functional
- (press RETURN)
This happens because eshell sets $TERM to “dumb”. It doesn’t try to fool anyone. It’s dumb.
But, since I’m stubborn and lazy, I just put up with it the stupidity of eshell and the annoyance of git’s invocation of less. Till today.
Some would say the answer is “Don’t use git in emacs — use magit!” And they’d be right. I do use magit, but commands should work, too.
So, after a spree of productivity yesterday, I woke up today and hit that annoying message again. I decided to track it down.
I came across this StackOverflow thread. There is a hint there — I didn’t know less could be told to only page in certain cases — but not anything that says “only sometimes use less”.
So I managed to hack something together:
I haven’t tried this under Windows, yet, but I’m hoping it works.
Image CC-by-SA: Richard Bartz, Munich Makro Freak
Tyler Romeo wrote:
If I had the time, I would definitely put together some sort of .dir-locals.el for MediaWiki, that way we could make better use of Emacs, since it has a bunch of IDE-like functionality, even if it’s not IDEA-level powerful.
A client wanted to me to help train someone to take over the work for maintaining their MediaWiki installation. As part of that work, they asked for an IDE and, knowing that other MW devs used PHPStorm, I recommended it and they bought a copy for me and the person I was to train.
PHPStorm has “emacs keybindings” but these are just replacements for the CUA keybindings. Somethings that I expected the keybindings to invoke, didn’t. (It’s been a while since I’ve used PHPStorm, so I’ve forgotten the details.)
In any case, I’ve found that a lot of what I wanted from PHPStorm could be implemented in Emacs using the following .dir-locals.el (which I put above my core and extensions checkouts):
((nil . ((flycheck-phpcs-standard .
(mode . flycheck)
(magit-gerrit-ssh-creds . "email@example.com"))))
The above is in addition to the code-sniffing I already had set up to put Emacs’ php-mode into the MW style.
The one thing that PHPStorm lacked (and where Emacs’ magit excels) is dealing with git submodules. Since I make extensive use of submodules for my MediaWiki work, this set up makes Emacs a much better tool for working with MediaWiki.
Naturally, I won’t claim that what works for me will work for anyone else. I’ve spent 15 years in Emacs every day. I was first exposed to Emacs in the late 80s(!!) so the virus has had a long time to work its way into my psyche and, by now, I’m incurable.
Let’s just use Emacs presents a compelling case for Emacs as a writer’s tool — not a geek’s tool — a writer’s tool.
In the process he takes us through his history and frustration with Emacs to the modern day where tools like Org-Mode, elements of a modern UI, and darkroom-mode, plus (in my experience and in his) a more active development community, have made Emacs into a great writing environment.
Working on free software projects isn’t easy. Just because you’re giving away your work for anyone to use doesn’t mean that anyone is going to take it, no questions asked. Take my MediaWiki work as an example. I am being paid for the work, but it is freely licensed and I’m learning about the standards of quality that the community has formed around the code. Frankly, before becoming involved in such a serious PHP-based project, I didn’t have a very high opinion of PHP. Even Rasmus (creator of PHP) doesn’t seem to live in a pure php world and, as a result, thinks of systems where PHP is merely the web frontend instead of almost the entire system. So working with others who have been neck-deep in PHP for years, building one of the top-10 sites on the net entirely in PHP, and gaining intimate familiarity with the quirks of PHP, has been a wonderful experience. But MediaWiki isn’t the only free software project I’m involved in. I also contribute to Emacs occasionally. (For those not so familar with Emacs vs Vi, let’s just say this is like the social situation between Republicans and the Democrats or the Roman Catholics and Southern Baptists: You live next door to them, but you know they’re going to hell.) And it is my most recent commits to Emacs that have gained me noteriety. Yesterday, I was catching up on some blog reading (Planet Emacs, thankyouverymuch) and came across a nifty use of loccur.el. But it used defadvice instead of a hook (and hooks are better — no this is different than emacs vs vi, I swear). I looked at the code and thought, “Hey, I can make a tiny little contribution to Emacs here!” So I made a couple of small changes. Little did I know what a problem that was going to be. Óscar Fuentes used my commit message as an example of how not to write a commit message. This was not the first time I’ve been so honored. Three weeks ago, I made a mistake committing to the bzr repository for emacs and was again used as an example for the Emacs-devel community of how not to make a commit. There are two reasons I’m such a stellar example for the other Emacs developers. First, I’ve been using bzr for a couple of years while working on the iHRIS Suite. This experience (2 years more than most Emacs developers) naturally made me think I had things under control. So I didn’t bother reading over Bzr for Emacs Devs. Second, Emacs recently switched its source-control system (after much debate and some effort on speed the bzr side) from the ancient, worn, CVS to bzr. So people are still adapting their work flow. I just happened to make some commits that were particularly egregious and ended up being great examples of what people should avoid. So, yes, Free Software is a great thing, but that doesn’t mean the developers don’t take it seriously. And being reprimanded in public isn’t the most pleasent experience. But at least I can blog about it!
Emacs23 includes default keybindings for scaling fonts up or down:
C-x C-+ — scale the current buffer’s face/font up C-x C-+ — scale the current buffer’s face/font down
This is good as far as it goes, but I’d really like something a little easier. So I’ve added the following to my .emacs file:
(global-set-key [(control mouse-4)] (lambda () (interactive) (text-scale-increase 1))) (global-set-key [(control mouse-5)] (lambda () (interactive) (text-scale-decrease 1)))
Now, if I hold down the control key and scroll the mouse wheel, the font will get larger or smaller. Some other applications (e.g. Firefox) use “Control +” and “Control -” to do something similar along with “Control 0” to return to the default size. You could set these keybindings in Emacs without losing too much (unless you’re used to C-- and C-0 as prefixes, in which case, you still have C-M-- and C-M-0):
(global-set-key [(control ?+)] (lambda () (interactive) (text-scale-increase 1))) (global-set-key [(control ?-)] (lambda () (interactive) (text-scale-decrease 1))) (global-set-key [(control ?0)] (lambda () (interactive) (text-scale-increase 0)))
None of this will permanently affect the size of the font, so for the next buffer you open or the next time you start Emacs, you’ll have the same size font you started with. If you want to change the default font size, use M-x customize-face RET default RET instead.
I’ve gotten some feedback on the mediawiki mode I’ve been working on. So I’m releasing a new version. Some highlights:
- Now works with HTTP Auth (I’ll write a seperate post on how Emacs handles credentials for HTTP Authentication).
- Introduced tab-completion of sites. If you have multiple MW sites set up that you work on, this makes switching between sites super-easy.
- Started working on making it more XEmacs compatible. As far as I can tell, XEmacs lacks the Unicode support that GNU Emacs has. The released version of XEmacs also lacks the POSIX character classes for regular expressions and ships with a very out-dated version of url.el. All these combine to make it very difficult. But do-able. I’m surprised there are still XEmacs users, but if it doesn’t cause me too much pain, I’ll help them out.
- Misc other clean up (including making the url.el wrappers much better).
Since emacs on Linux can use DBus calls now, I wrote a short notify.el as a demonstration to myself and to save myself from forking notify-send (because, uh, forking is bad) whenever someone mentions my nick in IRC. There is a delay built into it so that your “friends” on IRC can’t DDOS you with notifications. Oh, the really nifty thing about this is the function keywords-to-properties. elisp keywords (:example) allow you to fake named parameters in function calls. This is done a couple of different places in Emacs, the most visible being defcustom. But there isn’t any universal way that I could find to parse the keyword-value pairs into something usable. So I cribbed from defcustom and wrote something that I hope will be useful to others.
I seem to be spending an inordinate amount of time editting MediaWiki wikis, so I’ve had some time to put together a better MediaWiki mode for emacs. In the process, I wrote some code that many people (myself included) seem to think Emacs needs. HTTP POSTing in native elisp is too hard right now, so a http-post-simple.el was written. The original mediawiki.el required this library, but it wasn’t included. I refactored the dependency away and now I have some form parsing functions in elisp that I can contribute back to the Emacs core. Anyway, if you use Emacs and edit MediaWiki pages, check out mediawiki.el and let me know what you think. I’m especially interested in bug reports from anyone.
One of the never-ending subjects of Free Software is “Where are the Women?” While I see it as mostly a non-problem — that is, there are some obvious problems that need to be fixed with time, but no one is going to rectify them right now — I’m doing what I can to encourage my daughters and son in the field. In the meantime, The Decline of Women in Computer Science from 1940-1982 has some fascinating anecdotes:
Computing was unique, however, in the sense that the fledgling profession was still in its infancy and had no strong pre-war gender socialization. This fact must have helped the women in that the returning men lacked programming expertise, and clearly had no expectation of “returning” to a programming job. The lack of structure in the industry was also a boon to women programmers who wanted to continue working even after they became pregnant and had children. Most notably, “Computations, Inc., of Harvard, Massachusetts (outside Route 128), formed in 1958 by Elsie Shutt and several other programmer-mothers who worked part-time and largely at home on problems contracted out to them by their former employers, such as Minneapolis-Honeywell and Raytheon”. These women, widely known as the “Pregnant Programmers” were mentioned by speaker Richard H. Bolt at the M.I.T Symposium on American Women in Science and Engineering in 1964. Bolt, who was a lecturer in Political Science at M.I.T and also a former Associate Director of the National Science Foundation (NSF) from 1960-1963, also mentioned the following:
“I asked one of the unmarried women, a computer programmer in industry, if she thought a woman’s activities as a mother and homemaker would interfere with her opportunities in a career. ‘One good thing about programming,’ she said, ‘is that you can work part time.’”
I was thoroughly exhausted this morning and slept 2 hours past the time I was supposed to meet the others for breakfast. Ouch! I finished setting up the developer laptop and used bzr to download the source code for iHRIS Manage to the laptop. I’ll customize the software for the Ministry of Health using the laptop and then, if we’re able to hire a Rwandan to do in-country development, they’ll have everything ready to go with php-mode set up in emacs and (of course) a link to my PPA so they can get updates easily. Up till now, I’ve been pretty scared of the customizations they needed since I have to finish them up in the next few days. Once Vanessa started sending them to me, I was really relieved. Most of it does look pretty simple. “Add a field here, change a label there.” Speaking of in-country developers, I was pleasantly surprised to find out that dcm and Vanessa were able to find someone with LAMP experience. One can always hope. In the afternoon I met with the head of IT at the Ministry of Health and installed Ubuntu on the server for them. He doesn’t know much about Linux but seemed willing to learn. I’d like to have someone here that I can talk to if we have problems, so I’ve been trying to at least get him or one of his underlings comfortable with Linux. We walked back up the hill to the hotel and dcm soon crashed. I guess it was his turn to be worn out Overall, I’m really pleased with the way things are turning out. I came into this really scared, but I’m getting more confidence by the day. One thing I would like to see is more support for Rwanda in Linux and especially Ubuntu. When I’m setting up Ubuntu, “Rwanda” is not a choice for either the French or English language. And, despite lots of work being done on Linux translations to Kinyarwanda, where “Ubuntu” is actually a word native to the Language, I can’t choose that language as the default in the installer. This affects other areas of the installer, too. When it comes time to pick a timezone, I can’t. I have to tell the installer I’m in South Africa, which means that za.archive.ubuntu.com is picked for the Ubuntu mirror — a far better choice for the network connections I’ve used is still one of the U.S.-based mirrors. (I’m not the only one to think Linux distributions should be more aware of Rwanda, either.) Finally, it would be great if RwandaTel or some other organization took an interest in promoting Linux in Rwanda. They could set up a kernel.org mirror so that I could get my Linux fix faster!