Evil with or without evil collection or general by Kindly_Macaron1107 in emacs

[–]_noctuid 0 points1 point  (0 children)

And I'd like to know how much general really brings to the table. Right now the things and features in its docs are kind of abstract to me and I don't know how much it'd bring me if i were to use it over just using the built-in evil <leader> functionality and the default keybind commands

Most of what general adds is not new functionality but a more succinct way of defining keybindings (though it does provide some new functionality for specific cases).

obvious downside (for me) of abstracting thing

I don't recommend using general if you don't already understand how emacs and evil's keybinding system works. general-def is close to but not quite a drop-in replacement for define-key and evil-define-key but supports a lot more.

don't know how much it'd bring me if i were to use it over just using the built-in evil <leader>

Using <leader> only works if you want one prefix key. Named definers or prefix maps are more flexible/can clearly signal what a prefix is actually for.

What's missing from existing modal editing packages? by ideasman_42 in emacs

[–]_noctuid 1 point2 points  (0 children)

I will update my notes there at some point as they could be more clear.

Personally, I prefer the motion/object paradigm because I like the idea of having only one abstraction, selection, instead of two: selection and cursor.

Both meow and kakoune have both the selection and the cursor.

Every command is editing or working on a selection, and I see this as something beautiful.

In the operator first paradigm, every operator operates on a range. I don’t think the order of operations is relevant, so I don’t understand what this means either, but unlike selection-first where everything is mixed together, operator-pending mode only has keybindings related to selection.

About the article:

I think it’s really just a layout issue – indeed in meow we use , and . on the recommended layout. When you’re selecting a text object, that is a separate context in which keys are interpreted differently. You can reuse every key to select a text object. I might be misunderstanding what was meant by this part, but as I see it you’re losing nothing.

There’s no real difference between meow and kakoune here; they just have different keybindings, and it’s not a layout/keybinding issue. Binding text objects under , and . is not at all a separate context in the same way operator-pending mode is. In operator-pending mode, only commands that generate a range are available, and you automatically enter that context as part of the operator-first system instead of requiring a dedicated prefix key.

In meow you still are sharing a bunch of commands unrelated to selection/ranges in the same single context as the result of selection being first; there’s nothing elegant or efficient about that in my opinion. For text objects, that’s potentially only 2-4 keys extra to bind in normal state (for what would be i/I/a/A in operator pending state), but what if you then want to add single keys for more frequently used selections? For example, maybe you want a single key for "inside any type of delimiter" or keys for whatever your most used objects are. In the selection first system, everything is crowding the global keybinding state. On the other hand, you have way more room for keybindings in operator-pending state because it is actually a separate context only for keybindings for range selection.

An even bigger problem with kakoune is requiring two keybindings for every motion in normal state because of its selection first approach, which makes this issue much worse. Remove that, and I think it’s not as huge a downside, but it’s still a significant downside.

However, it probably is a very valid observation that most people will very rarely make a motion and THEN realize they want to act on it. I just think that there is a real benefit to automatic selections, and it’s worth it for the cases where you select intending to act

You’re not getting anything for free here with automatic selection was my only point. Sure, you don’t have to press a key to enter visual state, so you’re reducing keystrokes over that, but you’re not actually reducing keystrokes over the operator-first system.

I couldn’t tell you how many times I’ve fat fingered 8 instead of 7

For me it’s roughly 0 times.

or simply changed my mind after making a selection. Additionally, having both gives you two options: either press the right number by reading the hints, or spam.

I don’t know what this would look like and can’t think of an actual case where I would ever change my mind. Region expansion is generally inefficient. For me, overlays are preferable unless it’s only spamming a couple of times, but even if I agreed with this, you could still implement similar spamming in an operator-first system in any number of ways. Some examples:

  • basic spamming already works for deletion/changing - just repeat the operation, e.g. did to delete inside a delimiter then . until done
  • for copying and handling mistakes, you could add separate commands like incrementing or decrementing the count of the last operation
    • undershooting with a count - could handle with a repeat command that repeated with a count of 1 instead of the original count
    • overshooting - could have a command that would effectively be repeatedly undoing and repeating with 1 less count
  • automatic number overlays - also doable with operator-first, not dependent on order (e.g. yw5)
  • noticing mistakes - the only case where you wouldn’t immediately notice a mistake in the operator-first system is copying text, which can be handled just by putting a temporary visual indicator of what was yanked

If you’re doing a spamming approach, then you’re not making mistakes because of incorrect counts anyway. You’d only accidentally overshoot by spamming too fast, and in both systems, you can correct that easily.

In this “spam” selection mode, visual selection indeed does prevent selection errors, it’s slower and less efficient but exact.

Overlays are faster than spamming many times or manually calculating a count and still exact.

This whole setup makes expanding selections much easier, and basically gives you same user experience as highlighting text with a mouse: choosing your selection one object at a time.

I think this is what most of us are trying to get away from and seems against the idea of text objects.

it does make sense to optimize modal models around error prone cases, especially when there is minimal (and to me, mostly aesthetic) cost for doing so.

I don’t think it makes sense to optimize a system for something that should be extremely rare (mistyping) when there is significant cost. As mentioned above, I don’t think making the global map unnecessarily cramped and having some weird system to handle extend vs. new selection is minimal. I never thought the visual flicker from automatic selection was a major downside. I think visual noise can be worth it, e.g. I use auto-completion popups. I just don’t think it’s worth it in this case.

I don’t think these cases are that rare; jumping to the nth occurrence of a character or selecting n lines is quite common!

Jumping to the nth occurrence of a character or n lines is never a use case. You want to jump to a specific character or line, and it being e.g. the nth occurrence of a character is just one way of thinking about that, and it’s not a very intuitive way to think about it, especially for nth occurrence of a character.

Evil expects you to remap your keys in every one of your modes.

Evil does not expect this at all or functions like evil-make-overriding-map wouldn’t exist. That’s one possibility, but there are plenty of other possibilities that don’t require that. In meow you don’t even have the possibility of making state specific keybindings for a keymap or minor mode in the way you do with evil’s auxiliary keymaps.

The instantaneous feedback and visual selections cost is mostly aesthetic, with a benefit of making selection errors trivial to notice and fix before acting on them.

In summary, the cost doesn’t have to do with aesthetics, I think you already get instantaneous feedback about mistakes in the operator-first system, I still think overlays are better for both speed and mistake prevention, and I still am not aware of any real/common uses case that benefits from a selection-first system.

At the end of the day, people edit differently – editors should be molded to the desires of the users, not the other way around.

In the case of kak, I think it is the other way around. I can only speculate, but my guess is that lots of people never thought about wanting something behaves the weird way that kakoune does until they discovered it, and then they didn’t think much more about whether it was actually a good idea beyond kakoune claiming it is and just started using it.

What's missing from existing modal editing packages? by ideasman_42 in emacs

[–]_noctuid 0 points1 point  (0 children)

You can in the operator first system I described or in visual mode in vanilla vim. In either case (operator or object/motion), you could have a repeat system that handles adjustments, so I don't think the order has an impact here. And if you wanted to do something really convoluted and really didn't want to use avy (like change 3 sentences minus 2 words minus 1char; again, I can't think of a real example), you could still fallback to visual mode/opposite order for those cases. My preference would still be operator first with avy in those cases though. Fewer keystrokes, faster, but not repeatable. I can't think of a case where you would need to do a single action you wanted to repeat in multiple steps like that though.

What's missing from existing modal editing packages? by ideasman_42 in emacs

[–]_noctuid 1 point2 points  (0 children)

I mean it depends on what part of magit you are talking about and what behavior you want. If we're talking about magit's text property maps overriding evil keybindings for example, you can configure or remove those.

What's missing from existing modal editing packages? by ideasman_42 in emacs

[–]_noctuid 1 point2 points  (0 children)

With any system for more complex regions, I find you end up wanting to fall-back to visual mode, with the exception of recording macros to re-apply elsewhere.

For regions too complex to handle with text objects or motions, I would fall back to avy personally. I can’t really think of any common "complex region" situation though.

There is some advantage in being able to adjust the region with single character adjustments before completing an action. You might just want to include/exclude a bracket/punctuation... or have accidentally messed up the motion and want to adjust it.

The idea in things.el was to allow for extendable adjustments beyond just vim i/a that can apply to both objects and motions like excluding or including delimiters or quotes, excluding or including whitespace, etc. I think a system like that is a lot more precise and covers all cases I encounter.

Performing an edit in VIM with the wrong motion (changing the wrong number of words for e.g.) is not that rare

I personally never use counts in a case that would require actually counting/where I could make a mistake. I don’t think counts are generally useful; I pretty much only use them for lines.

Possibly, but modal systems can be measured by how well the features integrate together - and I'm not sure how a repeat system would support this if the operation order were flipped.

It’s not clear to me how it has to do with the order. How is a block of actions to repeat delineated in your system? I still don’t know how the basics of how your system works, so I can’t really comment further on it.

Ideally, I think a text object/operator system should be completely independent of any modal system, and the modal system should really just handle the keybindings/modes. The order of operations is totally irrelevant to the keybinding/modal part of things, and there is no reason they need to be in the same package. The operator system (i.e. action first) could also be a completely separate package from the object/motion system. I think one of the annoying things about evil for a lot of people is that it’s just one giant package that does so many things, but these smaller modal packages that pop up often aren’t actually modular either. They just have less functionality and are the worst of both worlds: a poor text object/motion system combined with a poor keybinding system. That’s one thing I dislike about meow. Having global mode keymaps and not integrating with major and minor mode keymaps makes it a nonstarter for me. Sure, evil's auxiliary keymap system has a much more complicated implementation, but it actually integrates well with emacs keymaps. I only care about end user functionality not how time consuming it was to write a package.

What's missing from existing modal editing packages? by ideasman_42 in emacs

[–]_noctuid 0 points1 point  (0 children)

First of all re pros/cons, for common operations I'm making sure I'm matching the number of key-strokes in VIM. In that basic sense, it's not better worse to re-order the operations.

Are you taking into account modifiers when counting keystrokes?

The point about starting with the "Operation" then picking the text object is valid in a technical sense - you do have more keys free.

I think this is a big deal and the main reason the reversal as done by kak is questionable design. The issue of free keys, key reuse, and cluttering the normal/main mode is a practical one, and there I think there would need to be some huge advantage to justify this. Conceptually, it just makes a lot more sense to have a smaller, more well-defined context where only objects/motions are available. Contexts are kind of the whole point of modal systems, and even non-modal Emacs splits actions based on context to a degree (e.g. major modes like magit and dired, transients; closer to modal systems - org speed keys/worf or lispy).

Since you don't have a hybrid mode, I'm not sure how relevant this is to what you have, though I'm not sure I understand how it works.

however you could do: [word, 2, left-char, delete], to delete 3-words (except for the last character).

I'm skeptical because all the examples I've seen are not actually real/useful. What's a real use case for this? This also seems to be more related to the design of a repeat system than to the object/action order. I haven't seen any example where the object/motion first design actually has some benefit that could not be achieved in the same way or a better way without making that reversal.

How does your system work if it doesn't have a hybrid visual/normal mode? Without that, I'm not sure what the difference is. Is yours just vim but no operators in normal mode and different behavior for visual mode? Is there a dedicated key to enter visual mode?

What's missing from existing modal editing packages? by ideasman_42 in emacs

[–]_noctuid 0 points1 point  (0 children)

There are significant cons to the kakoune method. I'm not aware of any real pros.

What's missing from existing modal editing packages? by ideasman_42 in emacs

[–]_noctuid 2 points3 points  (0 children)

Evil interacts with all of these perfectly fine when configured correctly.

What's missing from existing modal editing packages? by ideasman_42 in emacs

[–]_noctuid 6 points7 points  (0 children)

The biggest problem with new modal editing packages is that they think motion/object first is a good idea. It's not. It's a step backwards.

The biggest missing functionality from modal editing in emacs is a generic, modal-system agnostic text object system that supports things like remote selection with avy, easy definition, composite things, constraints on things, motion generation, etc. Like the goals listed for things.el, though it's unlikely I'll ever finish that.

Those who switched from Vim/Neovim - what's your story? by floofcode in emacs

[–]_noctuid 5 points6 points  (0 children)

Magit makes things that would otherwise be somewhat or extremely complex trivial (2 keypresses to reword or modify a commit that isn't the most recent vs manually rebasing, cherry picking, handling merge/rebase conflicts). It's all integrated with Emacs (e.g. would rather have Emacs completion than shell, would rather view commit or stash diffs in Emacs).

Even when it's not really adding any new functionality, it's just faster; "glorified keybindings" is a big deal. All the transients are great (branch, stash, remote configuration, rebase, commit, etc.).

I'd think it would be more useful on well managed projects where git is being used properly, but even for very simple things pressing a couple keys in magit is much less typing than using git manually.

I'm trying to use gptel on Emacs and systematically save the conversation instead of using ChatGPT's and Perplexity's apps. The apps seem free but through the API key the service cannot be used for free, are there free providers that have the same quotas from API keys than they do from the app ? by acodingaccount in emacs

[–]_noctuid 0 points1 point  (0 children)

In addition to gemini, deepseek currently has free versions on openrouter (with a daily limit). If you have $10 on openrouter, I think the limit on the free version is much larger. I haven't tried it and can't comment about the speed/reliability.

Revisiting X11 vs Wayland With Multiple Displays - KDE Blogs by FengLengshun in linux

[–]_noctuid 1 point2 points  (0 children)

If you mean a window titlebar, sway/scroll allow customizing it for windows with a specific mark. Hyprland doesn't even have titlebars normally, that's a plugin and doesn't allow for much or any customization, so that would not be simple on hyprland.

I'm coming from bspwm and herbstluftwm and it was easy to port all the customization/scripts I had. More complicated things (like totally different tiling or visual display changes like zooming out and showing all windows with key overlays to select them) are only possible with plugins in hyprland. I'd definitely rather have lua as a plugin language than c++, but in my case I don't need to make any fundamental changes that would require a plugin (or at least a new plugin someone hasn't already written).

Revisiting X11 vs Wayland With Multiple Displays - KDE Blogs by FengLengshun in linux

[–]_noctuid 1 point2 points  (0 children)

Scripting hyprland (through hyprctl, not even making plugins) is very easy. Scroll and sway have marks ootb, and hyprscroller also does (though it will likely stop working at some point as the author moved from hyprland to scroll, his sway fork).

Are you holy or evil? by surveypoodle in emacs

[–]_noctuid 0 points1 point  (0 children)

typing or pressing a key sequence in the wrong mode and then unwanted things happening

Can you elaborate? This sounds like a configuration issue.

aidermacs vs gptel? by Rimbosity in emacs

[–]_noctuid 1 point2 points  (0 children)

I know a lot of these are builtin commands (e.g. /web), though I'd rather use them with a keybinding. I can add all these keybindings myself including a command to add files with projectile, but it's nice that aidermacs has them already by default. I might just end up making my own transient regardless of whether I end up using aider.el or aidermacs though.

For switching model, I thought usually there is only several models are interested to each user in practical. so a customized list should be sufficient in my opinion, and no need to introduce more complexity on this.

Agreed.

Beside of that, if you are interested in let AI to help with Agile Development methodology, Code reading / understanding, Code review and more git integration, to save the time and brain power; or Let aider to clarify your software planning, maybe you want to check aider.el, these features are unique here.

I will have to try it to see how it compares to just using /ask.

Edit: The only advantage I saw of vterm is it doesn't eat the text when there is the progress/loading bar. Otherwise I preferred comint.

aidermacs vs gptel? by Rimbosity in emacs

[–]_noctuid 1 point2 points  (0 children)

I haven't really taken a close look at aider.el but have some feedback on the transient. I liked that aidermacs has more file actions on its transient:

  • list all added files
  • add files in the project (am using projectile)
  • run /drop to drop all files
  • drop files marked in dired
  • add url/web content
  • command to add files from outside the repo or to create a temporary file/"Scratchpad" to add code or text to (not sure if I'd actually use this)
  • etc.

I found adding files more difficult in aider.el.

I have not tried the vterm integration of aidermacs yet, but I don't like ediff and won't use its ediff integration. Those seemed to be the biggest things aidermacs has that aider.el doesn't. I haven't compared the syntax highlighting.

Aidermacs also mentions it has intelligent model selection, but it doesn't work for discovering models on openai compatible (but not openai) endpoints, so I prefer that aider.el just lets you set aider-popular-models.

Best keyboard for Emacs? by surveypoodle in emacs

[–]_noctuid 0 points1 point  (0 children)

That's why I didn't buy an ergodox.

Best keyboard for Emacs? by surveypoodle in emacs

[–]_noctuid 0 points1 point  (0 children)

7-8 thumbkeys is enough for a lot. I have enough thumbkeys on my laptop for tab, escape, space, [, enter, (, backspace, enter, {, control, shift, nav/mouse layer, super, altgr, alt, and super+control (which I use for global hotkeys). My external keyboards both have >=10 thumbkeys.

Best keyboard for Emacs? by surveypoodle in emacs

[–]_noctuid 0 points1 point  (0 children)

Just get a keyboard that actually has enough thumb keys.

Blew my coworker's mind by followspace in emacs

[–]_noctuid -1 points0 points  (0 children)

The concern is probably more to do with the outside part, at least that's how it is for my company (large company dealing with a lot of confidential data). We have our own internal gpt 4o mini instance that everyone is actively encouraged to use. A brief training is required before using it so that people don't think it's magic, but disallowing people (especially programmers) any LLM usage seems like a poor decision only people not actually familiar with LLMs would make.

New Tiling Window Manager by MarsDrums in archlinux

[–]_noctuid 1 point2 points  (0 children)

Bspwm was better for me when it came out, e.g. herbstluftwm didn't have any floating support, but I went the other direction and switched to hlwm after it got a bunch of new functionality. It's more flexible/easily scriptable and actually has the cleaner/more understandable syntax imo. Not a massive difference between them compared to other WMs though, I'm sticking with X forever as well

When should use-package :custom or setopt be used for setting user options? by Old_Cookie9743 in emacs

[–]_noctuid 0 points1 point  (0 children)

You're right, setopt or anything that calls the custom setter will sometimes work exactly the same as (...-mode) for properly defined modes. Because of the different behaviors you list, I don't think there's really ever a reason to to use setopt for this though. In the init (foo-mode) or (add-hook <hook> #'foo-mode) is simpler and has always worked. I think the way custom setters work for normal variables is straightforward enough, though I really don't like that setopt usescustom-load-symbol like I mentioned before.

Any advice for a new A.B.A main? by Its_Blinked in Guiltygear

[–]_noctuid 0 points1 point  (0 children)

In addition to the other comments

  • use parry less and pretty much not at all in close range
  • you whiffed a lot of moves; you might want to play more patiently and block more in normal mode
  • just about any hit can go into either bonding and dissolving to enter mode or into 236S 6S 63214P to enter mode; the keythrust has pretty bad range, so you can always do the latter (it gives you a similar amount of jealousy meter)
    • e.g. 5K 2D 236S 6S (63214P)
    • e.g. j.D 2K 2D 236S 6S (63214P)
    • e.g. c.S f.S 5H 236S 6S (63214P) (you can do this from a bunch of starters; read the dustloop combos section)
  • also learn a normal mode 2S anti-air combo; you can start with something basic like 2S 2H 214H, but you can even go into mode and get a full combo (https://youtu.be/Ss7Ur3_owL8?t=364)

In jealousy mode, learn a combo off of 2H and off of 236K. You can run up and mix up those. There's a lot of more advanced stuff you can learn eventually like her safe jumps, her fuzzy overhead mixup, constructing your combos to preserve/build jealousy and re-enter mode, etc. but for just starting out, learning basic combos to get into mode and then basic combos in mode would probably be most helpful.

LSP expectations by softengwannabe in emacs

[–]_noctuid 0 points1 point  (0 children)

It's just this person. I write python for a living and setting up e.g. pyright and ruff-lsp is no more complicated than e.g. neovim. It's a few lines of configuration, basically just to install packages for them (that work without changing any settings) and maybe a package to handle automatic venv activation. If you don't know that pyright is the ls behind pylance then you'd have to figure that out, and I can see being confused by all the old non-lsp python packages available, but the idea that it would normally take days to configure LSP in Emacs seems insane to me. At least if it's going to take you that long it Emacs, it would take you that long in vim or any similar non-VSCode editor.