73

I love the "action" command /me found elsewhere, and think it would be fun to have in the chat. A message like:

/me loves the new chat system

Would show up as:

Josh loves the new chat system

Rather than:

Josh: loves the new chat system

I'm trying to think how it would work with the "bubbles" style. Maybe any messages starting with /me would flip-flop the user's icon and name, and would not be in a bubble. Suggestions welcome.

5
  • 3
    It's also useful to turn yourself AFK for instance, so you don't have to actually say it in chat
    – Ivo Flipse
    Aug 31, 2010 at 17:20
  • 14
    @Ivo you do say it in chat. And it takes up the same amount of space (or more) as actually "saying" it.
    – balpha StaffMod
    Aug 31, 2010 at 17:35
  • 1
    I suppose you can use italics for the same effect for the time being Aug 31, 2010 at 17:54
  • 16
    /me talks about himself in the third person.
    – user27414
    Aug 31, 2010 at 19:57
  • 3
    @Jon, surely you mean "hisself"
    – badp
    Sep 1, 2010 at 19:16

5 Answers 5

23

Okay, well this has been a contentious debate but in the spirit of Friday, and the Friday opening a long weekend (here in the US anyway) I propose the following solution, which I hereby make Community Wiki so those jQuery experts out there can improve it:

To add support for the /me command, if you so choose, bookmark the following:

javascript: var meRe=/^\/me .*$/;var doMe=function() { $('div.message').each(function() {var c=$(this).find('div.content');if(c.length && meRe.test(c[0].innerHTML)){var a=c[0].innerHTML.substr(3);var uc=c.parents('div.user-container');if(uc.find(".message").length>1){c.remove();uc=$('<div class="'+uc[0].className+'"></div>').append(uc.find("div.signature").clone()).append('<div class="message">'+a+'</div>').insertAfter(uc);}else{c.parents(".message").unwrap().html(a); }uc.css("font-style","italic").find('div.signature').children(".avatar,.username,.flair").hide().end().find(".tiny-signature").css("padding",0).show().find(".avatar").hide();}})};void(window.setInterval(doMe, 500))

Then, when in a chat room, open that bookmarklet and all /me messages will be (very crudely) rewritten.

If you prefer greasemonkey (or the Chrome / Opera equivalent), then you get the luxury of a script that doesn't have to all fit on one line:

// ==UserScript==
// @name           So Do Me
// @namespace      http://shog9.com/greasemonkey/scripts
// @description    Attractive display for comments prefixed with /me on SO Chat
// @version        1.1
// @include        http://chat.meta.stackexchange.com/rooms/*
// @include        http://chat.stackexchange.com/rooms/*
// ==/UserScript==

var script = document.createElement("script");
script.textContent = "(" + grease.toString() + ")()";
document.body.appendChild(script);

function grease()
{
  var meRe = /^\/me .*$/;
  var doMe = function ()
  {
    $('div.message').each(function ()
    {
      var c = $(this).find('div.content');
      if (c.length && meRe.test(c[0].innerHTML))
      {
        var a = c[0].innerHTML.substr(3);
        var uc = c.parents('div.user-container');
        if ( uc.find(".message").length > 1 )
        {
          c.remove();
          uc = $('<div class="' + uc[0].className + '"></div>')
            .append(uc.find("div.signature").clone())
            .append('<div class="message">' + a + '</div>')
            .insertAfter(uc);
        }
        else
        {
          c.parents(".message").unwrap().html(a);
        }

        uc.css("font-style", "italic")
          .find('div.signature')
            .children(".avatar,.username,.flair")
              .hide().end()
            .find(".tiny-signature")
              .css("padding",0)
              .show()
              .find(".avatar")
                .hide();
      }
    })
  };
  window.setInterval(doMe, 500);
}

And if anyone wants to roll this code into the real system, feel free! Happy Friday...

