Skip to content

Conversation

@KRtekTM
Copy link

@KRtekTM KRtekTM commented Sep 23, 2025

Since 2012, requests for tabbed panels have been appearing on the Altap forum. I've been thinking lately that I would also like a similar feature.
At the same time, I wanted to try OpenAI Codex on a larger project. Long story short, here are the tabbed panels...

image image

salamand_tabs

@janrysavy
Copy link
Contributor

That’s amazing - I looked at your pull request and my jaw just dropped. As Jakub Červený said, it’s both brilliant and a little scary at the same time. I wanted to ask: what share of the work was done by AI, and how much time did you personally put into it? Roughly how many hours of work does it represent? Did you study Salamander’s code base beforehand, or did you leave most of the design decisions up to the AI?

I haven’t checked the pull request yet, but I’ll definitely take a closer look. GitHub Copilot apparently has some support for PR reviews - we should probably start using that. I’ll also write a post about the status of comments translation into English; ideally, we should land this PR only once the relevant modules have been translated - I’ll explain the reasons.

Either way, huge thanks - fantastic work!

@KRtekTM
Copy link
Author

KRtekTM commented Sep 23, 2025

Hello Jan (and the rest of the team :))

Over the last month, I’ve been gradually testing how complex tasks Codex from OpenAI can handle (I work as a QA tester and automation specialist by profession, programming is just a hobby), and I have to say I’ve been very surprised.

At the moment, I’ve been spending about 5 days on this feature in my spare time. My actual contribution to the code itself is almost zero — all the changes were made by the AI. I handle intermediate steps with git, merging and solving conflicts, specifying the prompts for the Codex and verifying/approving the tasks and changes suggested by Codex.

The first step was that I gave it a vague verbal description of the upcoming feature, with the goal of letting it analyze the existing code and propose executable tasks for implementation.
It generated 3 tasks in total, which I started running one by one. The first was preparing helpers — Codex estimated 45 minutes — and I also instructed the same agent to fix compilation errors.
The second task was refactoring the actual WinAPI application. This was more complicated because Codex started running out of tokens (its internal logic failed). I tried rerunning it several times, even attempted to break it down into smaller pieces, but eventually, on the second or third day, I managed to get the original task completed (about 1.5 hours of computation with around four intermediate refinements to fix compilation errors).
I didn’t use the last task for implementation — instead, I started testing the application directly (since I wanted to use the functionality myself, and as a QA, that’s closest to me anyway). After that, I prepared about 20 different prompts describing how I wanted it to look, work, or what issues I wanted fixed.

And to explain why there are some comments in Czech in my pull request — simply because I give all instructions to Codex in Czech. I interact with it in natural language as if I were explaining things to a colleague. So I agree with you, and I must say I have a similar impression so far — brilliant and scary at the same time.
I consider it a similar shift in approach to programming, like the transition from assembly language to higher-level programming languages...

First prompt used for the analysis:

Altap Salamander is a fast and reliable two-panel file manager for Windows. The feature request is for Tabbed Panels.
Přidat pro oba z panelů (levý i pravý) možnost tabů jako v prohlížeči. První tab bude vždy defaultní, nepůjde odebrat,
bude obsahovat stávající panel. Uživatel bude mít možnost přidat další tab, čímž se vlastně vytvoří kopie toho tabu
defaultního (taky bude obsahovat panel), ale tento panel bude fungovat jako další instance (nezávisle na panelu v prvním
nebo jiném tabu), takže si bude držet historii zobrazených cest a adresářů. Salamander se tedy bude chovat vždy jako
dvoupanelový souborový manažer, a to vždy mezi tím levým a pravým panelem, který je zrovna na aktivním levém nebo
aktivním pravém tabu. Pro název tabu vždy použij název složky která je zrovna v jeho panelu otevřená.
Prosím prostuduj celý kód a navrhni úlohu na implementaci této funkcionality.
2025-09-23 22_07_30-Add tabbed panels feature - Vivaldi image

