Category Archives: geek

When you feel like you’re spending a lot of time on low-impact activities

Alan Lin asked:

One issue I have is prioritization. I sometimes find myself spending a lot of time on low-impact activities. How do you tackle this in your life? What’s the most important thing you’re working on right now?

It’s easy to feel that most of your time is taken up with trivial things. There’s taking care of yourself and the household. There are endless tasks to check off to-do lists. There’s paperwork and overhead. Sometimes it feels like you’re making very little progress.

Here are some things I’ve learned that help me with that feeling:

  1. Understand and embrace your constraints.
  2. Lay the groundwork for action by understanding yourself.
  3. Act in tune with yourself.
  4. Accumulate gradual progress.

1. UNDERSTAND AND EMBRACE YOUR CONSTRAINTS

Many productivity and time management books seem to have the mindset where your Real Work is what matters and the rest of your life is what gets in the way. Sometimes it feels like the goal is to be able to work a clear, focused 60-hour or 120-hour week, to squeeze out every last bit of productivity from every last moment.

For me, the unproductive time that I spend snuggling with W- or the cats – that’s Real Life right there, for me, and I’m often all too aware of how short life is. The low-impact stuff is what grounds me and makes me human. As Richard Styrman points out in this comment, if other people can focus for longer, it’s because the rest of their lives don’t pull on them as much. I like the things that pull on me.

Instead of fighting your constraints, understand and embrace them. You can tweak them later, but when you make plans or evaluate yourself, do so with a realistic acceptance of the different things that pull on you. Know where you’re starting from. Then you can review commitments, get rid of ones that you’ve been keeping by default, and reaffirm the ones that you do care about. You might even find creative ways to meet your commitments with less time or effort. In any case, knowing your constraints and connecting them to the commitments behind them will make it it easier to remember and appreciate the reason why you spend time on these things.

One of my favourite ways of understanding constraints is to actually track them. Let’s look at time, for example. I know I spend a lot of my time on the general running of things. A quick summary from my time-tracking gives me this breakdown of the 744 hours in Oct 2014, a fairly typical month:

Hours Activity
255.0 sleep
126.3 consulting, because it helps me make a difference and build skills
91.9 doing other business-related things
80.5 chores and other unpaid work
86.2 taking care of myself
38.3 playing, relaxing
30.4 family-related stuff
12.6 socializing
10.3 writing, because it helps me learn and connect with great people
7.4 working on Emacs, because it helps me learn and connect with great people
1.5 gardening
1.0 reading
0.5 tracking
1.7 woodworking

Assuming that my consulting, writing, and working on Emacs are the activities that have some impact on the wider world, that’s 144 hours out of 744, or about 19% of all the time I have. This is roughly 4.5 hours a day. (And that’s a generous assumption – many of the things I write are personal reflections of uncertain value to other people.)

Even with tons of control over my schedule, I also spend lots of time on low-impact activities. And this is okay. I’m fine with that. I don’t need to turn into a value-creating machine entirely devoted to the pursuit of one clear goal. I don’t think I even can. It works for other people, but not for me. I like the time I spend cooking and helping out around the house. I like the time I spend playing with interesting ideas. I like the pace I keep.

So I’m going to start with the assumption that this is the time that I can work with instead of being frustrated with the other things that fill my life.

An average of 4.5 hours a day is a lot, even if it’s broken up into bits and pieces. It’s enough time for me to write a deep reflection, sketch one or two books, work on some code… And day after day, if I add those hours up, that can become something interesting. Of course, it would probably add up to something more impressive if I picked one thing and focused on that. But I tend to enjoy a variety of interests, so I might as well work with that instead of against it, and sometimes the combinations can be fascinating.

Accepting your constraints doesn’t mean being locked into them. You can still tweak things. For example, I experiment with time-saving techniques like bulk-cooking. But starting from the perspective of accepting your limits lets you plan more realistically and minimize frustration, which means you don’t have to waste energy on beating yourself up for not being superhuman. Know what you can work with, and work with that.

You might consider tracking your time for a week to see where your time really goes. You can track your time with pen and paper, a spreadsheet, or freely-available tools for smartphones. The important part is to track your time as you use it instead of relying on memory or perception. Our minds lie to us about constraints, often exaggerating what we’re dealing with. Collect data and find out.

2. LAY THE GROUNDWORK FOR ACTION BY UNDERSTANDING YOURSELF

When I review my constraints and commitments, I often ask myself: “Why did I commit to this? Why is this my choice?” This understanding helps me appreciate those constraints and come up with good ways to work within them.

My ideal is to almost always work on whatever I feel like working on. This sounds like a recipe for procrastination, an easy way for near-term pleasurable tasks to crowd out important but tedious ones. That’s where preparing my mind can make a big difference. If I can prepare a list of good things to do that’s in tune with my values, then I can easily choose from that list.

Here are some questions that help me prepare:

  • Why do I feel like doing various things? Is there an underlying cause or unmet need that I can address? Am I avoiding something because I don’t understand it or myself well enough? Do I only think that I want something, or do I really want it? I do a lot of this thinking and planning throughout my life, so that when those awesome hours come when everything’s lined up and I’m ready to make something, I can just go and do it.
  • Can I deliberately direct my awareness in order to change how I feel about things by emphasizing positive aspects or de-emphasizing negative ones? What can I enjoy about the things that are good for me? What can I dislike about the things that are bad for me?
  • What can I do now to make things better later? How can I take advantage of those moments when I’m focused and everything comes together? How can I make better use of normal moments? How can I make better use of the gray times too, when I’m feeling bleah?
  • How can I slowly accumulate value? How can I scale up by making things available?

I think a lot about why I want to do something, because there are often many different paths that can lead to the same results. If I catch myself procrastinating a task again and again, I ask myself if I can get rid of the task or if I can get someone else to do it. If I really need to do it myself, maybe I can transform the task into something more enjoyable. If I find myself drawn to some other task instead, I ask myself why, and I learn a little more about myself in the process.

I plan for small steps, not big leaps. Small steps sneak under my threshold for intimidation – it’s easier to find time and energy for a 15-minute task than for a 5-day slog.

I don’t worry about whether I’m working on Important things. Instead, I try to keep a list full of small, good things that take me a little bit forward. Even if I proceed at my current pace–for example, accumulating a blog post a day–in twenty years, I’ll probably be somewhere interesting.

In addition to the mental work of understanding yourself and shifting your perceptions by paying deliberate attention, it’s also good to prepare other things that can help you make the most of high-energy, high-concentration times. For example, even when I don’t feel very creative, I can still read books and outline ideas in preparation for writing. I sketch screens and plan features when I don’t feel like programming. You can probably find lots of ways you can prepare so that you can work more effectively when you want to.

2014-12-03 Motivation and understanding 3. ACT IN TUNE WITH YOURSELF

For many people, motivation seems to be about forcing yourself to do something that you had previously decided was important.

If you’ve laid the groundwork from step 2, however, you probably have a list of many good things that you can work on, so you can work on whatever you feel like working on now.

Encountering resistance? Have a little conversation with yourself. Find out what the core of it is, and see if you can find a creative way around that or work on some other small thing that moves you forward.

4. ACCUMULATE GRADUAL PROGRESS.

So now you’re doing what you want to be doing, after having prepared so that you want to do good things. But there’s still that shadow of doubt in you: “Is this going to be enough?”

It might not seem like you’re making a lot of progress, especially if you’re taking small steps on many different trails. This is where keeping track of your progress becomes really important. Celebrate those small accomplishments. Take notes. Your memory is fuzzy and will lie to you. It’s hard to see growth when you look at it day by day. If you could use your notes (or a journal, or a blog) to look back over six months or a year, though, chances are you’ll see that you’ve come a long way. And if you haven’t, don’t get frustrated; again, embrace your constraints, deepen your understanding, and keep nibbling away at what you want to do.

For me, I usually use my time to learn something, writing and drawing along the way. I’ve been blogging for the past twelve years or so. It’s incredible how those notes have helped me remember things, and how even the little things I learn can turn out to be surprisingly useful. Step by step.

