Understanding GNU Screen's captions

I love screen. I know all the cool kids are using tmux now, but screen keeps it simple and does everything I really need.

One of the things I (possibly mistakenly) want is lots of windows. The problem with having lots of windows is they quickly become hard to keep track of, especially since the default screen configuration doesn't have any guiding information quickly available to the user. Fortunately, you can fix this with a caption that appears at the bottom of your terminal.

screen caption

I do this in my ~/screenrc, which boils down to:

### pass commands to screen for describing windows
shelltitle '$ |sh'

### set caption
caption always '%{= kw}[ %{y}%H%{-} ][ %= %-Lw%{+b M}%n%f* %t%{-}%+LW %= ][ %{r}%l%{-} ][ %{c}%c%{-} ]'

There's a lot going on here, and it took an unfortunately long time to work out...

shelltitle '$ |sh' is all about making it easy to know what's in each window, but it's only possible with this extra scripting in my ~/.bashrc:

# dynamic titles for screen
case $TERM in
  screen*) export PROMPT_COMMAND='echo -n -e "33k33\\"'
esac

This passes the last command to screen to use within my caption to identify what's currently happening in each window. This is a lifesaver for someone who makes the questionable life decision of having at least eight windows open in every screen she launches.

That's the simple part; now, let's break down my complicated caption format. Captions aren't documented well. Lots of people post theirs, but usually without explanation - likely because it's a pain to describe. I started off by mashing up other people's captions, but that didn't get me very far. I completely redid mine last week, and I realized pretty quickly that I'd only make it perfect by understanding how to build it up part by part. Inspired by Jay Sitter's article on hardstatus strings, I present a breakdown of my caption:

### set caption
caption always '%{= kw}[ %{y}%H%{-} ][ %= %-Lw%{+b M}%n%f* %t%{-}%+LW %= ][ %{r}%l%{-} ][ %{c}%c%{-} ]'

%{= kw} clear all text attributes and set to text color to white and background to black
[ plain text to mark sections
%{y} set text color to yellow
%H hostname of the system
%{-} go back to previous text settings (text color to white)
][ plain text to mark sections
%= with the later %= in the caption, pad this section on the left so that the caption spans the entire line
%-Lw list windows before current window, the optional 'L' indicates that these windows show their flags
%{+b M} the current window section starts, make text bold, set text color to magenta
%n current window number
%f flags of the current window
* plain text I use to mark the current window
%t current window title
%{-} go back to previous text settings (text color to white, normal weight)
%+LW list windows after current window, the optional 'L' indicates that these windows show their flags
%= with the earlier %= in the caption, pad this section on the left so that the caption spans the entire line
][ plain text to mark sections
%{r} set text color to red
%l current load of the system
%{-} go back to previous text settings (text color to white)
][ plain text to mark sections
%{c} set text color to cyan
%c 24-hour clock
%{-} go back to previous text settings (text color to white)
] plain text to mark sections

Hopefully this explanation inspires you to customize your screen caption to your heart's content!

Oh, by the way, my dotfiles are now available on GitHub.

Footnotes

  1. You could also fix this with a hardstatus. I don't like this solution as much because hardstatus is for status messages from screen, e.g. to alert you about activity, while caption is more thematically in line with giving the details of the windows within the screen.

Liz rides the subway on May 9, 2016

Liz rides the subway is a series containing thoughts I have on the subway, mostly as an experiment to get me to write more. On today's commutes to and from work:

A Fine Frenzy's "Rangers" is a much more poetic song than Taylor Swift's awkwardly similar "I Know Places." A hunted rabbit is a tighter analogy than a hunted fox. Also, I sure haven't looked for any new music lately...

Naomi Novik writes fanfic! Fanfic is my new favorite commute buddy.

It would be really rad if Matt Levine's daily Money Stuff email was sent out before I got on the subway each morning instead of after I got off it.

I feel lucky that it made more sense to drive than take the train every time I left the house last weekend, since I certainly would have been a lot grumpier about not getting a seat then than today. The bruises from falling down a flight of stairs last Friday does not a happy standing Liz commute make. Dreaming of a passive, low effort way to signal invisible pain that is easily understood and widely respected.

Cate Huston's recent article on saying "no" comes at a time when multiple women I care about have hit the same wall from putting in unsustainable amounts of emotional labor to improve tech for women. A choice quote from Huston's writing that can apply to anything:

Saying no is a powerful thing. Refusing obligations and choosing your own priorities is an act of self care and an expression of hope. Saying no is an act of strength. A peaceful resistance. I embrace it, and as with all things, the more I do it the easier it gets.

