nnn icon indicating copy to clipboard operation
nnn copied to clipboard

NNN command line forward slash filter command won't allow other commands

Open slferris opened this issue 1 year ago • 14 comments

Environment details (Put x in the checkbox along with the information)

  • [ x] Operating System: macOS Sonoma 14.1.1
  • [x ] Desktop Environment: Mac mini M2 Pro, Apple Studio Display, Retina LCD
  • [ x] Terminal Emulator: Studio Display,
  • [zsh ] Shell:
  • [ ] Custom desktop opener (if applicable):
  • [ x] Program options used: nnn plugins
  • [ ] Configuration options set: nnn plugins installed along with nnn using homebrew
  • [x ] Plugins are installed in both nnn and oh-my-zsh
  • [ x] Issue exists on nnn master

Exact steps to reproduce the issue

When I click on the command line in nnn it displays only a forward slash filter character to the left and on the line above to the right the characters str [/}, ic [:] or noic [:]. It does not allow me to use any other character besides / including the colon : to do other non-filter commands.

slferris avatar Nov 19 '23 04:11 slferris

You can't run commands in the filter prompt. To get the commands prompt, press ]. It's there in the help page.

jarun avatar Nov 26 '23 01:11 jarun

I think the issue he's describing is different. If you click on the statusbar with the mouse then pretty much all other keybindings stop working.

I was able to reproduce it on my end. But haven't yet looked into what's causing it.

N-R-K avatar Nov 26 '23 06:11 N-R-K

I see. It's been ages I have used the mouse with nnn. Reopened.

jarun avatar Nov 26 '23 09:11 jarun

then pretty much all other keybindings stop working.

even ESC doesnt exit filter mode? iirc it happened in my build too, it was related to the filtermode thing in that case...

0xACE avatar Nov 26 '23 21:11 0xACE

even ESC doesnt exit filter mode?

It does, but the visual doesn't update. And sometimes clicking on the statusbar doesn't even enable filter mode. And sometimes it shows filter mode being activated but it actually isn't. Something seems to be going pretty wrong somewhere.

N-R-K avatar Nov 28 '23 07:11 N-R-K

By trying to reproduce the issue, I came across the following behaviour:

  1. When activating filter mode using the mouse, and then disabling it by pressing the escape key, filter mode is from then on automatically activated when changing directories.
  2. When activating filter mode using the forward-slash ('/') key, clicking on the prompt once doesn't de-activate it, rather requiring two successive clicks in order to turn filter mode off. In fact, if the escape key is pressed after clicking on the prompt once, the aforementioned problem arises again: changing directories triggers filter mode. So, is this what is being discussed here? Is it an entirely separate problem? Is it actually intended behaviour and I'm just dumb?

fre3nando avatar Dec 01 '23 20:12 fre3nando

When activating filter mode using the mouse, and then disabling it by pressing the escape key, filter mode is from then on automatically activated when changing directories.

Do you use the program option -n?

jarun avatar Dec 02 '23 00:12 jarun

As per the wiki mouse options:

Left single/double on last 2 rows	Toggle type-to-nav

jarun avatar Dec 02 '23 00:12 jarun

Do you use the program option -n?

No, I don't. I didn't even know about type-to-nav. It is indeed intended behaviour and not what this issue is about. I apologize.

fre3nando avatar Dec 03 '23 21:12 fre3nando

@7ocb or @azuline could any of one you have a look at this if you have the time?

jarun avatar Dec 08 '23 14:12 jarun

Git bisect shows 2ac22cfc to be the commit that introduced the issue. Not really sure what's going on tbh, the mouse handling code seems pretty complicated.

N-R-K avatar Dec 31 '23 05:12 N-R-K

Thanks @N-R-K! @0xACE can you please have a look?

jarun avatar Dec 31 '23 12:12 jarun

@N-R-K The intended behaviour is: if type-to-nav mode is on, single or double click on the last 2 rows should disable it and vice versa.

I don't see anything mentioned about just the filter being on or off. Maybe we can toggle that also but in that case the filter should not show when disabled.

jarun avatar Dec 31 '23 12:12 jarun

oh this happening to me too; commented out so much still couldn't get rid of it; now i know why, silly mouse ...

what a relief commented out clicking last 2 lines ...

JohnDoeDoe avatar Jan 17 '24 16:01 JohnDoeDoe

Did a bit more debugging on this. In here, it receives another KEY_MOUSE and exits out of the filterentries() function for whatever reason:

https://github.com/jarun/nnn/blob/e76d7bbf1ddce76baa9f83cbbce8196ce8e86d37/src/nnn.c#L3387-L3389

log:

ln 3363: __func__=filterentries
ln 3388: *ch=409
ln 3389: keyname(*ch)=KEY_MOUSE

@jarun can we just remove this feature? It's been broken for ~4 years and almost no one noticed - meaning no one actually uses it.

N-R-K avatar Feb 03 '24 12:02 N-R-K

Actually I use it on my smartphone and the touch works there! :) It's super-easy to toggle between filter/non-filter modes that way.

Can you please check if just single/double click works? That is - whether commenting out any of the below snippets work:

7001                         /* Toggle filter mode on left click on last 2 lines */
7002                         if (event.y >= xlines - 2 && event.bstate == BUTTON1_PRESSED) {
7003                                 clearfilter();
7004                                 cfg.filtermode ^= 1;
7005                                 if (cfg.filtermode) {
7006                                         presel = FILTER;
7007                                         goto nochange;
7008                                 }
7009 
7010                                 /* Start watching the directory */
7011                                 watch = TRUE;
7012                                 copycurname();
7013                                 cd = FALSE;
7014                                 goto begin;
7015                         }

OR

7057                         } else {
7058                                 if (cfg.filtermode || filterset())
7059                                         presel = FILTER;
7060                                 copycurname();
7061                                 goto nochange;
7062                         }

jarun avatar Feb 03 '24 15:02 jarun

@N-R-K and others, can you please check if the following patch works? (Ignore the changes due to trailing spaces).

diff --git a/src/nnn.c b/src/nnn.c
index d0938b99..dc3d7cf2 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -1312,14 +1312,14 @@ static char *abspath(const char *filepath, char *cwd, char *buf)
 }
 
 /* finds abspath of link pointed by filepath, taking cwd into account */
-static char *bmtarget(const char *filepath, char *cwd, char *buf) 
+static char *bmtarget(const char *filepath, char *cwd, char *buf)
 {
        char target[PATH_MAX + 1];
        ssize_t n = readlink(filepath, target, PATH_MAX);
        if (n != -1) {
                target[n] = '\0';
                return abspath(target, cwd, buf);
-       } 
+       }
        return NULL;
 }
 
@@ -3436,6 +3436,11 @@ static int filterentries(char *path, char *lastname)
                        continue;
 #ifndef NOMOUSE
                case KEY_MOUSE:
+                       MEVENT event = {0};
+                       getmouse(&event);
+                       if (event.bstate == 0)
+                               continue;
+                       ungetmouse(&event);
                        goto end;
 #endif
                case ESC:

jarun avatar Feb 03 '24 15:02 jarun

Appears to be fixed for good in my tests.

@N-R-K @luukvbaal would it be possible to add a check in Makefile or PR CI to detect trailing blank spaces?

jarun avatar Feb 03 '24 16:02 jarun