7
  • Thanks for the edits @balpha! Much nicer with the small sig. Sep 3, 2010 at 21:17
  • Awesome @Shog9, you fixed the bug with stand-alone posts! Thanks! Sep 3, 2010 at 23:08
  • +1 Billion. Very impressive Shog9!
    – Fosco
    Sep 4, 2010 at 22:10
  • @Shog: Unfortunately, this not only does not solve the issue, you have explicitly taken it out of the hands of the designers. As noted, my objection was not to the presentation of the feature, but the actual feature itself. I basically felt that turning chat into a place where such actions were encouraged would be a bad idea. Now, we will still get users using /me commands all over the place.
    – devinb
    Sep 6, 2010 at 21:20
  • 8
    @devinb: first off, Josh started this - I just made the code a little easier to use. And second, I really couldn't care less whether anyone does this or not. When my wife gestures with her hands while driving, that makes me nervous, it's potentially dangerous, but devinb: /me gestures with his hands - that doesn't really hurt anyone.
    – Shog9
    Sep 6, 2010 at 21:53
  • @Shog, I should have checked the revisions. That was completely my fault.
    – devinb
    Sep 7, 2010 at 12:43
  • 2
    @devinb: Yes I take complete blame for this -- it was my question and my original answer, I just opened it up to others to technically improve upon it. As far as people using /me all over the place, they were doing that even without this script... This script was my way of accepting that this feature won't be added anytime soon. Sep 7, 2010 at 14:14
20
+100

Live chat is, by nature, a less formal discussion environment.

The /me syntax is ubiquitous and extends far beyond IRC. It is more commonly referred to as an "emote."

Emote (v) - to show or pretend emotion

Discussions, whether serious or informal, frequently involve emotions. There is a difference between the following two expressions of emotion, even if it is a slight one:

<Diago> I am angry!
* Diago is angry!

Considering that /me is used quite often currently, without explicit support, I do believe implementing it will be an improvement to the system.

8
  • 1
    The fact that users continually do something isn't a reason to codify it. The tag blacklist is a good enough example of that. Not that the situations are the same, simply that the logic fails. Furthermore, on your Diago example, neither of those are productive to the conversation unless Diago has previous (or intends to ) give a reason for his anger. A reason in which he would (presumably) use his words.
    – devinb
    Sep 1, 2010 at 19:44
  • 5
    While subtle body language and gesture cues are a critical part of human conversation, they are much less subtle when used online, where you have to explicitly state them, at which point you really don't need to pretend to be acting it out.
    – devinb
    Sep 1, 2010 at 19:46
  • 2
    @devinb It's not a reason by itself to condone the behavior. However, without a sufficiently accepted reason for eliminating it, what is the harm in supporting it? Should I mention XKCD again? It is fairly obvious that people will continue to use it, whether the display will be altered or not.
    – Fosco
    Sep 1, 2010 at 19:50
  • 2
    @devinb: I would argue the opposite, that adding a /me command allows for an in-between, a more subtle way of expressing emotions/body language which the medium is otherwise lacking without having to actually say something. Sep 1, 2010 at 19:57
  • 4
    In fact, my example could be modified some, so that posts starting with /me are made less visible than normal messages. It can be useful even in a serious discussion. /me is thinking could, with the right stylization, be a gentle indication that I'm pondering your question instead of simply ignoring you, without disrupting the conversation flow. Sep 1, 2010 at 19:59
  • @Josh, My point is that subtle body language isn't subtle if you have to explictly type it into your browser. At that point you are simply talking about yourself in the third person, which is generally something that most people find annoying. Chat is similar to the phone. Maybe people find it difficult to communicate nuance on the phone, but they make up for it by explaining not by speaking their nuance.
    – devinb
    Sep 1, 2010 at 20:03
  • @devinb: Well said... I do see your point. Sep 1, 2010 at 20:07
  • @Shog9 What'd I say? Sep 3, 2010 at 22:33
6

/me would like such a feature

But /me thinks it would be unnecessary.

/me feels that while it would improve the atmosphere of chat, it wouldn't help much--people will deviate a lot from adding good content{*}

/me now feels that it will make the site tend towards Facebook. Not too much, mind you.

/me feels that there's not much of a difference between a stylised bubbly /me and a normal displayed /me. C'mon, everyone knows what it means. They don't need an extra bubble-visual-cue for that. Use the userscript if you want it.

/me wants a waffle

*Hypocrisy alert--/me spends too much of his time on MSO, which does count as deviation.. But he has his reasons

2
  • 6
    People who refer to themselves in the third-person tend to make me stabby.
    – ale
    Apr 6, 2012 at 15:20
  • Your he has his reasons link is broken.
    – gerrit
    Mar 2, 2017 at 14:25
5

