[HN Gopher] Emfy: Emacs for You - Quickly set up vanilla Emacs f...
___________________________________________________________________
Emfy: Emacs for You - Quickly set up vanilla Emacs for editing
Author : todsacerdoti
Score : 307 points
Date : 2021-12-29 16:35 UTC (6 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| catern wrote:
| It's a bit more modern and neat to use .emacs.d/init.el, one less
| file cluttering your home directory.
| eddieh wrote:
| Or the even newer XDG-compatible ~/.config/emacs/init.el
| daptaq wrote:
| I think you should be able to replace the "disown" with "nohup",
| thus making the startup script POSIX compliant.
|
| A general question would be what version of Emacs you are
| targeting. As even Debian stable distributes 27.1, you could make
| use of newer features such as fido-mode (instead of ido and ido-
| everywhere). Then the package configuration doesn't need the
| package-initalize either (On that topic adding NonGNU ELPA would
| also be nice). Also, what it the point of just displaying the
| current time for two seconds?
| daptaq wrote:
| Perhaps of interest, I wrote something similar a few years ago
| for my university in German:
| https://wwwcip.cs.fau.de/~oj14ozun/src+etc/init.el (here a HTML
| version
| https://wwwcip.cs.fau.de/~oj14ozun/src+etc/init.el.html). My
| intention was to demonstrate different configuration patterns.
| It even tries to configure Gnus to work OOTB for our university
| mail accounts. I should probably update it for Emacs 27.1 and
| change a few things where my tastes have changed.
| susam wrote:
| Using "nohup" was my first choice too. Unfortunately, it does
| not prevent the Emacs process from dying when we kill the shell
| from which we launched Emacs. If the shell is killed, Emacs
| dies too. I have confirmed this behaviour on macOS 10.15.7 +
| Zsh 5.7.1 as well as Debian 10.0 + Xfce 4.12 + Bash 5.0.3. As a
| result, I was forced to use "disown" to ensure that the Emacs
| process continues to run even when the shell dies.
|
| By the way, fido-mode is something I am going to add to this
| configuration in future, so thank you for the suggestion. I do
| use fido-mode myself in my personal Emacs configuration.
| However while publishing this project today, I could not make
| up my mind today whether I should still keep ido-mode around
| while suggesting fido-mode to beginners.
|
| In my personal config, I have both ido-mode and fido-mode
| enabled in my configuration. For file searches, ido-mode seems
| to be superior. For example, ido-mode can search deeply nested
| subdirectories recursively for a match, something I have not
| been able to do with fido-mode yet.
| susam wrote:
| I published this project a few minutes ago and I was about to do
| a "Show HN" for this project here. As soon as I submitted my
| "Show HN" post, my submission got redirected to this post and I
| realized that todsacerdoti beat me to it by a few seconds! In any
| case, thank you, todsacerdoti, for posting this here!
| sokoloff wrote:
| Thank you for the line-by-line explanation! That's incredibly
| helpful for new users and helpful even to moderately
| experienced users.
| lovelyviking wrote:
| Do you have advice about installing emacs without package
| manager/ compilation tools into the linux system that currently
| cannot have those and probably will not have those. I am
| looking for the easiest and safest way to do it . I do not want
| to break or brick the running arm based linux system. I do not
| want to interfere with it's main function but still want to be
| able to try emacs there. What is the best way to achieve
| minimal dependency setup?
|
| I am still relatively new to gnu/linux and I understand that I
| can unpack package let's say debian package and install each
| lib. manually but it seems like a big headache, is there any
| easier way? I am looking for something like copy everything
| into one directory without a need to register each lib in the
| system?
| stevekemp wrote:
| If you're experienced you'd download and install all the
| dependencies, perhaps via "/opt", where a local package-
| manager would not interfere.
|
| But honestly? If you're new to using Linux then you should
| use the supported approach by your system. If you're running
| Debian, for example, "apt install emacs". If you're running
| CentOS "yum install emacs".
|
| Trying to do things outside the confines of the package-
| manager seems like an odd-constraint. I can appreciate it
| might make some sense, but when there are so many
| dependencies installed - fetching/building/installing them
| all one at a time is going to be very fiddly and annoying,
| even for a somewhat-experienced user.
| lovelyviking wrote:
| >But honestly? If you're new to using Linux then you should
| use the supported approach by your system. If you're
| running Debian, for example, "apt install emacs". If you're
| running CentOS "yum install emacs".
|
| Thank you for your advice. The system doesn't have package
| manager and installing one doesn't seem like safe option at
| least until I'll be fluent with what exactly package
| manager does. On debian machine I did what you've
| suggested. This is not debian nor CentOS. It's embedded
| solution. In such case it seems like easier to install only
| emacs. I've already installed some custom application with
| libs and it was a headache. I wrote my own custom
| application for it and there I just link statically
| everything I need to have less trouble with installing.
| NeutralForest wrote:
| I think a good starting point is to look at the wiki
| https://www.emacswiki.org/emacs/BuildingEmacs but Emacs
| should run on ARM, I've heard of people using it on a
| Raspberry Pi
| ljm wrote:
| If your goal is to try out emacs on that system by working on
| files that you have inside it, you could install emacs on
| something else and then use the built-in TRAMP functionality
| to work on that system remotely, as if it was local. It works
| transparently over SSH.
|
| Might be an easy way to do it without changing too much on
| your restricted linux box.
| lovelyviking wrote:
| Thank you vary much I'll try to explore TRAMP functionality
| and what it would mean in my case.
| uncletaco wrote:
| Could you not inhibit the startup screen? I get wanting to have
| a "clean" setup but if anyone is using this there is a good
| chance they don't know emacs all that well already and links to
| the tutorial are good for them.
| tptacek wrote:
| You can also (use-package dashboard
| :ensure t :config (dashboard-setup-
| startup-hook))
|
| To replace the startup screen with a list of recent files,
| bookmarks, and Projectile projects you've recently visited.
|
| Remember, though, that just like this document describes, a
| big part of Emacs is not running it repeatedly, but rather
| starting it just once and keeping it alive basically forever;
| you're only rarely going to see the startup screen if you're
| doing orthodox Emacs.
| uncletaco wrote:
| Assuming a person already has use-package or projectile
| installed is part of a larger problem tbh.
| tptacek wrote:
| In the sense that use-package should pretty clearly be
| bundled with Emacs by now, sure. You don't need
| Projectile installed to use dashboard (I barely use
| Projectile, and have it turned off in my dashboard
| thingy).
| susam wrote:
| Sure! This is addressed in the line-by-line explanation where
| it mentions:
|
| > (setq inhibit-startup-screen t)
|
| > If you are a beginner to Emacs, you might find the startup
| screen helpful. It contains links to tutorial, manuals,
| common tasks, etc. If you want to retain the startup screen,
| comment this line out.
| daptaq wrote:
| I think the point of a template is that you can change
| everything yourself, it is not a library you install with a
| package manager and are expected to leave alone. Given the
| good explanation of what is going on, I think disabling the
| about page is a fair decision.
| actually_a_dog wrote:
| This is a pretty good start. I'm fairly sure I have at least 3/4
| of those lines in my personal ~/.emacs.d/init.el file.
| 2pEXgD0fZ5cF wrote:
| This looks nice!
|
| One thing I always like to note when it comes to the topic of
| emacs configurations: Mine has steadily gotten smaller and
| smaller the longer I used emacs.
|
| I'm a relatively new user. I started with Spacemacs, switched to
| doom emacs, and more recently finally crafted my own config.
|
| The evolution of my .emacs.d was a constant "Do I really need a
| plugin/preconfiguration for this?" and for me the answer was "no"
| most of the time once I researched it, so I removed it and either
| switched to the default, or emacs builtin functionality.
|
| Nowadays my config is ~130 lines as well, which includes a few
| lines of documentation and notes since my config is an org file.
| If I had to trim it down further (or set up a config from scratch
| to get to work as fast as possible) I'd say that I could trim it
| down to only a few lines.
| sidkshatriya wrote:
| > I'm a relatively new user. I started with Spacemacs, switched
| to doom emacs, and more recently finally crafted my own config.
|
| I use Spacemacs (and I like it). For people who switched over
| to Doom Emacs, I like asking them why did they switch over?
| What were your reasons?
| Tehchops wrote:
| For me Doom Emacs was much faster and just seemed to have
| saner default configurations. The developer is also
| _incredibly_ responsive and helpful.
|
| I'm coming from Vim, so having evil-mode as a first-class
| integration is nice too.
| mcbuilder wrote:
| I rolled my own emacs config when I started out, for the
| first 3 years or so. When I saw spacemacs I liked the entire
| kitchen sink approach, it opened my brain up to a lot of the
| functionality of emacs/packages that I wasn't touching.
|
| When I saw Doom Emacs though I was kind of skeptical at first
| (this was about 5 years ago), it seemed to have a lot less
| batteries included, but I gave it chance anyway, longing
| after the understanding I got when I wrote my own config.
| I've been entirely happy daily driving it since. Doom Emacs
| just seems to have a different philosophy than Spacemacs,
| it's more like a really well designed configuration framework
| for emacs on which there are nice layers on top instead of
| the more monolithic Spacemacs approach. I can easily
| configure it to my needs, write my own custom modules, and
| hack on it. It really does a sane job updating and managing
| the packages, something I would waste too much time on with
| Spacemacs. So to me is that it seems lower level and better
| software, yet I still get the preconfigured functionality
| that allows me to quickly go take an emacs install from zero
| to hero in a matter of minutes. And did I mention? It's fast.
| danieldk wrote:
| Spacemacs was what convinced me to switch from vim to Emacs.
| However, I found Spacemacs to be unstable and regularly had
| all kinds of annoying issues. This is quite some years ago,
| so perhaps things have gotten better.
|
| However, having experienced Evil, Magit, general.el etc.
| there was no way back. For a while I used my own Emacs
| configuration that emulated many parts of Spacemacs, but was
| far more stable.
|
| However, maintaining my own configuration became a bit of a
| drag. Every time you need another package, you have to figure
| out how it works and how it can be integrated nicely with
| Evil/general.el, etc. So, one day I decided to try Doom and I
| haven't really looked back. It has many of the perks of
| Spacemacs (sane defaults, space-driven shortcuts), but has
| been very solid and stable.
| ljm wrote:
| Looks nice as a simple zero-dep setup. That said, I would
| recommend one of the modus themes[0] as an alternative when Emacs
| 28 comes out, since they're built in to that version. They're
| amazingly thorough and accessible.
|
| [0] https://protesilaos.com/emacs/modus-themes
| masklinn wrote:
| > Looks nice as a simple zero-dep setup.
|
| Though with `use-package`, it has become incredibly easy to
| make even complex setups self-booting (assuming you have an
| internet connection available anyway). It adds all of 5 lines
| (or 8 if you need melpa) which is rather incredible for the
| value it provides.
| ljm wrote:
| I use straight combined with use-package and it's great. I
| don't really _need_ to since I rarely hack on packages in the
| way that straight imagines you would, but I like the middle
| ground it introduces. (defalias 'sup
| 'straight-use-package) (sup 'somepackage)
| (require 'somepackage) ;; sometimes (setq somepackage-
| config-thing) (add-hook 'some-mode-hook #'some-
| package-hook)
|
| I know with use-package you'd do all this in the macro with
| config and init, but especially when it comes to dependent
| packages I prefer having things flat as opposed to nesting
| them.
|
| My config is apparently 333 lines but a lot of that is
| whitespace and comments for grouping, plus the bootstrap code
| which I incidentally use for publishing my blog.
| masklinn wrote:
| > I know with use-package you'd do all this in the macro
| with config and init, but especially when it comes to
| dependent packages I prefer having things flat as opposed
| to nesting them. > > My config is apparently 333 lines but
| a lot of that is whitespace and comments for grouping
|
| The reason I like `use-package` even for global concerns (I
| actually have a `(use-package emacs)` e even though that's
| pretty much entirely global setqs) is it provides some
| grouping structure and encourages keeping each item in the
| proper place.
|
| `:ensure` is also pretty much essential as that's what does
| the bringing-up (ensuring the package being enabled and
| configured is actually installed locally).
| FemmeAndroid wrote:
| This is really nice, but for me there's one thing that keeps me
| away from emacs, and its good multi cursor support.
|
| Very frequently, I'll want to perform this kind of process:
|
| 1. I search for some frequently occurring string or regex in a
| file.
|
| 2. Get a series of cursors for every result of that search.
|
| 3. I'll know that it's possible to do a manipulation of all these
| lines, but frequently it's not immediately obvious how, so I
| experiment a bit at this point. Frequently I end up doing things
| like manipulating the cursor to delete sections of the line, and
| modify the shape and order of some elements. This requires I can
| select portions of text, cut them, and paste them in a different
| part of the line. So each cursor needs to have its own clipboard.
| I also tend to do things like add variables to the cursors.
| Sublime has a nice way to have incrementing integers so the first
| cursor inserts a 1, the second inserts a 2, etc. There are all
| sorts of little tricks like this. One appeal of something like
| emacs would be having a simple language to write stuff like this
| quickly myself.
|
| 4. After experimenting, I complete the manipulation. If I fail
| the first time, I undo, and do it again.
|
| This kind of thing takes less than 15 seconds for me, but it
| saves a ridiculous amount of time.
|
| It's really useful during this to actually be manipulating all
| lines at once, since it lets me see where assumptions I have
| about the data I'm manipulating is incorrect.
|
| I've tried every multi cursor package I've seen in emacs, and
| I've tried to figure out how to get this kind of thing down
| through macros, but the live editing of multiple lines seems
| invaluable and keeps me in Sublime/VS Code. I'd love to know if
| I'm doing something wrong with macros, there's a solution to what
| I'm trying to do, or if realistically my best bet is to stick to
| what I know.
| srcreigh wrote:
| I always use regexp-replace for this.
|
| There's an incrementing counter for regexp-replace, a way to
| manually enter a part of each replacement, and other goodies.
|
| Personally I only use capture groups, no counters or other
| stuff.
|
| I do like using M-p to edit my previous failed replacement
| before trying again. Sometimes I use a simple replacement as a
| test, undo it, then edit it to add further modifications.
|
| https://www.gnu.org/software/emacs/manual/html_node/emacs/Re...
| hsbauauvhabzb wrote:
| Try macro record / macro playback. While saying this I hate
| that I've never properly learned how to debug a recorded macro,
| or manage them better, but they largely suit my use cases.
| CyberShadow wrote:
| I have not tried the multiple cursors package, but regarding
| the problem of manipulating several lines at once with instant
| preview, you could look at the visual-regexp package:
|
| https://github.com/benma/visual-regexp.el
| trabant00 wrote:
| Emacs is complex enough that learning it and elisp si comparable
| to learning linux and bash. I mean it has package and process
| management, logs and everything.
|
| As a new emacs convert after 20 years of vim I will try one day
| to start from scratch for learning purposes. But just like I
| would not use LFS for work I would not use vanila emacs either. I
| use debian distro for linux and doom for emacs.
| jacobsenscott wrote:
| I'm sure doom and spacemacs are great, but the idea that
| vanilla emacs is just too hard to use isn't true. Doom and
| spacemacs are just layers of complexity on top of a very simple
| concept - install and configure some packages. Using this
| template you can see there is no black magic there and how easy
| it is to add packages.
|
| You don't need to know any elisp for that. I've been using
| emacs for years and probably couldn't write a "hello world" in
| elisp. Configuring packages can be done in the configuration
| GUI, or else it is just setting some variables - I think I've
| only ever used 3 eslip functions - (setq), (add-to-list) and
| (add-hook).
|
| Honestly the hardest part of emacs is finding which packages
| are quality and worth installing. This is where I find
| doom/spacemacs/prelude emacs useful. I browse their repos every
| now and then to see what packages are worth trying out - and
| install them with the built in `package-install` command.
| tptacek wrote:
| You can get a long, long, long way into Emacs without even a
| faint understanding of elisp. Lots of people get into Emacs
| because they want an extremely programmable editor, but most
| people get into it because they can draft off the programming
| that other people do.
| taeric wrote:
| I thought by the time you get to .emacs in current versions, the
| package manager is already initialized?
|
| Also curious on the benefits of single space for sentences. I
| confess I don't use abbreviations that need periods often; but I
| also don't use many commands that work on sentences. (And, I do
| still use two spaces for sentences.)
| thom wrote:
| You can (setq package-enable-at-startup nil) in early-init.el
| to stop package loading before you get to init.el.
| taeric wrote:
| How does that fit in with .emacs? I'll dive on documentation
| tonight. Could use some cleaning of my files.
| eddieh wrote:
| May I suggest (unless window-system (menu-bar-
| mode 0))
|
| That way the menu is only disabled in the terminal. Beginners
| might find the menu useful when running a GUI on Windows or Linux
| --I certainly don't mind the menu on macOS as it is always there
| for Emacs.app (regardless of the value of menu-bar-mode).
| aulin wrote:
| I have `(menu-bar-mode 0)` in my init.el and I get no menubar
| on macos, emacs@plus installed with homebrew. Agree though that
| it's stays out of the way and I might re-enable it just for mac
| eddieh wrote:
| I'm running the Yamamoto Mitsuharu version of Emacs.app so
| maybe it is patched to ignore (menu-bar-mode 0).
|
| I recall having my menu bar disappear on some other version
| of Emacs.app in the past, but I think it was from setting
| menu-bar-lines to 0 in the frame properties.
| daptaq wrote:
| Note that `window-system' is deprecated in favor of `(display-
| graphic-p)'.
| eddieh wrote:
| I guess I didn't get the memo. I don't see what was wrong
| with `window-system' as it allowed stuff like `(eq window-
| system 'mac)' and `(memq window-system '(mac ns x))' which is
| nice if you're using different OSs/environments and need
| tailor your config.
| natrys wrote:
| Use of this variable _as a boolean_ is deprecated. Not sure
| why, but what you are doing is perfectly fine.
| profsnuggles wrote:
| If you are trying to check what OS you are running wouldn't
| system-type be better? (eq system-type 'darwin) You could
| be running X on multiple different systems. Although I
| checked the output on netbsd and openbsd, both return
| berkeley-unix as the system-type... which isn't quite as
| helpful. At least I know if I'm on gnu/linux vs a BSD I
| guess. The docstring helpfully lets me know that a value of
| gnu means I'm running on Hurd. It also recognizes
| gnu/kfreebsd apparently because you can't throw a rock
| without hitting one of those.
| eddieh wrote:
| But I sometimes run X on Mac and I find it helpful to
| change a few things for Emacs compiled for X vs Emacs.app
| dasyatidprime wrote:
| For the boolean case, yes.
|
| But note also that an Emacs instance can open frames on
| multiple displays. This is not necessarily that hard to get
| if, for instance, you start with some X frames and then
| invoke emacsclient in a terminal in a way that causes it to
| open a character-cell frame there. window-system is
| documented as a terminal-local variable for this reason, and
| similarly the display-foo-p functions take an optional
| selector argument.
|
| Which means that if you care about that, querying any of
| those once from your init file will not necessarily do what
| you want, and you should consider attaching to something like
| after-make-frame-functions. The global menu-bar-mode
| explicitly states that it applies to all current and future
| frames, too; toggle-menu-bar-mode-from-frame seems to be the
| per-frame version.
|
| But if it's just cosmetic and you don't care about some
| variance in that case, then whatever. :-)
| porcoda wrote:
| Awesome. My .emacs very slowly accumulates little bits that I
| like every time I find pages like this. About once a year I find
| something new that I like and I add it. At this point, my .emacs
| is about 80 lines (not counting comments) accumulated over the
| years since the 1990s. The only packages it depends on are
| programming language modes that aren't distributed with emacs
| itself.
|
| My vimrc is similar - just around 50 lines accumulated over the
| same time period since the 90s.
| rg111 wrote:
| I have been a vim user all my programming life which is not very
| long. Can you please provide me straight-to-the-point,
| opinionated, no words twisted, maybe personal reasoning why I
| should use Emacs over vim?
|
| This is a very honest question.
|
| EDIT: This question is more- what motivates _you_ to be an Emacs-
| er? Why do _you_ use it? I would love to hear your reasoning
| behind choosing and sticking with an editor.
|
| Thanks to umanwizard for the answer. Someone else said that it is
| best to experience it yourself. But you have to understand that
| mastering a new editor is a non-trivial time commitment. I am
| willing to put the time and effort given it is worth it. That is
| what I am trying to find out.
|
| Someone on HN said just some days ago- you cannot simply be a
| tourist in Emacs and hope to get everything that is good with it.
|
| I guess I will learn both.
| _benj wrote:
| I think that we limit ourselves when the question is either/or.
|
| Personally I use JetBrains for work and for languages that I'm
| still learning (Ruby and RoR), vscode for almost anything web
| because their support for JS is unreal. I use vim for pretty
| much every config file and quick edits, and will find myself
| pulling up vim when I need to make some more complicated edits
| on a file since macros on vim are AWESOME.
|
| And then I use emacs (with EVIL) for beancount files and it
| works phenomenally for that! I have used it for some Elixir and
| it just works!
|
| Emacs is really less of an editor and more like a
| framework/platform/dare I say OS? It allows you to customize
| and build on top of it like no other software I've come across.
|
| So I'd say, if you are up for exploring check out emacs (I
| would just start by installing EVIL instead of trying to learn
| all the "chords" that emacs uses by default) and enjoy the
| journey!
| rg111 wrote:
| This makes sense.
|
| When I used to write Js, I used VS Code anyway, because its
| support for Js is really good. I still used vim for
| everything else.
|
| I will keep both.
|
| Thanks.
| NeutralForest wrote:
| I like using Emacs because it does everything. Sometimes not
| well and you have to let it go, for example I wouldn't imagine
| managing Java projects in Emacs. But there's a world of
| discoverability and learning in Emacs that's unmatched in my
| opinion. The writing experience is especially excellent, I
| write all my notes and presentations in Emacs, they can be
| linked together, compiled to PDF or Word, use interactive code
| blocks and much more, it's fascinating.
|
| It also made me interested in subjects I didn't know about like
| knowledge management and the history of Lisps, thanks to its
| community.
| stirfish wrote:
| The 'should' in your question is doing a lot of work. You
| should do what makes you happy.
|
| Sometimes that means trying new things to see what makes you
| happy!
| tptacek wrote:
| You should keep using vim; there isn't a straight-to-the-point
| reason why you should switch from vim to Emacs, or vice/versa.
| umanwizard wrote:
| But trying new things is fun and interesting, which is reason
| enough to give Emacs a spin imo.
| robocat wrote:
| Trying a new editor isn't so much fun to this old dog.
|
| Also trying all the fun and interesting things in the world
| would take thousands of lifetimes: choose wisely how you
| spend your time (which is the most limiting resource many
| of us have in this world).
| User23 wrote:
| I use Emacs because it's the superior tool for editing
| ~/.emacs.d/init.el[1].
|
| For me, it's just fun. I like writing lisp. I like how Emacs by
| default presents you with a *scratch* buffer meant to be used
| for trying out customizations and extensions to the editor. I
| like how I can modify almost any behavior of the editor to suit
| my own idiosyncrasies. I like the _extremely_ high quality of
| the community[2][3][4]. I like how the LSP protocol means that
| I can benefit from considerably more advanced IDE style
| functionality than I could even a few years ago. I even like
| the archaic Emacs style key-binds. However, I do at a bare
| minimum remap capslock to control and I 've been exploring
| other options like configuring space to input space on a tap
| and control when held down.
|
| [1] Haha, only serious.
|
| [2]
| https://protesilaos.com/emacs/dotemacs#h:7b39c38c-ae23-4385-...
| has a nice list.
|
| [3] https://github.com/rougier#emacs-hacking
|
| [4] And there are so many more. https://old.reddit.com/r/emacs/
| is a good community too, despite its parent site's reputation.
| ljm wrote:
| I use Emacs, but not exclusively. It's my daily driver but I'll
| still open VS Code sometimes, and I'll still do a bunch of
| stuff in nano or Vim if I need to.
|
| What motivates me? The lisp-based config is a big one, I can
| learn how to configure Emacs and the knowledge of lisp is
| transferrable outside of it. I enjoy hacking on Emacs that way
| because I also like lisp.
|
| It's also been 10 years and I'm just used to some of the emacs
| conventions. I don't use vim keybindings, I have a minimal
| config that sets up language modes and syntax. It's comfortable
| for me.
|
| So the simple explanation is that I find joy in working with
| emacs, and as much as I find joy in working with other tools
| too, I still come back to the joy that emacs offers me. It's a
| comfortable and familiar environment for the things that I
| spend the most time on, and I use other tools for everything
| else.
| Grimm665 wrote:
| I use both. Vim is my to-go setup, with a minimal config, and
| an assurance that I can count on it being installed on almost
| every server I am working on. Emacs is my home court, where it
| is open all the time with about 100 various files open, and
| with all my organization and productivity tools available.
|
| Vim is absolutely worth learning for the workflow alone, it's
| just a really good editor at heart. Emacs is worth learning for
| the fact that it can do almost anything, and can do them well
| (even emulate vim :)
| xenodium wrote:
| You may enjoy https://youtu.be/JWD1Fpdd4Pc, presented by
| someone who hopped over from Vim.
| CyberShadow wrote:
| When I was choosing the next editor to settle on and invest
| into, what convincingly swayed me towards Emacs was the number
| of reports of vim users who later moved to Emacs, vs. the
| number of reports of users who moved in the other direction.
| hsbauauvhabzb wrote:
| Emacs user here. I've conceded that vim is a better editor
| than emacs. I wish I'd learned vim, then later moved to
| emacs.
|
| Edit: but emacs is a better IDE than vim.
| johnchristopher wrote:
| And what are the numbers ?
| aidenn0 wrote:
| I've been using some vi-like since around 1990. I guess I'm
| still using a vi-like as I'm now using emacs with evil-mode for
| most things.
|
| What got me to switch was developing in common lisp. I hear
| things have much improved, but at the time the best setup for
| vim was a really hacky tmux (or maybe gnu screen?) repl that
| was spawned and vaguely controllable from vim. I started by
| just using emacs as a lisp REPL on steroids, and then started
| to do more with it.
|
| My fingers know more vim key combinations than my brain, and
| they refused to change for emacs. evil-mode didn't exist yet,
| so I settled on using viper (an older vi-like mode) and any
| time my muscle-memory did something that didn't work, I figured
| out how to add that particular key binding. It was super hacky,
| but Worked For Me to let me use emacs for lisp dev and vim for
| everything else.
|
| From then on it was all downhill; there were so many things
| that you _could_ do in vim, but were harder and the vim
| packages tended to be less polished than the emacs packages.
| Neovim seemed to recognize some of the issues with extending
| vim, but (at the time) was really a terminal-first editor. Now
| that I could switch between the two without my fingers
| complaining, when something was better on emacs, I added that
| to my "list of things I do with emacs."
|
| Eventually most of what I do is in emacs rather than vim, and I
| reach for emacs first. I had to engrave some music for my son
| the other day; I've used lilypond (kind of LaTeX for music) in
| the past so I decided to try it with emacs. Turns out lilypond
| ships with an emacs mode that does all the basic things, plus
| registers a command for running lilypond on the current buffer.
| Tile my pdf viewer next to emacs and I can see the results with
| a single command.
|
| I can (and have) set up a similar thing with vim, but the
| community around emacs seems to really take seriously that
| emacs is more of a gui toolkit with really good text support,
| while the parts of vim community is suspicious of any
| significant new functionality to vim that isn't specifically
| about editing text.
| hall0ween wrote:
| Like many things in life, the only way to truly know is by
| experience.
| karlicoss wrote:
| Check out evil mode [0] which brings vim keybindings/modes into
| Emacs, so you will have easier time checking out emacs and
| making your own opinion. I still use both, vim for quick
| edits/on the systems where I don't have an emacs config.
|
| For me the reason to prefer Emacs would be its extensibility
| and ability to modify pretty much any behaviour. I'm no fan of
| elisp, but it's much more reasonable than vimscript.
|
| [0] https://github.com/emacs-evil/evil#readme
| rg111 wrote:
| This sounds really interesting. So, even if someone chooses
| to migrate to Emacs, they can still be in-practice with vim.
| So, when they need to work on someone else's computer or SSH
| into a server, they will still not lose any efficiency.
| umanwizard wrote:
| Well, the "editor wars" are silly. You should use whatever you
| prefer. That said, I started using Emacs a few months ago, and
| can explain what I like about it.
|
| Emacs is not really "an editor" in the sense that vim is; it is
| more like a platform for building custom IDEs. It's built from
| the ground up with customization and exploration in mind. Want
| to know how some function works? It's very easy to jump to the
| code where it's implemented and start reading. Have you ever
| thought "I wish my editor did this or that" ? In emacs you can
| just write the code to make it do whatever you want.
|
| Other editors support plugins, but they're not nearly as
| seamlessly integrated into the core editor as they are in
| emacs. Emacs is mostly written in elisp (which is the same
| language that plugins are written in) so there's basically no
| difference between plugin code and emacs itself, they are all
| just running on the same elisp vm in the same namespace.
| pksebben wrote:
| so much this. as another commenter posted, you can configure
| emacs to just "be a vim" with evil mode anyway, so you can
| treat it like it's vim, and when you see a package somewhere
| that does something cool, add it. the thing that emacs gives
| you that vim doesn't is limitless extensibility. as an
| editor, vim probably has better bindings (it does in my
| opinion at least), but there's no reason you can't have all
| the cake.
| bananamerica wrote:
| They're just incredibly different programs. I'd say use Emacs
| if you wanna be able to deeply customize your experience. The
| flexibility Emacs gives is much superior to anything you get
| with Vim.
|
| To maintain your sanity, I recommend Doom Emacs.
|
| My initial reason for using Emacs was Org Mode.
| tkdc926 wrote:
| So I see configurations in: .emacs .emacs.d/init.el
| .config/emacs/init.el Which is preferred?
| isaiahg wrote:
| Pick whichever, it wouldn't be emacs if there wasn't at least 3
| ways to do something.
|
| read this for a complete answer
| https://www.gnu.org/software/emacs/manual/html_node/emacs/In...
| tptacek wrote:
| This is well written, and I learned stuff (the trailing spaces
| and end-of-buffer indicators).
|
| Modern Emacs configurations tend to revolve around use-package,
| which wraps up the package installer logic at the end of this
| configuration and makes it somewhat declarative. Just going by
| the standards of r/emacs or places like that, it'd be unusual to
| see a .emacs that didn't ultimately boil down to a bunch of use-
| package clauses configuring stuff like LSP, Magit, company, ivy,
| and yasnippet.
|
| If I was going to add just one thing to this starter
| configuration, it'd be a single example of use-package, to make
| it clear how to add and configure a package the user just read
| about online --- it's just such a big part of how Emacs is used
| now.
| daptaq wrote:
| On this topic, I'd like to mention my own "alternative" to use-
| package, setup.el: https://www.emacswiki.org/emacs/SetupEl. I
| write "alternative" in quotes, because it is not really the
| same thing, just a different way to tackle the issue of using a
| generic macro to simplify a personal configuration. While use-
| package has a flat, declaraive structure (for some package,
| these are my hook, this is the code to run before, this is the
| code to run after, ...), setup provides a few context sensitive
| macros that get expanded to regular code. That means you can
| mix in regular logic a lot easier, and the implementation is
| far simpler.
|
| Also it is avalaible on GNU ELPA, so you don't need to
| configure MELPA before downloading it.
| NeutralForest wrote:
| If I may, my conf https://github.com/Nathan-Furnal/dotemacs
| uses use-package quite extensively with lots of things I
| learned along the way. It's a bit large since I have anything
| from programming to writing in there but it's mine =)
| dmitriid wrote:
| > to make it clear how to add and configure a package the user
| just read about online
|
| The how to configure part would be interesting. Because you
| literaly never know. Perhaps it's a setq? Or an add-hook? Or a
| function call? Or a major edit mode? Or a minor edit mode? Or
| perhaps setq-default? Or setting a variable to t, or perhaps to
| 1, or perhaps to some other value? Or...
| ashton314 wrote:
| +1 for use-package being the only thing that's missing. I'm
| delighted at how nice this guy makes Emacs look and work with
| only built-ins (ido in Emacs 27, and fido-veritcal in Emacs 28
| go a long way to increasing Emacs' ergonomics imo) but since
| they're reaching for some installed packages, might as well
| throw use-package in there to foster further growth.
|
| (If I'm not mistaken, use-package _almost_ made it into
| upstream Emacs, but they 're blocked because one company won't
| give away the copyright for one contributor to use-package to
| enable it to be added to Emacs. For the larger Emacs community,
| I hope that happens soon!)
| Mk2000 wrote:
| That problem is solved now, it's going to be added to emacs.
| See:
|
| https://github.com/jwiegley/use-package/issues/282
| natrys wrote:
| There will also be icomplete-vertical. Maybe not as good as
| community/userspace solutions, but many built-ins saw tons of
| usability improvements. Aside from one or two things,
| project.el now covers most of the important projectile
| functionalities. And magit is magit, but for simple things
| vc.el might be enough. Also the amazing Modus themes finally
| stopped my theme hopping.
|
| In elisp side, the generic seq.el/map.el and new string
| functions are now almost enough to not need reaching out to
| "missing stdlib" such as dash.el/s.el etc.
| lvass wrote:
| That's cool, vanilla Emacs can be great depending on your needs,
| specially for getting used to Emacs. I wonder if there are
| similarly clean configs that includes more important packages,
| besides Witchmacs.
|
| This config is notably missing conservative-scroll, which I
| consider essential. A light theme option would be nice too
| (whiteboard is great). Other important configurable builtins are
| electric pairs, y-or-n-p, ispell and mouse-yank-at-point.
|
| If you're using this, beware default redo is very unintuitive,
| and installing undo-tree is a probably a great idea. And it
| enables emacs server, you might prefer daemonizing instead.
| akkartik wrote:
| I eagerly tried this out, and unfortunately it doesn't fix the
| biggest stumbling block for me: Emacs's tab behavior. Coming from
| Vim, I _never_. _ever_. want to hit Tab and see nothing happen.
| Regardless of how strongly my editor thinks it knows best,
| hitting Tab should insert some spaces. I 'll even accept
| indenting the current line the first time I hit Tab. But if I hit
| Tab a second time, follow my other preferences and insert some
| character(s).
|
| And in 5 years I can't for the life of me configure this! No
| solution transparently sets this default for all time. Every new
| fucking file type I try to edit needs me to go around in circles
| fixing this stupid behavior.
|
| Sigh. Back to Vim, I guess. I don't understand why this doesn't
| come up more often in all the blog posts about transitioning
| to/from Emacs.
| lvass wrote:
| Have you tried hooking self-insert-command to the modes you'd
| use it on? Like prog mode and fundamental. The only corner case
| I can think of is if you'd like to tab-insert in org-mode and
| also expand headings using tab.
|
| Edit: Try this: (defun indent-for-tab-command
| () (interactive) (insert-char #x20 4))
| tomcam wrote:
| I too am interested in the Tab question
| tabemacsthrow wrote:
| You want to create a minor mode (minor mode overrides major
| mode key bindings) and have the minor mode enabled globally.
| use-package has a bind-key* function that does this I think.
| Something like (check the syntax, I haven't tested it)
| (require 'bind-key) (bind-key* (kbd "tab") (lambda ()
| (insert " ")))
|
| And you should probably construct the number of spaces from the
| tab-width variable.
| akkartik wrote:
| Thanks! I'll look into this in combination with
| https://nullprogram.com/blog/2013/02/06 the next time I try
| out Emacs.
| tabemacsthrow wrote:
| No, bind-key* should do this for you automatically. If you
| wanted to do it yourself you would make a minor-mode
| manually.
|
| There's also general-override-mode-map from the "general"
| package.
|
| edit: Looking at the code I don't think bind-key* creates a
| minor-mode but it still does what you want (and is probably
| the recommended way).
| akkartik wrote:
| Oh! Let me try that.
| akkartik wrote:
| Here's what I have so far:
|
| * I installed Emacs 26.3 using `sudo apt install emacs`
|
| * I installed Melpa by following https://github.com/melpa
| /melpa/blob/master/README.md#usage
|
| * I installed use-package using `M-x package-install use-
| package`
|
| Now I'm trying to make sense of your instructions while
| reading https://github.com/jwiegley/use-package#readme. I
| don't see a bind-key*, but I do see:
|
| - bind-key
|
| - bind-keymap
|
| - bind-keymap*
|
| Should I try one of those instead? They all seem to be in
| the context of a `(use-package ...)` declaration.
|
| _Edit_ : Never mind, I do see it now at
| https://github.com/jwiegley/use-package/blob/master/bind-
| key...
|
| _Edit 2_ : I just tried it and it didn't work. Turns out
| I've tried this approach in the past:
| https://lobste.rs/s/whaez0/emacs_everywhere#c_l6ez9w
| (edit 2 there, heh)
|
| Wait, the suggestion at the top of that comment now works
| for me on a few different file extensions!
| (setq-default tab-width 2) (setq-default indent-
| tabs-mode nil) ; to insert a tab anyway: C-q TAB
| (define-key global-map [tab] (lambda ()
| (interactive) (insert-tab)))
|
| Thank you!
| alex_smart wrote:
| >I don't understand why this doesn't come up more often in all
| the blog posts about transitioning to/from Emacs.
|
| Because most people who use Emacs like this behaviour.
|
| Also considering that this post promises a relatively vanilla
| editing experience, you shouldn't expect a solution to your
| particular problem.
|
| > And in 5 years I can't for the life of me configure this!
|
| It is not that hard to solve this. It is extremely easy to map
| any key in Emacs. You can just map Tab key to insert a tab if
| that is what you want. It will be like two lines of elisp.
|
| Edit: The reason most Emacs users don't find the tab behaviour
| a problem is: a, Emacs indents correctly more often than not
| and b, you can insert a literal tab character when you want
| using 'C-q Tab'.
| lvass wrote:
| You can't just blanket remap tab as it's overloaded for org-
| cycle, helm-select-action, expand in ido and so on.
| alex_smart wrote:
| You can remap it in global map, or prog-mode map, so it
| would keep the customized behaviour in other modes.
| akkartik wrote:
| Thank you! _global-map_ did the trick for me, though I
| seem to have tried it a few years ago without success:
| https://news.ycombinator.com/item?id=29726398#29731027
| CyberShadow wrote:
| Fighting against idiomatic Emacs keybindings is an uphill
| battle, but the hill is not very steep. The recipe that works
| for me:
|
| 1. Bind the behavior you want in the global map. (global-set-
| key (kbd "<key-here>") #'the-action-you-want)
|
| 2. Any time you encounter a mode which overrides this key,
| press C-h k <key-here>. It will tell you the name of the map in
| which the key is bound (usually foo-mode-map). Then, add:
| (define-key foo-mode-map (kbd "<key-here>") nil). This will
| unmap the key from the mode's map, revealing the binding in the
| global map.
| akkartik wrote:
| Thank you! This is very actionable.
| [deleted]
| [deleted]
| kamaal wrote:
| I recently went back to emacs to try working out some problems in
| SICP. And the first goal I set for myself is not to go down into
| emacs config hell.
|
| I went for the simplest thing I could set up: paredit,
| aggressive-indent, parens-mode, chez(inferior lisp)
|
| So far so good, but one thing I noticed, I had forgotten paredit
| commands, and emacs isn't very pleasant if you don't have things
| in your muscle memory.
|
| By and large emacs is best system you can use if you are writing
| lisp.
| susam wrote:
| When I began using Paredit for the first time, several years
| ago, I could never remember which key sequences slurp and which
| ones barf. Then I made up some mnemonics.
|
| C-( and C-) have parentheses that look nice and round. They
| expand the current s-exp to consume other expressions. Nom nom
| nom!
|
| C-{ and C-} don't look nice and round. They have braces which
| look a bit wiggly. They shrink the current s-exp and barf
| expressions.
|
| These mnemonics have served me and others I have shared this
| with very well.
| haolez wrote:
| I used Emacs for everything, until I got chronic pain in my left
| pinky and went back to "traditional" editors. I've been willing
| to give it a go again in cua-mode, but couldn't find the time
| yet.
|
| And yes, I have tried to replace left-ctrl with capslock, but it
| was annoying as well.
| tomcam wrote:
| I am very interested in this particular use case. What turned
| out to be annoying about it?
| b5n wrote:
| I maintain a somewhat extensive Emacs config, and I've kept a
| lot of the default key commands. I find them incredibly
| ergonomic, and as a bonus you'll find it's the default in most
| terminals.
|
| I use the side of my palm for C, it doesn't take long to get
| used to and allows you to keep your fingers on the home row.
| Obviously this transfers to CUA or any other standard/config
| that utilizes C.
| alimw wrote:
| Why not use right-ctrl in combination with keys on the left
| hand side? If the answer is "because there is no right-ctrl",
| that can be changed.
| lvass wrote:
| Do you use a laptop keyboard? Pressing control with the left
| side of the left palm is just so natural I don't understand why
| people even use their pinkies, I think I started doing that
| even before using emacs.
| b3morales wrote:
| Curling the pinkie and using the knuckle instead of the tip
| also works well for me. In fact I do this for both M and C.
| dmortin wrote:
| You can use emacs with vim-keys or any other config you like.
|
| I never used the built in keys for cursor movement (I use the
| arrow keys), buffer switching (I define my own more efficient
| key), etc.
| clircle wrote:
| Swap control and alt so that you can hit Control with your
| thumb. The thumb is much stronger than the pinky.
| yeetaccount4 wrote:
| xcambar wrote:
| This is pollution by comment.
|
| It is neither informative nor constructive nor actionable.
| Please refrain.
| yeetaccount4 wrote:
| Oh come on, you can't tell me you've seen an emacs or vi
| thread that hasn't included this. It'd be like shipping an OS
| without a text editor...
| chrsig wrote:
| but my nvim is already an alias to emacs. please advise
| Topgamer7 wrote:
| I was trying to switch to emacs, but one thing that drove me nuts
| was the start up time. I had installed spacemacs, and I prefer my
| text editor to start up immediately. I could not find the setting
| to disable checks against the internet on every start up.
| arminiusreturns wrote:
| I tend to use sane emacs when Im on a new system and just need to
| be up and running real fast and dont have my current dotfiles,
| but this looks like it is pretty awesome! Good stuff and well
| done!
| sillysaurusx wrote:
| Ahh, I finally get to flex. With our powers combined, me and a
| random unknown dev successfully set up a Python REPL that has
| access to emacs. I.e. you can program emacs via python:
|
| https://twitter.com/theshawwn/status/1472371143000707075
|
| https://github.com/zielmicha/emacspy/issues/1
|
| Setup guide:
| https://gist.github.com/shawwn/64e17ac3f7b272ce0ce16eb6a593b...
|
| Maybe this'll be the boost you lurkers need to get your butts
| into one of the coolest editors. "Not your dad's editor" -- new
| emacs slogan, probably. /s
|
| Bonus screenshot of compiling emacs on a 96 core TPU:
| https://i.imgur.com/YtJ8jF7.png
|
| It launches emacs, then uses the (relatively) new dynamic modules
| feature to start a Python runtime, which can then import a
| library that accesses emacs.
|
| But to my surprise, Python can also import whatever you already
| have `pip3 install`'ed. I imported jax and did some high speed
| calculations in lisp. Just kidding, I really did import jax, but
| it'll take a bit more work to be able to pass numpy arrays to
| emacs. :) But it's "just" a matter of making some kind of RPC
| system so that (+ a b) ends up calling back into python to do the
| addition. Then the circle will be complete -- elisp from python
| (already done), and python from elisp ("exercise for the
| reader").
|
| For real though, go throw that fella a star on his github repo.
| The _most_ surprising thing was that this project has been
| quietly on github for like two years already. It was sitting at
| zero stars when it popped up in one of my random google searches.
| CyberShadow wrote:
| That's very cool, but I've personally greatly enjoyed learning
| and programming in Emacs Lisp. Not only does its ability to
| immediately evaluate and hot-patch anything work very well with
| the way it's used in Emacs, but also it was a learning path to
| a family of languages which is very interesting and unlike
| mainstream Algol-based ones.
| medo-bear wrote:
| this is just a bizzare and unrelated post
| daptaq wrote:
| I don't get what this has to do with OP?
| divbzero wrote:
| I bet he's been waiting a few weeks for the right HN thread
| to share this new Emacs discovery. Seems only peripherally
| related to OP as "cool Emacs stuff" but I think he found the
| right audience. As a daily Vim user I'll be pulling up Emacs
| again to give all of this a try.
| sillysaurusx wrote:
| I'm sorry, I didn't realize that this was a de facto Show HN:
| https://news.ycombinator.com/item?id=29726481
|
| You're right in this case. Apologies to susam.
|
| The answer, though, is that I'm not going to bother making a
| repo and a website and packaging this up in a nice way, so
| it's always going to seem unrelated to whatever emacs thread
| I happen to post it on. Or I could just not talk about it,
| which has worked well for me in the past.
|
| It seemed semi-related, because the goal of the OP and the
| goal of this is the same: to get new people into emacs. Old
| emacs veterans have no need for an ~/.emacs. But I really
| didn't intend to steal susam's thunder -- sorry -- it just
| wasn't marked as a Show HN.
|
| /me slinks back to his cave of machine learning.
| susam wrote:
| No apologies necessary! It is always nice to see
| interesting Emacs projects in the comment threads. :-)
___________________________________________________________________
(page generated 2021-12-29 23:00 UTC)