@janrysavy
Copy link
Contributor

That’s absolutely remarkable..

@KRtekTM
Copy link
Author

KRtekTM commented Sep 23, 2025

The feature still needs testing and tweaking as I could misunderstood the original logic when approving/adjusting the prompts. So far I've fixed what I noticed while using it, I'm also thinking about adding the possibility of a custom tab name and color (for better distinction, like a prefix in the application header)...

@janrysavy janrysavy added the enhancement New feature or request label Sep 23, 2025
@KRtekTM KRtekTM changed the title Tabbed panels Tabbed panels (WIP, testing volunteers wanted) Sep 24, 2025
@janrysavy janrysavy requested a review from Copilot September 24, 2025 16:54
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements tabbed panels functionality for Open Salamander, a feature that has been requested since 2012. The implementation allows users to have multiple tabs in each panel (left and right), with support for creating, closing, navigating, and reordering tabs.

  • Adds complete tabbed panel infrastructure with tab control windows and tab management
  • Implements tab-specific working directory histories and configuration persistence
  • Adds comprehensive UI integration including menu items, toolbar buttons, and keyboard shortcuts

Reviewed Changes

Copilot reviewed 37 out of 38 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/tabwnd.h New tab window class definition with tab management capabilities
src/tabwnd.cpp Complete tab window implementation with drag-and-drop reordering
src/mainwnd.h Extended main window to support tab collections and management
src/mainwnd3.cpp Core tab management logic and UI event handling
src/fileswnd.h Added panel side enumeration and work directory history support
src/cfgdlg.h Configuration structures for tab functionality and history scope
src/resource.rh2 New command IDs and control IDs for tab operations
src/salamand.rc Keyboard shortcuts for tab navigation commands
Multiple UI files Menu items, toolbar buttons, and configuration dialogs for tabs
Comments suppressed due to low confidence (4)

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

@janrysavy janrysavy marked this pull request as draft September 24, 2025 17:06
@janrysavy janrysavy self-requested a review September 24, 2025 17:08
@ags1234
Copy link

ags1234 commented Sep 24, 2025

The feature still needs testing
We could test it if a Salamander with tabs were to be compiled... :)

@KRtekTM
Copy link
Author

KRtekTM commented Sep 24, 2025

The feature still needs testing
We could test it if a Salamander with tabs were to be compiled... :)

I hope I'm not violating any licensing terms: https://github.com/KRtkovo-eu-AI/salamander/releases/tag/tabbed_panels_poc02

@janrysavy
Copy link
Contributor

Is it intentional that the first tab cannot be dragged with the mouse to a different position?

Would it be possible to provide a clear visual indication during the drag operation to show where the tab will land once the mouse is released?

Also, if I click on a tab with the middle mouse button, a focus frame appears on it, and if I then press the left or right arrow key on the keyboard, it switches to the adjacent tab, but the focus returns to the panel. Is this intentional?

@KRtekTM
Copy link
Author

KRtekTM commented Sep 24, 2025

Is it intentional that the first tab cannot be dragged with the mouse to a different position?

Yes, the first tab is "default", can't be removed or dragged. Panels from these tabs will remain in the application, even after disabling the "tabbed panels" option, while the others are discarded.

Would it be possible to provide a clear visual indication during the drag operation to show where the tab will land once the mouse is released?

Definitely, I want this too as now it's really not intuitive.

Also, if I click on a tab with the middle mouse button, a focus frame appears on it, and if I then press the left or right arrow key on the keyboard, it switches to the adjacent tab, but the focus returns to the panel. Is this intentional?

No, this is not intentional, focus moving is not working as expected.

I need to craft a prompt for both issues.

@janrysavy
Copy link
Contributor

