diff --git a/src/resources/vnote.ini b/src/resources/vnote.ini index a1d1fe53..5a94f043 100644 --- a/src/resources/vnote.ini +++ b/src/resources/vnote.ini @@ -66,6 +66,10 @@ editor_line_number=0 ; 1: minimize to system tray minimize_to_system_tray=-1 +; Suffixes list of Markdown files separated by : +; Case-insensitive +markdown_suffix=md:markdown:mkd + [session] tools_dock_checked=true diff --git a/src/utils/vutils.cpp b/src/utils/vutils.cpp index e3a387f7..6791c7fa 100644 --- a/src/utils/vutils.cpp +++ b/src/utils/vutils.cpp @@ -473,21 +473,7 @@ void VUtils::sleepWait(int p_milliseconds) DocType VUtils::docTypeFromName(const QString &p_name) { - static QMap> suffixes; - - if (suffixes.isEmpty()) { - QVector md; - md << "md" << "markdown" << "mkd"; - suffixes[(int)DocType::Markdown] = md; - - QVector list; - list << "ls" << "list"; - suffixes[(int)DocType::List] = list; - - QVector container; - container << "co" << "container" << "con"; - suffixes[(int)DocType::Container] = container; - } + const QHash> &suffixes = vconfig.getDocSuffixes(); QString suf = QFileInfo(p_name).suffix().toLower(); for (auto it = suffixes.begin(); it != suffixes.end(); ++it) { diff --git a/src/vconfigmanager.cpp b/src/vconfigmanager.cpp index b826a855..d0aac6b6 100644 --- a/src/vconfigmanager.cpp +++ b/src/vconfigmanager.cpp @@ -164,6 +164,8 @@ void VConfigManager::initialize() } readShortcutsFromSettings(); + + initDocSuffixes(); } void VConfigManager::readPredefinedColorsFromSettings() @@ -818,3 +820,30 @@ QString VConfigManager::getShortcutKeySequence(const QString &p_operation) const return *it; } + +void VConfigManager::initDocSuffixes() +{ + m_docSuffixes.clear(); + + QString mdSuffix = getConfigFromSettings("global", + "markdown_suffix").toString(); + if (mdSuffix.isEmpty()) { + mdSuffix = getDefaultConfig("global", + "markdown_suffix").toString(); + } + + Q_ASSERT(!mdSuffix.isEmpty()); + QList md = mdSuffix.toLower().split(':', QString::SkipEmptyParts); + md.removeDuplicates(); + m_docSuffixes[(int)DocType::Markdown] = md; + + QList list; + list << "ls" << "list"; + m_docSuffixes[(int)DocType::List] = list; + + QList container; + container << "co" << "container" << "con"; + m_docSuffixes[(int)DocType::Container] = container; + + qDebug() << "doc suffixes" << m_docSuffixes; +} diff --git a/src/vconfigmanager.h b/src/vconfigmanager.h index 6f2a2320..a7e9df01 100644 --- a/src/vconfigmanager.h +++ b/src/vconfigmanager.h @@ -217,6 +217,9 @@ public: int getMinimizeToStystemTray() const; void setMinimizeToSystemTray(int p_val); + void initDocSuffixes(); + const QHash> &getDocSuffixes() const; + // Return the configured key sequence of @p_operation. // Return empty if there is no corresponding config. QString getShortcutKeySequence(const QString &p_operation) const; @@ -438,6 +441,10 @@ private: // 1: minimize to the tray. int m_minimizeToSystemTray; + // Suffixes of different doc type. + // [DocType] -> { Suffixes }. + QHash> m_docSuffixes; + // The name of the config file in each directory, obsolete. // Use c_dirConfigFile instead. static const QString c_obsoleteDirConfigFile; @@ -1126,4 +1133,8 @@ inline void VConfigManager::setMinimizeToSystemTray(int p_val) m_minimizeToSystemTray); } +inline const QHash> &VConfigManager::getDocSuffixes() const +{ + return m_docSuffixes; +} #endif // VCONFIGMANAGER_H diff --git a/src/vconstants.h b/src/vconstants.h index e759139b..efdba3b2 100644 --- a/src/vconstants.h +++ b/src/vconstants.h @@ -5,7 +5,7 @@ // Markdown: Markdown text file; // List: Infinite list file like WorkFlowy; // Container: a composite file containing multiple files; -enum class DocType { Html, Markdown, List, Container, Invalid }; +enum class DocType { Html = 0, Markdown, List, Container, Invalid }; // Normal: note file managed by VNote; // Orphan: external file; diff --git a/src/vfilelist.cpp b/src/vfilelist.cpp index 4314fb16..a10a98aa 100644 --- a/src/vfilelist.cpp +++ b/src/vfilelist.cpp @@ -217,9 +217,17 @@ void VFileList::newFile() if (!m_directory) { return; } + + QList suffixes = vconfig.getDocSuffixes()[(int)DocType::Markdown]; + QString suffixStr; + for (auto const & suf : suffixes) { + suffixStr += (suffixStr.isEmpty() ? suf : "/" + suf); + } + QString info = tr("Create a note in %2.") .arg(vconfig.c_dataTextStyle).arg(m_directory->getName()); - info = info + "
" + tr("Note with name ending with \".md\" will be treated as Markdown type."); + info = info + "
" + tr("Note with name ending with \"%1\" will be treated as Markdown type.") + .arg(suffixStr); QString text(tr("Note &name:")); QString defaultText("new_note.md"); do {