From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Tu, Do" Newsgroups: gmane.emacs.help Subject: Re: A package in a league of its own: Helm Date: Tue, 2 Sep 2014 01:21:38 -0700 (PDT) Message-ID: <53756104-40ab-4c80-8112-13f305208be5@googlegroups.com> References: <787f8d86-dede-4627-b4e5-3658a1833455@googlegroups.com> <73520ac0-9fc0-42ce-8a15-cc400b6f8308@googlegroups.com> <672a0d66-bc48-4b7a-9279-c7d631a03f79@googlegroups.com> <871trvjpnx.fsf@newcastle.ac.uk> <0e52cfc6-d6ed-4b45-bbd3-2cdd13fcc91b@googlegroups.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Trace: ger.gmane.org 1409646329 16067 80.91.229.3 (2 Sep 2014 08:25:29 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 2 Sep 2014 08:25:29 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Tue Sep 02 10:25:24 2014 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1XOjP2-0006rX-Bi for geh-help-gnu-emacs@m.gmane.org; Tue, 02 Sep 2014 10:25:24 +0200 Original-Received: from localhost ([::1]:36585 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XOjP1-0003vl-Qq for geh-help-gnu-emacs@m.gmane.org; Tue, 02 Sep 2014 04:25:23 -0400 X-Received: by 10.42.119.82 with SMTP id a18mr19148057icr.19.1409646099133; Tue, 02 Sep 2014 01:21:39 -0700 (PDT) X-Received: by 10.50.2.6 with SMTP id 6mr430911igq.10.1409646099050; Tue, 02 Sep 2014 01:21:39 -0700 (PDT) Original-Path: usenet.stanford.edu!uq10no8323456igb.0!news-out.google.com!aw9ni2087igc.0!nntp.google.com!r2no12660741igi.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Original-Newsgroups: gnu.emacs.help In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=14.161.13.65; posting-account=c2AWuQoAAACA36o69JJJEmXY5MOg4YNp Original-NNTP-Posting-Host: 14.161.13.65 User-Agent: G2/1.0 Injection-Date: Tue, 02 Sep 2014 08:21:39 +0000 Original-Xref: usenet.stanford.edu gnu.emacs.help:207305 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:99582 Archived-At: V=C3=A0o 00:25:51 UTC+7 Th=E1=BB=A9 ba, ng=C3=A0y 02 th=C3=A1ng ch=C3=ADn n= =C4=83m 2014, Nikolai Weibull =C4=91=C3=A3 vi=E1=BA=BFt: > On Mon, Sep 1, 2014 at 6:59 PM, Tu, Do wrote: >=20 >=20 >=20 > I seem to prefer ido for exactly the opposite reasons: >=20 >=20 >=20 > > I think helm-find-files is much better than stock ido-find-file or even= ido-find-file because: >=20 > > >=20 > > - It has fuzzy matching by default. You have to install flx to get fuzz= y matching in ido. >=20 >=20 >=20 > Ido comes with Emacs, which is a big plus. Flx can be installed from >=20 > marmalade repo. Stock Ido is a bit better than stock find-file but not that much. At least = with stock find-file, you can open a directory or a file. With Ido, you hav= e to switch. You also have to improve Ido with packages. > > - Some people find that Ido horizontal listing is messy, so they create= `ido-vertical-mode` for cleaner looking. With Helm, you get this by defaul= t with its interface. If you worry the Helm buffer is a bit big, you can al= ways customize its size. > Configuring ido for vertical output requires one line of code: >=20 >=20 >=20 > (setq ido-decorations (quote ("\n" "" "\n" "\n=E2=80=A6" "[" "]" " [No ma= tch]" >=20 > " [Matched]" " [Not readable]" " [Too big]" " [Confirm]"))) Someone already did that so I just used the package. The package also binds= some more key for more convenient such as C-n/C-p and arrow keys. You also= get a pointer point to the candidate you are going to select. >=20 > > - It has highlighting on candidates depend on types: directory has a co= lor, plain file has a color, executable has a color, shell script has a col= or. >=20 >=20 >=20 > I don=E2=80=99t select what file I want to open based on what color it ha= s. >=20 > If I know what I=E2=80=99m looking for, I don=E2=80=99t need visual aides= to find it. >=20 > If I don=E2=80=99t know what I=E2=80=99m looking for, I=E2=80=99ll open D= ired. If you think so, you should try turning off all colors in Dired and see the= difference. I don't select files based on what colors have, but it quickly= helps to filter unrelated items. >=20 > > - Depends on what file type your highlighting candidate is, Helm opens = it appropriately. For example, if you RET on a directory, Helm opens dired;= if you RET on a file, Helm opens that file. You can also customize the app= lication to open the files. Stock find-file at least can open directory; Id= o simply can't. >=20 >=20 >=20 > C-d in Ido opens the currently selected directory. Why should I remember another key binding when it can be done more convenie= nt? Even stock find-file can open file or directory depend on the context. >=20 > > - You can open multiple files with helm-find-files by marking with C-SP= C and press RET. If you want to everything at current directory, you can us= e M-a to mark all then RET. You can even use wildcard expression like stock= find-file >=20 >=20 >=20 > If I want to work on multiple files at once, Dired does that for me. Yes, but you needs extra steps, when you can do it right in your file brows= ing section. And what if you don't want to open a Dired buffers, but just t= he files? >=20 > > - Helm has a list of actions to apply on your files: checksum file, ope= n file externally, switch to eshell, grep, diff... >=20 >=20 >=20 > Again, Dired helps me out here. Again, you can make it more convenient. Like, you browse to a file and you = want to diff/patch to another file. You don't have to go to another immedia= te step, that is Dired. Grep in Helm is interactive, unlike the stock grep/rgrep. Demo: http://tuhd= o.github.io/static/live_grep.gif >=20 > > - Helm is compatible with both Linux and Windows path. Ido can't; you h= ave to drop into stock find-file. >=20 >=20 >=20 > I=E2=80=99m not sure if this is actually true, but you can always use sla= sh as >=20 > a path separator on Windows if Ido can=E2=80=99t handle backslash (which = I >=20 > wouldn=E2=80=99t hold against it). But if you paste Windows path from somewhere, would it work? You have to dr= op back into stock find-file. >=20 > My overall feeling when I looked at Helm when this thread appeared was >=20 > that there=E2=80=99s already packages that do what Helm does that come wi= th >=20 > Emacs: Dired, Ibuffer, and Ido. Sure, Helm can interface with >=20 > Delicious, my web browser, and so on, and if that=E2=80=99s something you= want >=20 > to do, then Helm is great, but for me, Helm is trying to sell me stuff >=20 > that I simply don=E2=80=99t need or want. No package does any of this: - Live grep: http://tuhdo.github.io/static/live_grep.gif - A live outline tree for jumping to function/variable in current file:=20 + Demo 1: http://tuhdo.github.io/static/part3/helm-semantic-or-imenu.gif + Demo 2: https://cloud.githubusercontent.com/assets/4818719/4102208/cda8f3= 92-311e-11e4-9c83-e68df38ef68e.gif - Show local/global mark ring with nice highlighting of major modes: http:/= /tuhdo.github.io/static/part3/helm-all-mark-rings.gif - Interactively select color and faces: http://tuhdo.github.io/static/part3= /helm-color.gif - Interactive Eshell history, certainly superior to the stock C-c C-l: http= ://tuhdo.github.io/static/part3/helm-eshell-history.gif . I store a large a= mount of eshell/shell history, so I want a quick way to narrow down. helm-find-files can even find file at point. That is, you don't need to rem= ember ffap as well. If you write Emacs lisp, move point over the required f= ile and execute helm-find-files, it will prompt the file location and you s= imply RET to enter. All in once nice package.