The "Chat" aspect was created for discussion. It was created so that issues which were being hammered out in long convoluted comment threads could be discussed in real-time on in a separate area.

This is in no way enhanced by the ability to say "Devin likes ponies". Or even

devinb: I feel strong about this.
devinb stands up.
devinb: It is absolutely imperative that you use a factory pattern. (or jQuery)

Allowing these /me comments simply creates less of a "serious discussion" and more of a "carnival" atmosphere, where we are encouraged to /sing and /dance for each others amusement.

7
  • 41
    How does OneBoxing xkcd links add to a serious discussion? It doesn't. Doesn't mean it isn't a nice feature for some. Aug 31, 2010 at 17:52
  • 10
    Have you not been on the chat site yet? The carnival has already begun.
    – user27414
    Aug 31, 2010 at 18:09
  • 7
    comments simply creates less of a "serious discussion": chatrooms! srs business
    – Juliet
    Aug 31, 2010 at 18:49
  • I agree with what you're saying devinb and you make a strong case against this feature. I also agree with @Jon B -- the chats, while probably intended to be used as a discussion, aren't being used that way now :-) Aug 31, 2010 at 19:38
  • 2
    @Josh, there have been some serious discussions on chat. I think the large number of silly posts on meta prove that we don't have to be serious all the time, to get value out of chat, that will support the main sites.
    – Zoredache
    Sep 3, 2010 at 23:49
  • @Zoredache: Oh I agree completely, and my previous comment didn't totally reflect that. I guess what I meant was, as the chats are being used now, they're conducive to both serious discussion and a fun, lighthearted atmosphere where we can all get to know each other by letting our personality come out in a way which strictly asking/answering questions doesn't really permit. Sep 4, 2010 at 13:30
  • /me stands up and shouts, "Entertain me!" May 26, 2014 at 1:41
3
+50

This is my solution (I tried to make it look as much like the screenshot as possible):

function me() {
    $('.message .content').each(function() {
        if(this.innerHTML.indexOf('/me ') === 0 && this.innerHTML.trim().length > 4) {
            var container = $(this).parents('.user-container');
            var inner = document.createElement('div');
            inner.innerHTML = container.find('.username').html() + ' ' + this.innerHTML.substr(4);
            inner.id = $(this).parents('.message').attr('id');
            inner.className = $(this).parents('.message').attr('class');
            var me_box = container.clone();
            me_box.css({display: 'block', clear: 'both', fontSize: '.9em'});
            me_box.find('.signature').css('width', 'auto');
            me_box.find('.tiny-signature').css({display: 'block', padding: '0'});
            me_box.find('.messages, .username, .flair, .clear-both').remove();
            me_box.append(inner);
            container.after(me_box);
            $(this).parents('.message').remove();
            if(!container.find('.message').length) {
                container.remove();
            }
        }
    });
}
me();
setInterval(me, 500);
void 0;

It looks like this:

Screenshot

8
  • Of course, this still has its glitches, but it (mostly) works.
    – uınbɐɥs
    Oct 26, 2012 at 23:35
  • Not enough jQuery -1
    – PeeHaa
    Oct 26, 2012 at 23:46
  • While I like it very much, I'd like to see something that didn't work just for me. +1 anyway! Oct 27, 2012 at 8:27
  • @MadaraUchiha - What do you mean?
    – uınbɐɥs
    Oct 28, 2012 at 19:36
  • @ShaquinTrifonoff: I would like to see a canonical Mod/dev answer on this. Oct 29, 2012 at 9:07
  • 1
    @MadaraUchiha: I doubt we'll get an official answer from a dev :-( I think the closest we'll get is Shog9 helping with my code. Thus, I think you should award Shaquin Trifonoff the bounty :-) Oct 29, 2012 at 22:15
  • Sorry I didn't award it to you, I got stuck without connect for 3 (!!!) days, at least you got half of it. (Though I'm not sure why, shouldn't it be to the highest voted answer?) Oct 31, 2012 at 14:11
  • 1
    @MadaraUchiha It's the highest voted answer posted after the bounty was started, with at least 2 upvotes. If there aren't any new answers that have at least 2 upvotes, the bounty isn't awarded to anyone, it disappears. See the bounty section of the FAQ.
    – uınbɐɥs
    Oct 31, 2012 at 19:53

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .