Where to find QSettings on macOS - qt

So I am using QSettings to store my preferences, and according to https://doc.qt.io/qt-5/qsettings.html#platform-specific-notes there is several locations where this is actually stored.
I am on macOS 10.14, yet I find the settings in $HOME/Library/Preferences/org.mycomp.myapp.plist (the above link states this should be for macOS 10.2/10.3).
Now I can see by opening that this file contains my most recent settings changes, however, after deleting, my app still loads the settings. So there must be a second location where it is stored? But I can't seem to find it.
$HOME/Library/Preferences/com.MySoft.Star Runner.plist - non existing
$HOME/Library/Preferences/com.MySoft.plist - existed, deleted
/Library/Preferences/com.MySoft.Star Runner.plist - non existing
/Library/Preferences/com.MySoft.plist - non existing
And for the unix variants:
$HOME/.config/MySoft/Star Runner.conf - non existing
$HOME/.config/MySoft.conf - non existing
for each directory in $XDG_CONFIG_DIRS: /MySoft/Star Runner.conf - non existing
for each directory in $XDG_CONFIG_DIRS: /MySoft.conf - non existing
So where is the settings still saved?!
In my main.cpp I have:
QCoreApplication::setOrganizationName("Firstname Lastname");
QCoreApplication::setOrganizationDomain("mycomp.org");
QCoreApplication::setApplicationName("MyApp");
And I am using QSettings with the default constructor. I am using Qt 5.13.2.

Since macOS Mavericks (10.9) preferences are cached to improve performance, so they say. When you delete the .plist file, they are still in memory each time you execute your program. You need to clear the preferences cache with this command:
killall -u $USER cfprefsd
Or you can reboot your computer...
If you (and your users) are tired of this, you may consider to use INI files with QSettings instead of the native OS format:
QSettings("MyApp.ini", QSettings::IniFormat)

Related

How stop RStudio from creating empty "R" folder within "/home" directory at every startup

After having set the path for the default working directory as well as my first (and only) project within RStudio options I wonder why RStudio keeps creating an empty folder named "R" within my "/home" directory every time it is started.
Is there any file I could delete/edit (eventually create) to stop this annoying behaviour and if so, where is it located ?
System: Linux Mint v. 19.3
Software: RStudio v. 1.3.959 / R version 3.4.4
Thanks in advance for any hints.
Yes, you can prevent the creation of the R directory — R is configurable via a set of environment variables.
However, setting these correctly isn’t trivial. The first issue is that many R packages are sensitive to the R version they’re installed with. If you upgrade R and try to load the existing package, it may break. Therefore, the R package library path should be specific to the R version.
On clusters, an additional issue is that the same library path might be read by various cluster nodes that run on different architectures; this is rare, but it happens. In such cases, compiled R packages might need to be different depending on the architecture.
Consequently, in general the R library path needs to be specific both to the R version and the system architecture.
Next, even if you configure an alternative path R will silently ignore it if it doesn’t exist. So be sure to manually create the directory that you’ve configured.
Lastly, where to put this configuration? One option would be to put it into the user environment file, the path of which can be specified with the environment variable R_ENVIRON_USER — it defaults to $HOME/.Renviron. This isn’t ideal though, because it means the user can’t temporarily override this setting when calling R: variables in this file override the calling environment.
Instead, I recommend setting this in the user profile (e.g. $HOME/.profile). However, when you use a desktop launcher to launch your RStudio, this file won’t be read, so be sure to edit your *.desktop file accordingly.1
So in sum, add the following to your $HOME/.profile:
export R_LIBS_USER=${XDG_DATA_HOME:-$HOME/.local/share}/R/%p-library/%v
And make sure this directory exists: re-source ~/.profile (launching a new shell inside the current one is not enough), and execute
mkdir -p "$(Rscript -e 'cat(Sys.getenv("R_LIBS_USER"))')"
The above is using the XDG base dir specification, which is the de-facto standard on Linux systems.2 The path is using the placeholders %p and %v. R will fill these in with the system platform and the R version (in the form major.minor), respectively.
If you want to use a custom R configuration file (“user profile”) and/or R environment file, I suggest setting their location in the same way, by configuring R_PROFILE_USER and R_ENVIRON_USER (since their default location, once again, is in the user home directory):
export R_PROFILE_USER=${XDG_CONFIG_HOME:-$HOME/.config}/R/rprofile
export R_ENVIRON_USER=${XDG_CONFIG_HOME:-$HOME/.config}/R/renviron
1 I don’t have a Linux desktop system but I believe that editing the Env entry to the following should do it:
Exec=env R_LIBS_USER=${XDG_DATA_HOME:-$HOME/.local/share}/R/%p-library/%v /path/to/rstudio
2 Other systems require different handling. On macOS, the canonical setting for the library location would be $HOME/Library/Application Support/R/library/%v. However, setting environment variables on macOS for GUI applications is frustratingly complicated.
On Windows, the canonical location is %LOCALAPPDATA%/R/library/%v. To set this variable, use [Environment]::SetEnvironmentVariable in PowerShell or, when using cmd.exe, use setx.

