View Issue Details

IDProjectCategoryView StatusLast Update
0000377VisualDifferFiles differpublic2025-11-26 07:27
Reportermegumi Assigned Toadmin  
PrioritynormalSeveritymajorReproducibilityalways
Status confirmedResolutionopen 
Summary0000377: Line ending differences are not detected
DescriptionAraxis (https://www.araxis.com) offers a free download of their product 'Merge' for trial purpose. Upon download, the app comes in a DMG file together with a set of sample files for testing/demonstrating the file comparison capabilities. When I tried comparing Test 1 file and Test 2 file with VisualDiffer, it detected all differences except one, which was the difference in line ending (between CR-LF pair and LF only. I wondered if there was a section in the settings where I can configure VisualDiffer to either ignore or detect the line ending differences, but I did not find it. So, I understand that VisualDiffer currently does not have the ability to detect the differences in line ending characters. I think the ability to detect this difference can be useful in certain situations, and I would like to request it to be added to VisualDiffer as a feature.
Steps To ReproduceUse VisualDiffer to compare the 2 text files uploaded with this (Test1.txt & Test2.txt).
See the result.
TagsNo tags attached.

Activities

megumi

2025-11-13 15:22

reporter  

Test1.txt (1,633 bytes)   
This block of text is present only in Test1.txt.
This block of text is present only in Test1.txt.
This block of text is present only in Test1.txt.

This block of text is present in both files.
This block of text is present in both files.
This block of text is present in both files.

This block of text is present in both files.
This block of text is present in both files.
This block of text is present in both files.

This block of text has been modified between the files.
This block of text has been modified between the files.
This block of text has been modified between the files.

This block of text is present in both files.
This block of text is present in both files.
This block of text is present in both files.

This block of text differs only in whitespace. Whether
differences are highlighted depends on how the application
is configured.
Space at start of line in Test2.txt.
Tab at start of line in Test2.txt.
Space and tabs within the line in Test2.txt.

This block of text is present in both files.
This block of text is present in both files.
This block of text is present in both files.

This block of text differs only in line endings. In
Test1.txt, lines end with a CR LF pair. In Test2.txt,
lines end with LF only. Whether differences are highlighted
depends on how the application is configured.

This block of text is present in both files.
This block of text is present in both files.
This block of text is present in both files.

This block of text differs only in character case. Whether
differences are highlighted depends on how the application
is configured.
Test1.txt (1,633 bytes)   
Test2.txt (1,623 bytes)   
This block of text is present in both files.
This block of text is present in both files.
This block of text is present in both files.

This block of text is present only in Test2.txt.
This block of text is present only in Test2.txt.
This block of text is present only in Test2.txt.

This block of text is present in both files.
This block of text is present in both files.
This block of text is present in both files.

This block of text has changed between the files.
This block of text has changed between the files.
This section of text has changed between the files.

This block of text is present in both files.
This block of text is present in both files.
This block of text is present in both files.

This block of text  differs only in whitespace. Whether
differences are	highlighted depends on how the application
is  configured.
    Space at start of line in Test2.txt.
	Tab at start of line in Test2.txt.
Space and    tabs within the	line in Test2.txt.

This block of text is present in both files.
This block of text is present in both files.
This block of text is present in both files.

This block of text differs only in line endings. In
Test1.txt, lines end with a CR LF pair. In Test2.txt,
lines end with LF only. Whether differences are highlighted
depends on how the application is configured.

This block of text is present in both files.
This block of text is present in both files.
This block of text is present in both files.

This block of text differs only in CHARACTER CASE. Whether
differences are HIGHLIGHTED depends on HOW the application
is CONFIGURED.
Test2.txt (1,623 bytes)   

admin

2025-11-14 14:28

administrator   ~0000782

Your observation is correct.
VisualDiffer, by design, normalizes line endings. It's a completely different approach, but I hadn't actually considered a similar scenario, even though it's increasingly rare.
I can't give a timeframe, but it's definitely a feature worth implementing.

admin

2025-11-22 15:07

administrator   ~0000783

I'm working to an alpha version, are you interested to make some tests?

The attached files now pass the tests

megumi

2025-11-22 15:37

reporter   ~0000784

Thank you for working to add the new feature as per my request. I am glad that its implementation in the current alpha version is detecting all the differences in the test files. If it helps for me also to test the alpha version, then I am happy to try. Please just let me know how.

admin

2025-11-22 15:43

administrator   ~0000785

Great!
Now visualdiffer is open source and available on github
In a couple of days I will release a version and then I communicate the download link here

Thanks for your help

admin

2025-11-23 11:46

administrator   ~0000788

Hi,

below you can find the link to the alpha version.

You can enable/disable "Compare Line Endings (DOS/Mac)" from the View menu item

https://github.com/visualdiffer/visualdiffer/releases/tag/v2.0.1-alpha.1

Download the zip and run it

The app is not notarized so you may trust it following the Apple official guide (I hope to renew the apple developer subscription very soon)

The description is here
https://github.com/visualdiffer/visualdiffer?tab=readme-ov-file#--installation

There is no need to remove the other installed version, the other versions should coexist without problems

thanks for your help and patience :)

megumi

2025-11-23 15:20

reporter   ~0000789

I've just downloaded v2.0.1-alpha.1 to try it, and I am happy to confirm that it works well on my laptop (MacBook Air M1 2020, macOS 26.1), detecting or ignoring the line ending differences according to the selection on the menu item "Compare Line Endings (DOS/Mac)" in the View menu.

I do wonder, however, if the View menu is the best place for the option to stay as a menu item. Is it not an option more for the 'detection' than about 'viewing'? May I suggest for the option to be moved to the Settings panel, as shown in the attached illustration?
Screenshot Settings Proposal.png (104,248 bytes)   
Screenshot Settings Proposal.png (104,248 bytes)   

admin

2025-11-23 15:33

administrator   ~0000790

The View menu is probably the worst place on earth.
I used it in the alpha version so you can easily activate it.
The preferences panel is global. I'd like to create a session panel like the one in the Compare folder, even though right now there's only this checkbox, a very empty and unsightly dialog.
In the global settings, perhaps it's more correct to use the "Text" tab, but I don't want a global setting, but only a session-specific one.

megumi

2025-11-24 08:03

reporter   ~0000792

Ok. I think I understand what you say about global setting vs session-specific option. But, why not both?

I can imagine that for many people, line endings don't matter and don't need to be checked, except for some odd occasions. However, some users may want to always include the line endings to be checked in file content comparison. For example, if someone working in collaboration with others needs to produce the files in their final state to always have a certain type of line ending, but the process of collaboration with others in cross-platform environment tends to introduce mixed line endings in the documents, then they will want line ending changes to be always checked and highlighted before finalising.

If users can set a global preference to check/ignore line endings, but they can always override the global setting with a session-specific option to temporarily ignore/check line endings, then everyone will be happy!

admin

2025-11-24 08:10

administrator   ~0000793

> If users can set a global preference to check/ignore line endings, but they can always override the global setting with a session-specific option to temporarily ignore/check line endings, then everyone will be happy!

It seems reasonable...

OK, I hope to add the new dialog for session prefs and global editing by the end of the week.

If you'd like, I can let you test the result, but I don't want to bother you more than necessary, so 'no' is a good answer.

megumi

2025-11-24 08:21

reporter   ~0000794

Thank you for your thoughtfulness, but if I request a feature and you are willing to work hard to implement it, then the least I can do is to test to see if it works in my environment. So, yes, of course, I am happy to test the new alpha version! Please let me know when ready.

admin

2025-11-25 06:30

administrator   ~0000796

Last edited: 2025-11-25 06:30

Added UI to application and session level

You can download the new version at the link below

https://github.com/visualdiffer/visualdiffer/releases/tag/v2.0.1-alpha.2

thanks for your help

megumi

2025-11-25 09:53

reporter   ~0000797

I've downloaded and tried v2.0.1-alpha.2, and I am happy to confirm that it works as intended on my laptop. Thank you very much for this job well-done!

May I suggest, however, some refinement for the user interface?
[1] Session Window Toolbar and Session Preferences
A separate 'Session Preferences' seems like an over-kill (unless you plan to introduce numerous and complex array of session-specific options). Each session opens a window (either for comparing a pair of files or a pair of folders). Any session-specific options can be set in the toolbar at the top of the session window. Rather than placing a toolbar button for opening the 'Session Preferences' window, I suggest replacing it with a slider-button for showing the on/off state of checking line-ending option. (Please see the attached pictures.)
[2] Settings/Preferences
May I suggest some rethinking/reorganisation for the Settings/Preferences window? To begin with, in macOS, the terminology has shifted from 'Preferences' to 'Settings'. So, the application menu (the menu under the app name 'VisualDiffer'') has a menu command 'Settings', but the windows that opens shows its name 'Preferences' in the title bar. I recommend standardising the terminology to 'Settings'. Once open, the settings/preferences window has 7 tabs: General, Fonts, Text, Folder, Confirmations, Keyboard, Trusted Paths. I think this whole window could benefit from some rethinking and reorganisation to reflect the main functions of VisualDiffer more clearly from the users' viewpoint. As I understand it, VisualDiffer has 2 main functions: to compare 2 files for their content (text), and to compare 2 folders for their content (files/sub-folders). So, I think users will find it easier to navigate if the settings window is visually organised into 3 categories: options for the app's operations in general (e.g. appearances, fonts, external editor, ESC key function), options relating to file comparison (e.g. line ending check, tab display) and options relating to folder comparison (e.g. compare/ignore finer label/tags/timestamps/etc., whether to follow symbolic links).
ON Window.png (849,724 bytes)
OFF Window.png (851,413 bytes)

admin

2025-11-25 10:17

administrator   ~0000798

> I've downloaded and tried v2.0.1-alpha.2, and I am happy to confirm that it works as intended on my laptop. Thank you very much for this job well-done!

Great! Thanks

> May I suggest, however, some refinement for the user interface?

Any suggest is welcomed

> [1] Session Window Toolbar and Session Preferences
> A separate 'Session Preferences' seems like an over-kill

You are right, today just a checkbox is over-kill but in a couple of months I hope to add other comparison flags (e.g. ignore white-spaces) so the dialog will be necessary

> [2] Settings/Preferences
> May I suggest some rethinking/reorganisation for the Settings/Preferences window?

Again you are right, consider VisualDiffer was first released in 2010 and I focused to make the app usable, but what you say is correct and I will try to "align" to new Apple lingo

> So, the application menu (the menu under the app name 'VisualDiffer'') has a menu command 'Settings', but the windows that opens shows its name 'Preferences' in the title bar.

Oh oh, this is due to the fact "Settings" is added by OS, so in old OSes the text is "Preferences", "Session Preferences" is added by my code so is the same text in all macOS versions

> Once open, the settings/preferences window has 7 tabs

Yes, very complicated but if you take a look at other comparison programs they are complex, too.
I promise to restyle the preferences, ops... the "Settings" but it isn't an easy task

Your suggestions are gold I hope to improve the UX quickly

admin

2025-11-25 10:39

administrator   ~0000801

Last edited: 2025-11-25 10:39

Filed issue "Terminology mixed between different versions of macOS"

https://github.com/visualdiffer/visualdiffer/issues/5

megumi

2025-11-25 14:30

reporter   ~0000802

> today just a checkbox is over-kill but in a couple of months I hope to add other comparison flags (e.g. ignore white-spaces)
> so the dialog will be necessary

Ok. Then, I would like to propose that session settings should be accessed in the 'inspector' style side-pane. Please see the attached pictures.

It is my understanding that the 'global settings' are a list of parameters saved by VisualDiffer in some kind of configuration file. Upon launch, the app should read it and save in its memory, so that it can apply those settings to every NEW sessions. However, once a session opens (with the default settings as per the 'global settings'), those settings become session-specific. The user can change any of the during the session and the comparison in the session window should reflect the changed settings. When the session is saved as .vdiff file, the last active settings from that session should also be saved in the .vdiff file. Upon double-clicking on the .vdiff file to restore the session, VisualDiffer should first read the session settings saved in the file, and reopen the session accordingly. If any of the settings are changed during this session, the new settings should also be included when re-saving the session in .vdiff file.

#########################################################################################
I just noticed, as I write this, that double-clicking on a .vdiff file does not reopen the saved session with the settings that were last active when the session was saved. It seems to me that EITHER the session settings are not saved in the .vdiff file, OR the app opens the saved session by applying the default settings saved in the 'global settings'. Unless I am badly mistaken, this should not be the case. Otherwise, there is no point in having session-specific settings, is there?
#########################################################################################

Since the 'session settings' are the properties that belong directly to a session, I think it is most intuitive if those properties can be accessible in the 'inspector' side-pane that opens directly to the side of the session window. The 'global settings, on the other hand, belong to the application (rather than the session that is open in the window), so it makes intuitive sense that a separate window must open for accessing those settings.

I do not know how difficult to implement a side-pane, but I hope you would consider this proposal favourably.
SessionWindow.png (273,562 bytes)
SessionWindowXtended.png (279,833 bytes)

megumi

2025-11-25 14:31

reporter   ~0000803

> today just a checkbox is over-kill but in a couple of months I hope to add other comparison flags (e.g. ignore white-spaces)
> so the dialog will be necessary

Ok. Then, I would like to propose that session settings should be accessed in the 'inspector' style side-pane. Please see the attached pictures.

It is my understanding that the 'global settings' are a list of parameters saved by VisualDiffer in some kind of configuration file. Upon launch, the app should read it and save in its memory, so that it can apply those settings to every NEW sessions. However, once a session opens (with the default settings as per the 'global settings'), those settings become session-specific. The user can change any of the during the session and the comparison in the session window should reflect the changed settings. When the session is saved as .vdiff file, the last active settings from that session should also be saved in the .vdiff file. Upon double-clicking on the .vdiff file to restore the session, VisualDiffer should first read the session settings saved in the file, and reopen the session accordingly. If any of the settings are changed during this session, the new settings should also be included when re-saving the session in .vdiff file.

#########################################################################################
I just noticed, as I write this, that double-clicking on a .vdiff file does not reopen the saved session with the settings that were last active when the session was saved. It seems to me that EITHER the session settings are not saved in the .vdiff file, OR the app opens the saved session by applying the default settings saved in the 'global settings'. Unless I am badly mistaken, this should not be the case. Otherwise, there is no point in having session-specific settings, is there?
#########################################################################################

Since the 'session settings' are the properties that belong directly to a session, I think it is most intuitive if those properties can be accessible in the 'inspector' side-pane that opens directly to the side of the session window. The 'global settings, on the other hand, belong to the application (rather than the session that is open in the window), so it makes intuitive sense that a separate window must open for accessing those settings.

I do not know how difficult to implement a side-pane, but I hope you would consider this proposal favourably.
SessionWindow-2.png (273,562 bytes)

admin

2025-11-25 14:58

administrator   ~0000804

> Ok. Then, I would like to propose that session settings should be accessed in the 'inspector' style side-pane. Please see the attached pictures.

Honestly I don't like side panes attached to main window, I prefer side panes on dialogs, replacing tabs with side panes sounds good but not on main window

> It is my understanding that the 'global settings' are a list of parameters saved by VisualDiffer in some kind of configuration file. Upon launch, the app should read it and save in its memory, so that it can apply those settings to every NEW sessions. However, once a session opens (with the default settings as per the 'global settings'), those settings become session-specific.

'global settings' are used as default values for some scenarios like folder compare, user can override some defaults with session values

> The user can change any of the during the session and the comparison in the session window should reflect the changed settings. When the session is saved as .vdiff file, the last active settings from that session should also be saved in the .vdiff file.

Yes, there is an order for using values

1. reloaded vsdiff file
2. session values when new o 'empty' window is open
3. defaults values defined using 'global settings'

The button 'Session Preferences' on main window can override for new windows without changing global settings, honestly this button just creates confusion and I'm considering to remove it


> Upon double-clicking on the .vdiff file to restore the session, VisualDiffer should first read the session settings saved in the file, and reopen the session accordingly. If any of the settings are changed during this session, the new settings should also be included when re-saving the session in .vdiff file.

Correct, if doesn't work there is a regression while rewriting the code from ObjC to Swift, I don't use .vdiff so my fault to not test them.
Saving to file has become less and less useful at least for me and I would like to remove this function completely but perhaps there are users who use it


> I just noticed, as I write this, that double-clicking on a .vdiff file does not reopen the saved session

It's a bug, a regression. I will take a look at it ASAP

> Since the 'session settings' are the properties that belong directly to a session, I think it is most intuitive if those properties can be accessible in the 'inspector' side-pane that opens directly to the side of the session window. The 'global settings, on the other hand, belong to the application (rather than the session that is open in the window), so it makes intuitive sense that a separate window must open for accessing those settings.

Ok, it's clear your point of view

> I do not know how difficult to implement a side-pane, but I hope you would consider this proposal favourably.

I like side panes when are used in main windows where you choose 'new project', 'load' and so on, settings are always accessible from separated dialog

megumi

2025-11-26 07:27

reporter   ~0000805

> The button 'Session Preferences' on main window... honestly this button just creates confusion and I'm considering to remove it.

I am hoping that this button can be used for showing/hiding the 'inspector' side-pane for accessing session-specific settings.

Issue History

Date Modified Username Field Change
2025-11-13 15:22 megumi New Issue
2025-11-13 15:22 megumi Status new => assigned
2025-11-13 15:22 megumi Assigned To => admin
2025-11-13 15:22 megumi File Added: Test1.txt
2025-11-13 15:22 megumi File Added: Test2.txt
2025-11-14 14:28 admin Note Added: 0000782
2025-11-14 14:29 admin Severity minor => major
2025-11-14 14:29 admin Status assigned => confirmed
2025-11-22 15:07 admin Note Added: 0000783
2025-11-22 15:37 megumi Note Added: 0000784
2025-11-22 15:43 admin Note Added: 0000785
2025-11-23 11:46 admin Note Added: 0000788
2025-11-23 15:20 megumi Note Added: 0000789
2025-11-23 15:20 megumi File Added: Screenshot Settings Proposal.png
2025-11-23 15:33 admin Note Added: 0000790
2025-11-24 08:03 megumi Note Added: 0000792
2025-11-24 08:10 admin Note Added: 0000793
2025-11-24 08:21 megumi Note Added: 0000794
2025-11-25 06:30 admin Note Added: 0000796
2025-11-25 06:30 admin Note Edited: 0000796
2025-11-25 09:53 megumi Note Added: 0000797
2025-11-25 09:53 megumi File Added: ON Window.png
2025-11-25 09:53 megumi File Added: OFF Window.png
2025-11-25 10:17 admin Note Added: 0000798
2025-11-25 10:39 admin Note Added: 0000801
2025-11-25 10:39 admin Note Edited: 0000801
2025-11-25 14:30 megumi Note Added: 0000802
2025-11-25 14:30 megumi File Added: SessionWindow.png
2025-11-25 14:30 megumi File Added: SessionWindowXtended.png
2025-11-25 14:31 megumi Note Added: 0000803
2025-11-25 14:31 megumi File Added: SessionWindow-2.png
2025-11-25 14:31 megumi File Added: SessionWindowXtended-2.png
2025-11-25 14:58 admin Note Added: 0000804
2025-11-26 07:27 megumi Note Added: 0000805