<div dir="ltr"><div><div><div><div><div><div><div><div><div>Hey folks,<br><br>Florian, those are some handy commands but they're different from what I would put into a "reset" script. One of my issues with the starter kits is that on top of setting some useful defaults, and installing a bunch of packages, they contain lots of custom commands and tweaks. This usually makes them too opinionated for experienced users, and the choice of extra functionality is quite arbitrary, it's whatever the person making the starter kit considered cool.<br>
<br></div>So I'd like to split this up:<br></div>- "reset" simple sensible defaults<br></div>- choice of dependent packages<br></div>- extra functionality<br><br></div>The first could be it's own package, possible with a customize interface to opt in/out of certain settings. If the extra functionality is useful it should also be packaged.<br>
<br></div>This way creating a starter emacs config simply becomes choosing a packaging system, and choosing a curated set of packages, and *maybe* a very thin layer of tweaks on top of that.<br><br></div>Regarding packaging systems, what Lefteris also asks about, I did a little write-up for a friend recently. It might not be 100% accurate or exhaustive, it's what I gathered from my own excursions and from looking at other people's config.<br>
<br></div>Hope that helps, looking forward to meeting tomorrow!<br><br></div>Arne<br><div><div><div><div><br><div><div><div><div><br></div></div></div></div></div></div></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
2014-07-26 18:25 GMT+02:00 Lefteris Karapetsas <span dir="ltr"><<a href="mailto:lefteris@refu.co" target="_blank">lefteris@refu.co</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div><div><div><div><div><div><div>Hey all,<br><br></div>I am wondering what kind of package managing method do you use. What do you guys use for downloading emacs packages and then managing them?<br></div>
I had started by using git submodules and keeping all of my emacs.d there, with external packages registered as submodules.<br>
<br></div>Since I discovered <a href="https://github.com/dimitri/el-get" target="_blank">el-get</a> though I have seriously simplified the way that emacs packages are maintained. I still keep my .emacs.d in a git repository but all of the external packages are managed by el-get and I don't need to worry:<br>

<br><pre><div><span>(</span><span>defvar</span> <span>el-get-packages-list</span><span>)</span></div><div>
<span>(</span><span>defvar</span> <span>work-only-packages</span> <span>'</span><span>(</span><span>monky</span> <span>protobuf-mode</span><span>))</span></div>
<div><span>(</span><span>defvar</span> <span>personal-only-packages</span> <span>'</span><span>(</span><span>android-mode</span> <span>))</span></div>
<div><span>(</span><span>if </span><span>*at-work*</span></div><div>    <span>(</span><span>setq</span> <span>el-get-packages-list</span> <span>(</span><span>append </span><span>common-packages</span> <span>work-only-packages</span><span>))</span></div>

<div>    <span>(</span><span>setq</span> <span>el-get-packages-list</span> <span>(</span><span>append </span><span>common-packages</span> <span>personal-only-packages</span><span>)))</span></div>
<div> </div><div><span>;; el-get does its magic to make sure all packages are there</span></div><div><span>(</span><span>el-get</span> <span>'sync</span> <span>el-get-packages-list</span><span>)</span></div>
<div><span>(</span><span>el-get</span> <span>'sync</span><span>)</span></div></pre><br></div>So I keep 3 different lists, one for my work computer and one for my personal computer where I define the packages I need only in each different environment. And the common-packages list is the packages I need everywhere. With the last 2 lines el-get makes sure that the aforementioned packages are downloaded, built and up to date. Installing my .emacs.d to a new computer? Just open emacs and wait until it clones and builds all packages. (It will take a long time to do so though)<br>

<br></div>As for specific packages I could go on and on about useful packages but one that I really love using is: <i>expand-region</i>. Its source code is <a href="https://github.com/magnars/expand-region.el" target="_blank">here</a>. I bind it to M - q and it's simply magic. Depending on the language of the file visited by the buffer you are in, it will select the current word. The more times you call it without moving the point the selected region will expand more and more towards greater and greater semantic areas, like variable name, function block e.t.c.<br>

<br></div>So that wraps up some things I discovered after some years of using emacs. Hope to see some of you in one of our meetings and discuss more tips and tricks in detail.<br><br></div>Best Regards,<br><div><div><div>

<div><br></div></div></div></div></div><div class="gmail_extra"><br clear="all"><div><div dir="ltr"><table border="0"><tbody><tr><td style="color:#999999">Lefteris(Eleftherios) Karapetsas</td>
          </tr>
          <tr>
            <td style="color:#999999">Click <a href="http://lefteris.refu.co" target="_blank">here</a> for my CV/portfolio website<a href="http://lefteris.refu.co" target="_blank"><br></a></td>
          </tr>
          <tr>
            <td style="color:#999999"></td>
          </tr>
          <tr>
            <td style="color:#999999">Also maintain a <a href="http://blog.refu.co" target="_blank">blog </a>on various topics, mostly
              engineering<br></td>
          </tr>
          <tr>
            <td style="color:#999999"><br></td></tr></tbody></table></div></div>
<br><br><div class="gmail_quote"><div><div class="h5">On Sat, Jul 26, 2014 at 4:39 PM, C. Florian Ebeling <span dir="ltr"><<a href="mailto:florian.ebeling@gmail.com" target="_blank">florian.ebeling@gmail.com</a>></span> wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
<div><br>
On 26.07.2014, at 15:45, Tilmann Singer <<a href="mailto:tils@tils.net" target="_blank">tils@tils.net</a>> wrote:<br>
<br>
> Arne Brasseur <<a href="mailto:arne.brasseur@gmail.com" target="_blank">arne.brasseur@gmail.com</a>> writes:<br>
>> For example some of the settings I have so far are:<br>
>><br>
>> (setq inhibit-splash-screen t)                  ; no splash screen<br>
>> (menu-bar-mode -1)                              ; no menu bar<br>
>> (tool-bar-mode -1)                                ; no tool bar<br>
>> (scroll-bar-mode -1)                            ; no scroll bar<br>
>> (setq initial-scratch-message nil)              ; empty *scratch* buffer<br>
>> (setq x-select-enable-clipboard t)<br>
>> (require 'uniquify)<br>
>> (setq uniquify-buffer-name-style 'post-forward) ; "file.ext|dir" instead of<br>
>> "file.ext<2>"<br>
>> (fset 'yes-or-no-p 'y-or-n-p)<br>
><br>
> Agree with all of them!<br>
<br>
</div>Yes, I have these too. Another one the I like is to show whitespace mistakes upon toggling with C-x w:<br>
<br>
(global-set-key (kbd "C-x w") (lambda () (setq 'show-trailing-whitespace t)))<br>
<br>
All trailing whitespace becomes become redspace! :)<br>
<br>
I bind C-. to open the string at the cursor, er, point to open in buffer.<br>
<br>
(global-set-key (kbd "C-.") 'find-file-at-point)<br>
<br>
Opening Magit is a major things, so I have it on Cmd-return (in Apple keys).<br>
<br>
(global-set-key (kbd "M-RET") 'magit-status)<br>
<br>
When writing lots of tests, i.e. when doing Ruby, I fing it useful to be able to touch a file easily. I use my own (googled?) function and put it on Alt-return. Then autotest / guard / grunt can pick it up and rerun. (This is for cases when only changing implementation and not the test.)<br>


<br>
(defun touch ()<br>
  "updates mtime on the file for the current buffer"<br>
  (interactive)<br>
  (let ((command (concat "touch " (shell-quote-argument (buffer-file-name)))))<br>
    (shell-command command)<br>
    (clear-visited-file-modtime)<br>
    (message command)))<br>
<br>
(global-set-key (kbd "s-<return>") 'touch)<br>
<br>
Another thing I'm fond of is toggling between the two topmost buffers, which sits on Ctrl-Shift-Arrow-down:<br>
<br>
(defun flip-buffer ()<br>
  (interactive)<br>
  (switch-to-buffer nil))<br>
<br>
(global-set-key [C-S-down] 'flip-buffer)<br>
<br>
I'm not sure if all of these deserve immediate premium level starter kit status, but those are at least the ones I still consider good ideas after having them around awhile =)<br>
<span><font color="#888888"><br>
Florian<br>
<br>
</font></span><br></div></div><div class="">_______________________________________________<br>
emacs-berlin mailing list<br>
<a href="mailto:emacs-berlin@emacs-berlin.org" target="_blank">emacs-berlin@emacs-berlin.org</a><br>
<a href="https://mailb.org/mailman/listinfo/emacs-berlin" target="_blank">https://mailb.org/mailman/listinfo/emacs-berlin</a><br>
<br></div></blockquote></div><br></div>
<br>_______________________________________________<br>
emacs-berlin mailing list<br>
<a href="mailto:emacs-berlin@emacs-berlin.org">emacs-berlin@emacs-berlin.org</a><br>
<a href="https://mailb.org/mailman/listinfo/emacs-berlin" target="_blank">https://mailb.org/mailman/listinfo/emacs-berlin</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div dir="ltr"><div>| <a href="https://twitter.com/plexus" target="_blank">@plexus</a>  | <a href="http://arnebrasseur.net" target="_blank">arnebrasseur.net</a> | <a href="https://leanpub.com/happylambda" target="_blank">The Happy Lambda</a> |<br>
</div></div>
</div>