Symfony using Mac OS X

I am trying to start a project using Symfony on a Mac Sierra.
I installed Symfony successfully, but I get this warning:
We selected the timezone 'UTC' for now, but please set date.timezone
to select your timezone. in
phar:///usr/local/bin/symfony/src/Symfony/Installer/NewCommand.php on
line 283 ✕ Symfony 3.2.1 was successfully installed but your system
doesn't meet its
technical requirements! Fix the following issues before executing
your Symfony application: * date.timezone setting must be set
> Set the "date.timezone" setting in php.ini* (like Europe/Paris).
I tried to change php.ini with brackets editor on the created project on folders:
project/vendor/doctrine/cache/test/travis/php.ini
project/vendor/doctrine/doctrine-cache-bundle/test/travis/php.ini
Didn't help.
As I read Symfony has built-in Apache Server.
Those php.ini files are totally unrelated to what you have to do.
Open up the Terminal and type php -i | grep "php.ini". That should reveal the location of the php.ini which is used by PHP in console mode.
XAMPP is known for using different php.ini file for the server. In order to find the the one used by the XAMPP, run a sample php file with phpinfo() from browser.
Also, note that Symonfy itself does not have the built-in server. In merely used the one PHP provided from version 5.4 and on.
Hope this helps...
I am Mac user, so , in Finder you need to go to /private/etc, find php.ini.default,
Yo need to copy that file to the desktop. To edit you need to unlock the document. Just click Unlock if asked. Rename to php.ini, set the date.timezone=Europe/YourCountry and do not forget to erase the semicolon before.And finally save it and put it back to etc.
Watch: https://www.youtube.com/watch?v=Wb6Fh-B3W-o

How do I get the system QFileDialog in Qt5?

I created file dialogs to select files within a Qt application. When migrating to Qt5 I encounter a regression, the file dialog is much poorer when linking against Qt5 rather than Qt4:
Qt4
Qt5
For example it is very hard for an user to navigate to the network mounted share directories.
The code is as simple as this:
QString path;
path = QFileDialog::getExistingDirectory(this, tr("Pick a file"));
QFileDialog::DontUseNativeDialog does not change anything.
My OS is Ubuntu 16.04, I have both nautilus (3.14.3) and nemo (2.8.7) installed. nemo is configured to be the default file manager:
xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search
Every other application seems to use the same dialog as the Qt4 file dialog screenshot.
How do I get the "old" file dialog in Qt5?
If I try with QT_QPA_PLATFORMTHEME= ./my_app then I get this:
The following works for me on Ubuntu 16.04 – it is more of a workaround than an actual solution, though:
Edit: First make sure that the package libqt5libqgtk2 is installed. It brings the GTK2 bindings for Qt5. If the package is not installed, the file choosers will look like the last screenshot shown in the question above.
Then, assuming you want to launch your application my_app from a terminal, launch it as follows (mind the space after =):
$ QT_QPA_PLATFORMTHEME= my_app
This is because, according to a bug report on launchpad, there seems to be a problem with the Ubuntu package appmenu-qt5: the package forces Qt5 dialogs to become non-native as a side effect of explicitly setting QT_QPA_PLATFORMTHEME=appmenu-qt5 via /etc/profile.d/appmenu-qt5.sh. Unsetting the platform theme via QT_QPA_PLATFORMTHEME= before launching your application changes this behavior locally.
Edit: When using the described approach, however, the global menu might not work in my_app.

Preserve files/directories for rpm upgrade in .spec file(rpmbuild)

I wrote a .spec file on RHEL and I am building RPM using rpmbuild. I need ideas on how to handle the situation below.
My RPM creates an empty logs directory when it installs first time within the installation folder like below
/opt/MyInstallation-1.0.0-1/some executables
/opt/MyInstallation-1.0.0-1/lib/carries shared objects(.so files)
/opt/MyInstallation-1.0.0-1/config/carries some XML and custom configuration files(.xml, etc)
/opt/MyInstallation-1.0.0-1/log--->This is where application writes logs
When my RPM upgrades MyInstallation-1.0.0-1, to MyInstallation-1.0.0-2 for example, I get everything right as I wanted.
But, my question is how to preserve log files written in MyInstallation-1.0.0-1? Or to precisely copy the log directory to MyInstallation-1.0.0-2.
I believe if you tag the directory as %config, it is expected that the user will have files in there, so it will leave it alone.
I found a solution or workaround to this by hit and trial method :)
I am using rpmbuild version 4.8.0 on RHEL 6.3 x86_64. I believe it will work on other distros as well.
If you install with one name only like "MyInstallation" rather than "MyInstallation-version number-RPM Build Number" and create "logs directory as a standard directory(no additional flags on it)[See Original Question for scenario] Whenever you upgrade, you normally don't touch logs directory. RPM will leave its contents as it is. All you have to do is to ensure that you keep the line below in the install section.
%install
install --directory $RPM_BUILD_ROOT%{_prefix}/%{name}/log
Here, prefix and name are macros. That has to do nothing with underlying concept.
Regarding config files, the following is a very precise table that will help you guarding your config files. Again, this rule can't be applied on logs our applications create.
http://www-uxsup.csx.cam.ac.uk/~jw35/docs/rpm_config.html
Thanks & Regards.

Creating a custom .vimrc gives me an E216 error on opening vim

I am trying to set ignorecase by default in my vim environment.
Curently, ~/.vimrc doesn't exist. When I open vim and use :scriptnames to see what scripts are loaded, I have a bunch of *.vim files loaded.
When I create my own ~/.vimrc containing only:
set ic
I get the following error:
E216: No such group or event: SpellFileMissing * call
spellfile#LoadFile(expand('')) Hit ENTER or type command to
continue
when opening vim. When I use :scriptnames to see what scripts are loaded again, on top of the list is my '.vimrc' file followed by all the same '*.vim' files as before...
Why would this happen?
Thanks...
P.S. I am using vim version 6.3
This looks like a mismatch of (newer) Vim runtime files and your ancient Vim version; the SpellFileMissing event is related to spell checking, which was introduced in Vim 7.0. You seem to have runtime files that initialize the (non-existing) spell checking.
Upgrading Vim looks like the easiest and best way to resolve this.
Vim 6.3 is from 2004 and very outdated. It should be possible to install the latest version 7.3; if you can't find a proper package for your distribution (for Windows, check the binaries from the Cream project, it's also not very difficult to compile (e.g. from the Mercurial sources) on Linux.

Resources