If I open the Windows Registry (plugin path) or, for example, a ZIP archive in the first tab, then switch to the second tab (which contains, for instance, a local disk), unload the Registry Editor or ZIP plugin in the Plugins Manager, and then click back on the first tab, Salamander crashes.

@janrysavy
Copy link
Contributor

If I open, for example, 20 tabs "D:" and create a directory using F7, the wait cursor starts blinking and the newly created directory only appears in the panel after one or two seconds. Even if a refresh is performed for each panel, given the performance of today’s computers, this delay still surprises me.

@janrysavy
Copy link
Contributor

If I start Salamander, add a new tab, close it, and then create a directory, it doesn’t get displayed. Apparently, the automatic refresh stops working.

@janrysavy
Copy link
Contributor

I start Salamander, select the Windows Registry item in one tab, switch to another tab, and then close Salamander. It crashes.

@KRtekTM
Copy link
Author

KRtekTM commented Sep 24, 2025

@janrysavy I suggest using the Issues in my repository https://github.com/KRtkovo-eu-AI/salamander/issues to make it clearer, as I expect the list of issues to grow even more.

@KRtekTM
Copy link
Author

KRtekTM commented Sep 26, 2025

PoC 03 is out for testing:

image image image

Unicode prototype separated into different branch.

@KRtekTM KRtekTM changed the title Tabbed panels (WIP, testing volunteers wanted) Tabbed panels, Unicode (WIP, testing volunteers wanted) Sep 26, 2025
@melloware
Copy link

@KRtekTM i think a separate PR just for Unicode would be better for @janrysavy to track don't you think?

@KRtekTM
Copy link
Author

KRtekTM commented Sep 26, 2025

@KRtekTM i think a separate PR just for Unicode would be better for @janrysavy to track don't you think?

Yeah, I'll split it in two parts. I had no idea how deep that rabbit hole is 😅🤣

@KRtekTM KRtekTM changed the title Tabbed panels, Unicode (WIP, testing volunteers wanted) Tabbed panels (WIP, made with AI, testing volunteers wanted) Sep 26, 2025
@KRtekTM
Copy link
Author

KRtekTM commented Sep 26, 2025

@KRtekTM
Copy link
Author

KRtekTM commented Sep 28, 2025

@tukanos
Copy link

tukanos commented Sep 29, 2025

I have tested the latest POC05 version and it is extremely slow on start. It takes 10+seconds to start OS 5.0. It also shows a plugin error, which could be probably uninstalled but I would expect that during conversion from AS 4.0 that would be done automatically.

KRtekTM added 27 commits October 3, 2025 14:32
* Allow duplicating default tab via double-click

* Reduce tab bar flicker with buffered painting

* Allow dragging single non-default tab across panels
@KRtekTM
Copy link
Author

KRtekTM commented Nov 3, 2025

FIY: I haven't stopped developing experimental features for the Samandarin fork, I just have less free time now.

In many attempts, I haven't been able to refactor the Codex code and solve what causes slow application startups - I either have to choose a different approach (because I don't think I've made irreversible changes there), or wait some more time for development in the gpt-5-codex model and for increasing the length of the tasks performed (in the latest versions, Codex is "lobotomized", so it actively prevents tasks longer than 30 minutes, while from my own experience in developing this feature I know that it can already handle 2-hour tasks).

@tukanos
Copy link

tukanos commented Nov 4, 2025

FIY: I haven't stopped developing experimental features for the Samandarin fork, I just have less free time now.

In many attempts, I haven't been able to refactor the Codex code and solve what causes slow application startups - I either have to choose a different approach (because I don't think I've made irreversible changes there), or wait some more time for development in the gpt-5-codex model and for increasing the length of the tasks performed (in the latest versions, Codex is "lobotomized", so it actively prevents tasks longer than 30 minutes, while from my own experience in developing this feature I know that it can already handle 2-hour tasks).

No worries, I know it can take some time. I my self, suffer from lack of time at the moment. All the best!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants