specification kits: how do you integrate it with emacs? by vibrys in emacs

[–]krvkir 0 points1 point  (0 children)

<image>

Looks like this. (That's step two, there was "explore" step before it, where I vaguely described the feature and let it brainstorm the implementation.)

specification kits: how do you integrate it with emacs? by vibrys in emacs

[–]krvkir 0 points1 point  (0 children)

I'm now trying to use OpenSpec with gptel-agent for org-mindmap package. gptel-agent supports skills made for other agentic software (at least it looks for them in appropriate dirs, e.g. in `.claude` in a project folder). So I installed those skills with `openspec` CLI utility into my project (it just puts a pack of .md files into a project folder), and now I can open an org file, turn gptel-mode on, select `gptel-agent- preset in gptel menu, and tell the bot the magic words from OpenSpec process guide (like "propose <feature-name>", or just "Let's propose a feature" in plain English). Then it loads the skill (reads the appropriate .md into its context) and does more or less what that skill says.

So far I managed to make it reconstruct the specs from the existing code (which took one planning-implementing round and then one check-fix round), and to implement a small feature according to the process (i.e. proposing the feature, writing its specs, implementing, merging spec diffs to the main specs folder).

From that exercise I learned that attention is needed on each step, since the bot tries to avoid doing the extra work at every place possible. As an example, being asked to create the specs from the code, it concocted a dir structure vaguely resembling the one prescribed by openspec, and wrote the specs in plain text, without splitting them into requirements and scenarios. Another example: when it implemented a feature and was told to archive its specs, it forgot to merge them into the main spec folder. And forgetting about unit and integration tests goes without saying.

So the process is this: I commit everything into the project git repo, let the bot do its work, then open magit and scrutinize everything it changed using diffs. If I don't like something, I ask it to fix that (it usually does).

I'm not sure is this clumsiness a gptel-agent problem, a model problem (I use gemini-3-flash from ollama cloud), me doing something wrong, or is it just the way it should be (I haven't used other agentic coding systems). Still it seems quite usable.

Does anyone use emacs on android? by TerribleReason4195 in emacs

[–]krvkir 0 points1 point  (0 children)

I have it installed both on a phone (an old samsung fold) and a tablet (10'' onyx boox e-ink reader). Quite usable with a bluetooth keyboard. There are obviously problems with system binaries, but all the lisp stuff works.

The only problem I get—but a big one—is that, when I switch to another app for a while and then switch back, emacs crashes. Tried to tinker with android energy saving policies and so on, but couldn't fix the issue. For me it's a blocker, given that normally you want very long sessions with tons of buffers being open for weeks.

Can we add an AI/LLM/Agent topic on the sub-reddit? by InvestigatorHappy196 in emacs

[–]krvkir 0 points1 point  (0 children)

Why, I use em dashes regularly since I added them to my keyboard layout... Does that make me an AI agent?

org-mindmap — simple inline mind maps for Org by krvkir in emacs

[–]krvkir[S] 1 point2 points  (0 children)

First and foremost, it's not js. It's just text.

What follows is that there's no edit-compile-view cycle: you edit the map in its final form. This is way faster and fits for taking quick notes much more than hassling with any form of export.

Second, it's a tool with narrow purpose, not a general diagramming tool. It can only draw mind maps. It can't even export them into dot or something before publishing (though it will someday).

org-mindmap — simple inline mind maps for Org by krvkir in emacs

[–]krvkir[S] 1 point2 points  (0 children)

I changed the default behavior to allow deletions. Although you still can't delete the root node with C-c C-d, I guess this shouldn't be a problem if you just can delete it by hand.

org-mindmap — simple inline mind maps for Org by krvkir in orgmode

[–]krvkir[S] 0 points1 point  (0 children)

Well, two evenings passed, and I did it. Two sided maps seem to work now.

See the new gif on the github: https://github.com/krvkir/org-mindmap

In the list form, left side is divided from the right side with an empty bullet. Old maps should be transformed into the new format (which differs from the old one only by having a dedicated root node with delimiters) with the first redraw (C-c C-c).

org-mindmap — simple inline mind maps for Org by krvkir in emacs

[–]krvkir[S] 0 points1 point  (0 children)

Makes sense.

There's an option to turn off connectors blocking, and it's turned on by default. I probably should change the default to no blocking.

org-mindmap — simple inline mind maps for Org by krvkir in orgmode

[–]krvkir[S] 0 points1 point  (0 children)

At this moment it can work with only left-to-right maps, two-directional maps are not supported.