So, if you’re feeling frustrated because you don’t seem to be making any progress and yet you can’t force yourself to work on the things that you’ve decided are important, try a different approach:

  1. Understand and embrace your constraints. Don’t stress out about not being 100% productive or dedicated. Accept that there will be times when you’re distracted or sick, and there will be times when you’re focused and you can do lots of good stuff. Accepting this still lets you tweak your limits, but you can do that with a spirit of loving kindness instead of frustration.
  2. Lay the groundwork for action. Mentally prepare so that it’s easier for you to want what’s good for you, and prepare other things so that when you want to work on something, you can work more effectively.
  3. Act in tune with yourself. Don’t waste energy forcing yourself through resistance. Use your preparation time to find creative ways around your blocks and come up with lots of ways you can move forward. That way, you can always choose something that’s in line with how you feel.
  4. Accumulate gradual progress. Sometimes you only feel like you’re not making any progress because you don’t see how far you’ve come. Take notes. Better yet, share those notes. Then you can see how your journey of a thousand miles is made up of all those little steps you’ve been taking – and you might even be able to help out or connect with other people along the way.

Alan has a much better summary of it, though. =)

To paraphrase, you start by examining your desires because that’s the only way to know if they’re worthwhile pursuits. This thinking prepares you and gives you with a set of things to spend time on immediately whenever you have time, and because you understand your goals & desires and the value they add to your life, you are usually satisfied with the time you do spend.

Hope that helps!

Related posts:

Thanks to Alan for nudging me to write and revise this post!

Emacs kaizen: ace-jump-zap lets you use C-u to zap to any character

This entry is part of 4 in the series Emacs Kaizen

I’m perpetually using M-z to zap-to-char and then typing the character back in, because I really should be using zap-up-to-char instead. But if I’m going to get the hang of fiddling with my muscle memory so that I do things the Right Way, I might as well use this opportunity to practise using ace-jump-zap instead. The ace-jump-zap-up-to-char-dwim and ace-jump-zap-to-char-dwim functions behave like their normal equivalents, but if you C-u them, you get ace-jump type behaviour allowing you to quickly zap to any character you see. And since I mentally think of M-z as not including the character, I may as well map it so that M-z behaves that way.

Now I just have to remember that C-u does cool stuff…

(use-package ace-jump-zap
  :ensure ace-jump-zap
  :bind
  (("M-z" . ace-jump-zap-up-to-char-dwim)
   ("C-M-z" . ace-jump-zap-to-char-dwim)))

Emacs Hangout #3: Emacs can read your mind

We’ve been organizing these Emacs Hangouts as an informal way for folks to get together and swap tips/notes/questions. You can find the previous Hangouts at http://sachachua.com/blog/tag/emacs-hangout/ . In this hangout, we shared tips on Emacs configuration, literate programming, remote access, autocompletion, and web development. And then Jonathan Arkell blew our minds with, well, his mind, demonstrating how he got Mindwave working with Emacs and Org Mode. The next one is scheduled for Jan 9, 2015 (Friday) at 7 PM Toronto time (12 AM GMT) – https://plus.google.com/events/cv3ub5ue6k3fluku7e2rfac161o . Want a different time? Feel free to set up an Emacs Hangout, or contact me ([email protected]) and we’ll coordinate something.

Approx. time Topic
0:08 describe-variable
0:12 cycle-spacing
0:14 quelpa, better-defaults
0:18 https://github.com/KMahoney/kpm-list
0:19 org-babel
0:24 noweb
0:27 Beamer, org-present
0:30 Emacsclient
0:32 TRAMP, vagrant, X11 forwarding, git
0:40 Evangelism, Emacs defensiveness
0:42 Code organization
0:47 Cask, Quelpa, el-get
0:54 paradox for listing packages
0:58 Helm, helm-git
1:02 Projectile
1:03 More helm, autocomplete
1:06 Autocomplete and company
1:16 Writing packages, flycheck
1:18 Moving to git, working on Emacs
1:22 Gnus, mu4e, notmuch
1:27 Eww, web browsing
1:28 Web dev tools: skewer-mode, slime, swank-js, web-mode
1:32 o-blog static site generator
1:38 orgaggregate
1:41 EEG data. Emacs can read your mind!