Amen, sister.

Hearts, stars, and trumpets: the things I 'favorite' but don't 'like'

Twitter recently changed "favorites" to "likes".

We want to make Twitter easier and more rewarding to use, and we know that at times the star could be confusing, especially to newcomers. You might like a lot of things, but not everything can be your favorite.

It's true - not everything can be my favorite. For me, there are three categories for tweets I "favorited": tweets talking about something I like, tweets about something important, and tweets that make me want to offer the author support. I probably didn't favorite anywhere near all of the tweets that talked about something I liked, but I find there's only so many times I'm interested in actively clicking to like a gif of a cat rolling around.

The other two categories - tweets that are about something important and tweets that make me want to offer the author support - are not always things I categorize as things I "like." In fact, the ones that I think are most important to favorite are definitely not things I like, such as commentary on Sandra Bland's death or a friend struggling with her workplace's sexism.

By favoriting, I could help highlight something important, especially since favorites/likes are one of the "engagements" that influence Twitter's "While you were away" selections, and I could highlight anything I found important, not just the easier topics I found "like"able. There are a lot of important stories I want to tell that social media algorithms overlook because they are not "like"able, and in my circles, Twitter was one of the places that was less affected than average by this phenomenon. By favoriting, I could increment a counter. That counter makes it easier for the author to see that myself and 54 other people found their thoughts important and supported them. As the type of person who can internalize metrics better than scattered - though thoughtful and appreciated - notes, I can attest to the positive impact a high (or even just non-zero) favorite count can have. By favoriting, I could express support with a mere click. I enjoyed being able to provide that support when I didn't have the energy to do more than that or couldn't find the time to phrase my support correctly, and I felt a little bit better when friends did the same for me. These nuances are lost when I have to "heart" someone's comments instead of "star" them.

More granularity for our reactions can be helpful. Slack employs a very liberal "do whatever you want with an emoji" reaction, and thanks to Emily Price's creativity, my favorite channel - XOXO's #ladies - uses the trumpet emoji to express emotional support. It works well because we've agreed that "the emotional support trumpet" is sounding our support and because we also agree that we do not need to say anything more to show meaningful support. This is awesome beacuse it's much easier to give support when you don't have to turn often complex feelings into words first. I feel intrinsically empowered to give emotional support trumpets to others, and I feel warm and fuzzy when I receive emotional support trumpets, too.

Maybe adding something like the emotional support trumpet to Twitter's responses could replace the support usage of "favorite"; maybe adding another different thing could replace using "favorite" to highlight something important. But that's just covering how I used the less specific "favorite" where I won't use "like." With an audience as large as Twitter's, we might not even be able agree on a finite set of specific reactions. Whatever the next steps, I miss "favorite" a lot and feel like we've lost something important.

The 'doing good' framework: a manifesto against saying 'good people' and 'bad people'

I remember the first time I reflected on "doing good": I was watching the final scene of a sitcom I grew up with, Boy Meets World. The main characters, who've now come of age, speak with the teacher that has been with them through every phase of their educations and lives:

Mr. Feeny: Believe in yourselves. Dream. Try. Do good.

Topanga: Don't you mean "do well"?

Mr. Feeny: No, I mean "do good."

It's the kind of scene that sticks with you after years of investment in a show. I cried. (And I cried again when I rewatched the scene to write about it.)

A few lines later, Eric tells Mr. Feeny how because of him, he's going to be a "good person who cares about people." At the time, this felt like the pinnacle of personal goals. And in a way, it still is.

But when Eric says he wants to be a "good person who cares about people," I think he actually means he wants to be a person who cares for people by doing good. When Mr. Feeny says "do good," he's referring to caring about people as an action, not an idea. This distinction is important because there are many fallacies in framing people as "good people" and "bad people."

When we call someone a "good person," we tend to idolize them. The overly simplistic model of the "good person" only allows them to do good things, so when they inevitably do harm - we all make mistakes - we either need to categorize them as a "bad person" or to ignore their harmful actions so they can remain a "good person." Since we usually don't want them to turn into an unredeemable "bad person," we often give their harmful actions a free pass. It's important that they are able to address those actions, but the "good person" framework does not give them that space to do so. We need a framework that encourages owning up to their mistakes as a way to do good, especially when they try to repair the harm they caused and also do better in future related situations. Also, when we aren't able to give constructive criticism because it is automatically considered an attack on someone's character, society doesn't have the room to address harmful incidents to improve.