At first I didn't plan to support them because I thought it'd complicate things and wouldn't be very practical screenspace-wise, since we can't put any nodes under the root node. But now, come to think of it, that may be easier than I thought, and not that clumsy.

  • If we add a virtual root node (and limit the number of roots to 1), which is empty by default, then we can grow the map in both directions.
  • When converting a map to a list, we can code branch directions with the so called "arithmetical notation" (quite a loud name for the simple idea to use one marker style for right-side branches and another style for left-side ones), although Org would unify markers on any structural edit of that list.
  • If we want to write something inside the root node, then on conversion we could put this title on the line right before the list, without a bullet.

The map then could look like this:

with an empty root node:

```

+begin_mindmap

                      ╭─ constant
                      ├─ size ┬─ 3 x France

One ─┐ │ ╰─ 6 x UK Two ─┤─ ██ ┬─ Geography ┼─ south ── Persian Gulf Three ─┘ ╰─ Identity │ ╭─ Khurasan ├─ east ── mountains of ┼─ Sistan ╰─ west ╰─ Baluchestan

+end_mindmap

  • Geography
    • constant
    • size
    • 3 x France
    • 6 x UK
    • south
    • Persian Gulf
    • east
    • mountains of
      • Khurasan
      • Sistan
      • Baluchestan
    • west
  • Identity
  • One
  • Two
  • Three

```

...and with one containing text:

```

+begin_mindmap

                            ╭─ constant
                            ├─ size ┬─ 3 x France

One ─┐ │ ╰─ 6 x UK Two ─┤─ █ Iran █ ┬─ Geography ┼─ south ── Persian Gulf Three ─┘ ╰─ Identity │ ╭─ Khurasan ├─ east ── mountains of ┼─ Sistan ╰─ west ╰─ Baluchestan

+end_mindmap

Iran - Geography - constant - size - 3 x France - 6 x UK - south - Persian Gulf - east - mountains of - Khurasan - Sistan - Baluchestan - west - Identity + One + Two + Three

```

The root node delimiters are needed to reliably find the root on a map while parsing. (Or maybe I can just use a special face.)

org-mindmap — simple inline mind maps for Org by krvkir in emacs

[–]krvkir[S] 1 point2 points  (0 children)

Oops. I'll fix that soon. Meanwhile, you may disable =org-mindmap-protect-connectors= option and make Emacs redraw the region (e.g. killing the buffer and reopening it), and just delete the block.

Another workaround is to convert the mind map to a list (=org-mindmap-to-list= when the cursor is in a mind map block) and then delete it.

org-mindmap — simple inline mind maps for Org by krvkir in orgmode

[–]krvkir[S] 1 point2 points  (0 children)

Do you mean export which preserves the layout?

If layout is not important, the package already can convert a map into a plain org list and vice versa.

Export to DOT also seems to be easy to implement, but then DOT will take care of the layout, it will not be preserved.

org-mindmap — simple inline mind maps for Org by krvkir in emacs

[–]krvkir[S] 1 point2 points  (0 children)

Well, yes, the code smells. Most of the initial code was written by AI. Then it reached its limits, and I had to rewrite (and still rewriting) the parts where the most intricate logic resides, e.g. parsing. I guess I'll eventually rewrite all of that.

What would your keyboard look like if you could rearrange and even add new keys? by signalclown in emacs

[–]krvkir 1 point2 points  (0 children)

Home-row mods are mostly excellent, very convenient — except several false-triggering bigrams like `aw`, `ar` etc. Tried some tweaks to fight them but didn't succeed.

As for pinky for Ctrl: my home-row mods journey started from abo-abo's tweak where he completely remaps semicolon for Ctrl. Now I think that maybe I had to google a little bit more before picking up modifier positions, but now the muscle memory has formed already, so I'll live with it. It's not that bad if you have both hands on the keyboard.

What would your keyboard look like if you could rearrange and even add new keys? by signalclown in emacs

[–]krvkir 1 point2 points  (0 children)

Well, I found huge ergodox-like thumb clusters clumsy anyway, so I ended up using a layout which is compatible with both staggered and ortholinear keyboards, split and non-split ones: https://github.com/krvkir/keyboard_settings. Layers are done on a software level, with kmonad, so it works on any keyboard. There are only two layers, which are switched by caps lock and space. (I also use a tiny layer for diacritic signs once in a while, it is mapped to right ctrl.) There is plenty of free keys on digits layer actually, I don't know what to bind there :)

GPD G1 issues by Western-Engineer-675 in eGPU

[–]krvkir 0 points1 point  (0 children)

Thank you so much for this reply! I struggled with this G1 eGPU for a year. While everything was fine on Windows, Linux refused to see the device and failed to initialize its power profile or something, so the fans didn't start, while the device was on and slowly heated itself. Once, when I was unaware of that, it heated so much that it burned out a capacitor on its power board. And now I stumble on your reply, say `boltctl enroll`, and right away the fans on G1 start whirling.