Chat, links:

me 8:07 PM Thanks!
Zachary Kanfer 8:10 PM A description of Emacs’s “describe variable” is here: Examining.html#Examining
JJ Asghar 8:11 PM zachary: thanks! wait wait wait, org-bable can take over your .emacs.d/*.el files?
me 8:18 PM JJ: Yeah, totally! It’s so useful.
JJ Asghar 8:19 PM i need to dig into that
Jacob MacDonald 8:19 PM https://github.com/KMahoney/kpm-list
jay abber 8:23 PM Org mode has functionality for LaTeX/TeX it appears Am I wrong, any ppl here using Emacs for ReST or LaTeX??
jay abber 8:27 PM it is
Jacob MacDonald 8:27 PM I used the PDF export in Org for notes in a math class, since it exports LaTeX nicely.
jay abber 8:27 PM https://www.cs.tufts.edu/~nr/noweb/
me 8:27 PM I’ve been using Org to export ta LaTeX for Beamer output
jay abber 8:27 PM np
jay abber 8:28 PM yeaaah up yup
Jonathan Arkell 8:29 PM Time for a restart.
jay abber 8:29 PM I think it would nice to know who uses emacs mainly graphically or in a terminal?? me = lurker sorry
jay abber 8:30 PM im trying to use it more in a terminal but always go graphic
Jacob MacDonald 8:31 PM emacs –daemon; emacsclient -c
jay abber 8:31 PM yosmiate yosmite me homebrew
jay abber 8:31 PM 24.4
jay abber 8:32 PM I like that
Christopher Done 8:32 PM audio sounds very trippy
jay abber 8:32 PM w/daft punk poster rockiin
Jonathan Arkell 8:33 PM heh! It’s signed too.
JJ Asghar 8:34 PM Sorry guys I have to go! Thanks so much for this!
me 8:34 PM See you!
jay abber 8:34 PM peace or vnc but thats alot of overhead make sure you lock down you sshdconfig files with sane sec practice Emacs over TMUX?????
Christopher Done 8:38 PM https://github.com/chrisdone/chrisdone-emacs/blob/master/packages/resmacro/resmacro.el unrelated, thought i’d share that =p
me 8:38 PM jay: Good suggestions. Want to speak up?
jay abber 8:38 PM lm lurking tonight
Jacob MacDonald 8:38 PM That audio .
jay abber 8:38 PM next one I promise His voice is awesome
Jacob MacDonald 8:40 PM http://www.emacswiki.org/Rudel
jay abber 8:40 PM Well for me sometimes I hate to confess but I just type vi/vim Noone I know uses any type of editor except word hahahaha
Jonathan Arkell 8:40 PM K, i am going to try audio again. Hopefully it will help Was that better?
jay abber 8:41 PM Can emacs do stuff like mpsyt or youtubedl somehow? yes!!!!
Jacob MacDonald 8:42 PM elisp interface to a shell script should work at a bare minimum.
Jacob MacDonald 8:42 PM I mean, there’s a web browser/mail reader/IRC client built in already…
me 8:42 PM I play MP3s in Emacs using emms and mplayer
jay abber 8:43 PM you know what
Jacob MacDonald 8:43 PM There was a Spotify plugin using dbus a while back, I believe.
jay abber 8:43 PM I think mysyt will be fine
Christopher Done 8:43 PM i was thinking of writing an emacs client to gmail via gmail’s API…
jay abber 8:43 PM its is a just a python script and mpv very suave and minimalist both python
Christopher Done 8:45 PM i stick all my own packages and ones i’m using in my repo https://github.com/chrisdone/chrisdone-emacs/tree/master/packages as submodules
me 8:45 PM Christopher: Gmail client might be nice. I use IMAP occasionally, but I miss the priority inbox.
Christopher Done 8:46 PM yeah. i used offlineimap for a while with notmuch.el, that was pretty good. but i’m tempted by the idea of a “light-weight” approach replacing the browser with emacs, requesting emails/search on demand. might be nice their API looked super trivial to work with
Jonathan Arkell 8:48 PM Sorry Yea Is qwelpa (sp?) native emacs? (elisp) Stupid mic. works great for music.
Jacob MacDonald 8:50 PM lol
Jonathan Arkell 8:50 PM I do all my configuration and packages in Org mode
Christopher Done 8:50 PM i just use git for everything =p
me 8:51 PM Jonathan: Oh, maybe you’re doing some kind of audio processing that removes noise or other odd things? </wild guess>
Jonathan Arkell 8:51 PM Ironically not. I am Launching my DAW now to try and sort it ot.. heh err out … not ot…
jay abber 8:53 PM M=x list-packages now installing org-mode
me 8:53 PM Jay: If you’re installing Org from package, be sure to do it in an Emacs that has not loaded an Org file. because Org 8 (package) and Org 7 (which is built into Emacs) have incompatibilities
jay abber 8:55 PM hmm i installed 24.4 via homebrew
Jonathan Arkell 8:58 PM Okay, I am switching to the built in mic, so hopefully it works. Let me know…
Zachary Kanfer 9:11 PM http://emacsnyc.org/videos.html#2014-05
me 9:12 PM https://github.com/aki2o/emacs-plsense ?
jay abber 9:15 PM Im trying to become a ninja using the shell from w/in Emacs but sometimes I have issues with my ENV and PATH
Jonathan Arkell 9:15 PM OS?
Jacob MacDonald 9:15 PM It’s a thing.
Zachary Kanfer 9:15 PM http://emacs.stackexchange.com/
jay abber 9:15 PM Yosmite like pyenv or rubyenv in HomeBrew yes yes
Jacob MacDonald 9:16 PM Depends on if you use emacs like from brew or Emacs.app.
jay abber 9:16 PM I got cha will find it
Jonathan Hill 9:17 PM great package for handling env variables in and so forth in OSX: exec-path-from-shell
jay abber 9:18 PM jonathan: thanks man
Jonathan Hill 9:18 PM just after (package-initialize), do (exec-path-from-initialize) oops (exec-path-from-shell-initialize)
jay abber 9:18 PM jh: ok
Jonathan Arkell 9:19 PM (setenv “PATH” (concat (getenv “HOME”) “/bin:” “/usr/local/bin:” (getenv “PATH”))) That’s waht i do… (add-to-list ‘exec-path “/usr/local/bin”)
me 9:21 PM http://lars.ingebrigtsen.no/2014/11/13/welcome-new-emacs-developers/
Jonathan Arkell 9:22 PM ERMERGERD +1 +1
Jacob MacDonald 9:32 PM Link please?
Bob Erb 9:33 PM What’s it called?
me 9:33 PM https://github.com/renard/o-blog ?
Jacob MacDonald 9:33 PM Thanks.
me 9:34 PM http://renard.github.io/o-blog/ – docs
jay abber 9:34 PM hey
jay abber 9:34 PM sorry I got side tracks I blog in my posts in REST for pelican static blog generator
jay abber 9:35 PM omg
me 9:35 PM Pretty!
jay abber 9:35 PM elisp for static blog oh know
John Wiegley 9:36 PM Hello
jay abber 9:36 PM https://github.com/renard/o-blog you should never shown that to me
Jacob MacDonald 9:37 PM John, somehow I think I’ve seen you before…
me 9:40 PM https://github.com/tbanel/orgaggregate
Jonathan Arkell 9:44 PM https://github.com/jonnay/mindwave-emacs
jay abber 9:44 PM Hey I have to go now
John Wiegley 9:44 PM Bye Jay
me 9:44 PM See you! Thanks for joining!
jay abber 9:44 PM This was awesome I will be on the next one I have to study precalc
me 9:44 PM Yay!
jay abber 9:45 PM take care
me 9:49 PM Oooh… I wonder how to make coloured graphs like that too. Neat! I should practise using overlays…
Jonathan Arkell 9:53 PM https://github.com/jonnay/mindwave-emacs Here is the Display Code: https://github.com/jonnay/mindwave-emacs/blob/master/mindwave-display.org So wait… C-u C-u C-p takes you… uup?
me 9:59 PM Hah! UUP! Brilliant!
Bob Erb 10:01 PM You’re a treasure, Sacha!

Where am I in terms of design?

I’m working on learning more about design. I don’t think about it all the time, but sometimes I check out design blogs like Little Big Details and CSS Tricks. I’m getting the hang of sketching several variants instead of jumping straight into the first idea I have, and sometimes I even show those wireframes to other people before coding it up.

Someone asked me where I’d rate myself on a scale of 1 to 10. It’s hard to do that without thinking about what 1 and 10 are and what’s in the middle. Besides, I know that the scale will keep shifting anyway. I’ll never ever get to 10, and this is good. There’s always more to learn.

Anyway, here’s what I came up with. Which, on reflection, might be overstating it. Sometimes I feel like I’m still throwing everything in including the kitchen sink. But at least this gives me a map, a You Are Here, and more usefully, a sense of what the next step on the path might be.

2014-11-29 Where am I in terms of design

There are at least three components to this, I think. TECHNICAL SKILLS–the CSS and Javascript, the code and the fiddly bits–that’s actually the smallest part, and probably the easiest. I’m not too worried about that. I can learn it when I need to, following the tutorials that other people have written. For the few things that aren’t covered by Javascript polyfills and StackOverflow answers, I can use trial-and-error to bodge my way through (at least until I understand things better).

DESIGN SENSE–now that’s tough. I can read all the usability books I want. I can study the key principles of visual hierarchy or grouping. I can take a master’s degree in human-computer interaction. (Wait, I did!) I know I’m supposed to keep the end users in mind, either by talking to people directly or by keeping personas in front of me. I know I’m supposed to keep things simple and discoverable, with affordances that encourage you to use things in the right way.

I can mostly find my way down well-worn roads. (Want a real-time status update visualization? A mosaic of news items on the front page? A multiple choice survey? Gotcha.) I am often asked to come up with something new, though. Sometimes it’s just new to the group, so we figure out what people want after a little back-and-forth. Sometimes it’s new to me, and I have to do some research. Sometimes, I suspect, I’m trying to come up with something a little new to everyone. Or at least it requires a lot more translation to find something familiar to draw on.

But there’s still so much more to learn before I can confidently sift through conflicting feedback, before I can guide people from vague ideas to that flash of recognition: “Ah, yes, this is what I wanted.”

I don’t know if it’s just a matter of experience. I’ve worked with designers on web projects and I’ve disagreed with them. (Gradients? Really? And you want that to do what?) I’ve also worked with designers I got along really well with, especially the ones who weren’t coming from a print background and who knew the difference between what looked flashy and what was easier to do on the Web.

So. Design sense. This is the part that intrigues me the most. I’m working on developing opinions. It’s not just about memorizing a bunch of principles or applying the latest fads (from skeumorphic to flat, from static to parallax, etc.). I think it involves being able to see, understand, and recommend. Browsing through design blogs doesn’t really help me with this. I have to slow down and think about why something works, why it doesn’t, what other variants I might try, why I like something or another. And then, beyond opinion, there’s also measurement: revealed preferences often go against what we think we want.

This is where WORKFLOW comes in. I’ve been working on resisting the temptation to jump in and start coding things right away. Instead, wireframing possible designs means I can play around with how something looks and behaves, changing it with less friction. (It also means I can turn ideas over to team members in case they want to use that for development practice.) Getting the hang of wireframing will also help me try different variations while being less invested in them.

Research can help me quickly find different types of the same idea, so I can broaden my horizons. For example, looking at a few support communities (Adobe, Apple, and Skype) gave me a better sense of what I liked about each of them and why.

My main challenges for design and workflow are:

  • How can I apply what I’m learning within the constraints that I have? For example, it’s one thing to know that testing is good. It’s another to think about how I might do A/B testing without proper analytics and without hundreds of thousands of views.
  • In the absence of stronger metrics, how can I work with conflicting feedback? Can I get better at generating different variants to help people find something they agree on? Can I get faster at working with low-fidelity prototypes or in-browser code?
  • How can I recognize familiar aspects in new ideas, and get better at cobbling together well-tested ideas from different places? Hmm. Come to think of it, it’s a little like those Master Builders in the LEGO Movie, isn’t it? There’s something about that ability to look at something and say, “Oh, that looks unfamiliar, but it’s really like A and B and C.” I do this kind of connecting-the-dots outside design. I can learn how to do it here too. (Analogies are another way to practise this. =) )

I’ll probably be able to get the hang of the tech along the way, so I’m not worried about it.

I think this will help me learn the kind of design I want. I’m not really interested in the kind of design that involves following fairly well-sorted out paths making snazzy websites for other people, like WordPress theme customization or development or things like that. I can pick that up if I need to, probably.

I’m more curious about getting better at designing new(ish) things, the kind where I can’t just pick a few sites for design inspiration, the kind where I’m making something I haven’t seen before and I have to decide what to show and how it behaves.

Oh! Here is another version of that sketch, in case you want to fill it in yourself. =)

2014-11-29 Where am I in terms of design - blank

Emacs: M-y as helm-show-kill-ring

This entry is part 1 of 4 in the series Emacs Kaizen

After realizing that I barely scratched the surface of Helm’s awesomeness (really, I basically use it as an ido-vertical-mode), I made a concerted effort to explore more of the interesting things in the Helm toolkit. helm-show-kill-ring is one such thing. I’ve bound it to M-y, which I had previously configured to be browse-kill-ring, but helm-show-kill-ring is much cooler because it makes it easy to dynamically filter your kill ring. Also, Kcode>M-y works better for me than C-y does because I know when I want the last thing I killed, but going beyond that is a little annoying.

That said, browse-kill-ring does make it easy to edit a kill ring entry. Maybe I should learn how to modify Helm’s behaviour so that I can add an edit action. There’s already a delete action. Besides, I haven’t used that feature in browse-kill-ring yet, so I can probably get by even without it.

ido fans: you can use helm-show-kill-ring without activating helm-mode, if you want.

On a related note, I like how rebinding M-x (execute-extended-comand) to helm-M-x shows me keybindings as I search for commands. You do have to get used to the quirk of typing C-u and other prefixes after M-x instead of before, but I haven’t had a problem with this yet. This is mostly because I haven’t dug into just how many commands do awesome things when given a prefix argument. I know about using C-u C-c C-w (org-refile) to jump to places instead of refiling notes, but that’s about it. I haven’t gone anywhere close to C-u C-u. Does anyone have a favourite command they use that does really smart things when given that prefix? =)

This Helm intro has animated GIFs and a few other useful commands. Check it out!

Emacs configuration and use-package

Watching the second Experimental Emacs Hangout nudged me to improve how I use use-package in my Emacs configuration.

I had been using use-package‘s :init and :config keywords as a more readable and less-error-prone versions of eval-after-load. (Well, technically, :init happens before it’s loaded, and :config is evaluated after it fully loads.) I also used :bind for global keybindings.

I didn’t know about :ensure and :diminish. Adding :ensure let me get rid of my custom sacha/package-install function, and :diminish let me remove a few lines related to my modeline.

One of the benefits of sharing my configuration is that other people pick up ideas, and then I pick up more ideas from their ideas. I get an excuse to revisit packages that may have added features since the last time I checked them out. I learn from other people’s combinations and customizations.

There’s so much to learn about Emacs, even just in terms of the packages that I’ve already configured. Sometimes I start with just the basics and settle into a routine, forgetting that there are even more things I can do. Sometimes people make incompatible changes, and I have to figure out how to adapt. Sometimes packages become unmaintained, and eventually replacements emerge. Always, always, people write more code, add more features, extend Emacs to do more things. It’s never just about what new things I can do. It’s also about this community of people who tickle their brains by building cool stuff, who follow “What if?” to interesting places.

Anyway. :ensure and :diminish, and a few improvements to my config. (Also because I just switched to the 64-bit binary for Emacs 24.4, how exciting…)

Hat-tip to @gozes for nudging me to write about this – back in April!