Additionally, deeming someone a "bad person" partially relieves them of responsibility for their actions because their "bad" nature means the only thing they can do is harm. When evaluating someone who repeatedly does harm within a framework centered on actions, we have the space to talk with that person about their harmful actions and how they can repair their negative effects. A framework centered on actions also more readily allows good actions to influence how we view them - if we see someone make changes to do good, we know we can expect them to do good and improve, instead of writing them off as a bad person.

We need a different way to frame people. Enter the "doing good" framework.

The "doing good" framework involves praising people for their actions instead of for their supposed nature as a "good person."

The "doing good" framework holds people accountable for their actions; "good intentions" don't count in this system. Having good intentions doesn't absolve someone of the harm they've done, but people who truly have good intentions are the people who admit they did harm and work to repair the harmful results of their actions. They also learn from their mistakes to align future actions with their good intentions.

The "doing good" framework allows for reform. Someone doing good who mistakenly does harm will not automatically be deemed terrible forever, and someone doing harm has the ability to start doing good and to be recognized for those good actions.

The "doing good" framework can account for circumstance because it doesn't operate in absolutes. If someone cannot do good in a particular situation, there are no actions, good or harmful, that contribute to that person's status under the "doing good" framework. While it is very important to evaluate if acting threatens your safety, people are usually able to do good in more places than they think they can, and inaction can be harmful.

The "doing good" framework allows for society to more carefully reflect on which behaviors it should and should not tolerate. Looking at someone's actions instead of focusing on some concept of character allows us to closely examine how harmful actions negatively affect us. We can then improve by mitigating those effects and working to prevent that harm in the future.

The "doing good" framework does not erase an individual's complicity in systemic problems like racism and sexism. Recognizing an individual's contribution to fighting racism, sexism, etc. encourages others to help eliminate those injustices, and calling out someone's behavior that perpetuates inequality encourages us to take helpful actions instead of harmful ones. However, everyone lives within our racist system, our sexist system, our classist system, etc. and the "doing good" framework still allows us to talk about how some of us benefit from that system and how we can do our part to stop perpetuating them without having to label anyone who benefits as a "bad person."

The benefits of the "doing good" framework have a lot of potential to improve our discourse and our society, and I'm excited to live in a world where those improvements will help us not just "do well" at being good people and instead "do good."

Leave icebreakers to strangers, or how to spin friends and introduce people

My favorite way to meet new people is through my existing set of friends. There are many benefits, the obvious one being that my friends tend to have great taste in people.

But I'm also at least a little bit awkward. Despite consciously thinking about asking thoughtful versions of default questions when I don't have a good starting point, I still get nervous when I don't know if what I'm saying will interest the person I'm meeting. While I don't think that friendship is transitive, starting off on topics that don't interest both parties can cause people to miss out on what could otherwise become a good conversation or even a lasting connection.

If you're introducing your friends to each other, try to suggest something they'd all enjoy discussing.

Sometimes, there's something specific and convenient to talk about:

  • "Liz studies voice; she loves singing opera and operettas. You mentioned you saw Falstaff a few weeks ago?"
  • "Both of you enjoy cooking. Liz, I know you spend most of your time in the kitchen with a Dutch oven, but have you tried pressure cooking yet? Karen made amazing pressure cooker oxtail last week."
  • "You and Geoffrey are both passionate about open-source software. Geoffrey worked on providing software for MIT's computing systems via Debian packages and repos; I think you've submitted patches to some of the packages he's worked with."

Other times, there might not be something precise, but you can still find common ground:

  • "I think you've both mentioned liking classical music."
  • "You and Karen both studied computer science in college."
  • "Geoffrey's been working out of coffee shops lately. I know you have a favorite coffee shop, but forget what it is."

If you can't think of something they have in common on the spot, mention something you find interesting about each of them.

Though you don't have to say something about everyone in the same breath - you want to leave spaces for the conversation to expand. If it looks like people are clicking, you might even get away with only introducing one person!

  • "Liz and I traveled to Sweden earlier this year, and we stayed in a treehouse."
  • "Karen started powerlifting a couple years ago."
  • "Geoffrey and I are members of a church choir and sing a lot of Bach."

If you are meeting someone without the person who brought you, ask "How do you know people here?"

I love this question because I don't have to think too hard about what I'm going to say; I already know how I met my friends. Questions with obvious answers relieve some of the pressure around introducing yourself.

Footnotes

  1. Pun wasn't intended about coffee shops and common ground, but then I decided I liked it. Sorry not sorry.