Mudlet: لا يمكن لمستخدمي Windows الذين ليس لديهم ASCII في مسار الملف تحميل LuaGlobal

تم إنشاؤها على ١٧ أبريل ٢٠١٨  ·  38تعليقات  ·  مصدر: Mudlet/Mudlet

ملخص موجز للمشكلة / وصف العنصر المطلوب:

  1. تم إعادة تثبيت Mudlet وبدأ بملف تعريف جديد.
  2. تظهر رسالة الخطأ ، انظر أدناه.
  3. يفتقد Mudlet إلى الوظائف الأساسية ، على سبيل المثال Geyser.

يجب ألا تؤثر الأحرف الخاصة في اسم المستخدم / الدليل على وظيفة Mudlet / تعوقها.
يبدو أن هذا قد جاء في تحديث حديث إلى حد ما لـ Mudlet.
يكسر أيضًا وظائف أكثر بكثير من مجرد Geyser.

خطوات إعادة إظهار المشكلة / أسباب إضافة الميزة:

  1. يمكن إعادة إنتاجه عدة مرات على جهاز الكمبيوتر الخاص بي رقم 1 ولكن ليس على جهاز الكمبيوتر رقم 2
  2. المسار الكامل هو C: \ Users \ Eingeschränkt \ AppDataLocal \ Mudlet - ربما بسبب الأحرف الخاصة في اسم المستخدم؟
  3. علّق keneanung : عندما قمنا بتطبيق التحديث التلقائي ، قمنا بتغيير دليل التثبيت من C:\Program Files\ إلى ملف تعريف المستخدم ولا أتذكر أننا قمنا بتغيير أي شيء في هذا المكان مؤخرًا. الكود _looks_ كما لو كان يجب أن يتعامل مع أسماء المسار UTF-8 بشكل صحيح

ناتج الخطأ / النتيجة المتوقعة للميزة

[خطأ] خطأ تجميع LuaGlobal.lua
خطأ من Lua: لا يمكن فتح /LuaGlobal.lua: لا يوجد مثل هذا الملف أو الدليل
grafik

معلومات إضافية ، مثل إصدار Mudlet ونظام التشغيل والأفكار حول كيفية الحل / التنفيذ:

Mudlet 3.8.1 على Win7

Windows bug i18n & l10n medium

ال 38 كومينتر

من المعروف أن Windows غريب مع أسماء المسارات - ويجب تغذية وظائف الملف في Lua بأسماء المسار المقطوعة بشكل صحيح. في كود C ++ ، إذا لم نستخدم C ++ 11 سلسلة حرفية خام (وقد نضطر إلى عدم معالجة خطأ Qt مع QObject::tr( ... ) ) واحد / في اسم المسار المشفر لأنظمة nix يجب أن يتم تجاوزه بشكل مضاعف * إلى \\\\ إذا كان سيتم إرساله إلى دالة lua - شرائط الترجمة C ++ لكل \\ وصولاً إلى \ ويحدث نفس الشيء في مترجم lua.

نظرًا لأنه يحدث أن هذا المسار في الرسالة [ ERROR ] يبدو كما لو أن المسار السابق لاسم الملف LuaGlobal.lua قد تم تركه كإعداد افتراضي ./ لذلك كان من المتوقع أن يكون في نفس الدليل مثل ملف Mudlet القابل للتنفيذ - ولكن بالنسبة لـ * Doze ، يجب على الأقل تغييره إلى .\\ أو بالأحرى .\\\\ في كود المصدر C ++!

هذا يعني أيضًا أنني أعتقد أن الطريقة الثابتة QDir::nativeSeparators( ... ) لا تفعل الشيء الصحيح إذا كنا نكتب اسم مسار / ملف كسلسلة أولية في كود C ++ الذي سيتم الانتقال إليه ليتم تغذيتها في مترجم Lua كسلسلة.

لست متأكدًا من فهمي لتعليقاتك أو ما إذا كانت موجهة نحوي بالفعل .. :)

هل ترى أي فرصة لإصلاح هذه المشكلة ، باستثناء تكوين مستخدم جديد بالكامل من البداية؟

إنها أكثر من ملاحظة عامة لأي شخص يلقي نظرة عليها. يجب أن يكون من الممكن إصلاحه من خلال النظر في المسار (المسارات) المستخدمة لتحميل ملف LuaGlobel.lua ، وتحديدًا على نظام Windows الأساسي. لدي شك في أننا تركنا أن نظام التشغيل يستخدم بعض القيم الافتراضية - والتي قد تكون "نفس الدليل مثل الملف القابل للتنفيذ" ولكنها غير مناسبة بسبب مسار غير POSIX.

بالنظر إلى ما أعتقد أنه سبب هذه المشكلة:

void TLuaInterpreter::loadGlobal()
{
#if defined(Q_OS_MACOS)
    // Load relatively to MacOS inside Resources when we're in a .app bundle,
    // as mudlet-lua always gets copied in by the build script into the bundle
    QString path = QCoreApplication::applicationDirPath() + "/../Resources/mudlet-lua/lua/LuaGlobal.lua";
#else
    // Additional "../src/" allows location of lua code when object code is in a
    // directory alongside src directory as occurs using Qt Creator "Shadow Builds"
    QString path = "../src/mudlet-lua/lua/LuaGlobal.lua"; // <== A
#endif

    int error = luaL_dofile(pGlobalLua, path.toUtf8().constData());
    if (error != 0) {
        // For the installer we do not go down a level to search for this. So
        // we check again for the user case of a windows install.

        // overload previous behaviour to check by absolute path as well
        // TODO this sould be cleaned up and refactored to just use an array and a for loop
        path = QCoreApplication::applicationDirPath() + "/mudlet-lua/lua/LuaGlobal.lua"; // <== B
        if (!QFileInfo::exists(path)) {
            path = "mudlet-lua/lua/LuaGlobal.lua"; // <== C
        }
        error = luaL_dofile(pGlobalLua, path.toUtf8().constData());
        if (error == 0) {
            mpHost->postMessage("[  OK  ]  - Mudlet-lua API & Geyser Layout manager loaded.");
            return;
        }
    } else {
        mpHost->postMessage("[  OK  ]  - Mudlet-lua API & Geyser Layout manager loaded.");
        return;
    }

    // Finally try loading from LUA_DEFAULT_PATH
    path = LUA_DEFAULT_PATH "/LuaGlobal.lua"; // <== D
    error = luaL_dofile(pGlobalLua, path.toUtf8().constData());
    if (error != 0) {
        string e = "no error message available from Lua";
        if (lua_isstring(pGlobalLua, -1)) {
            e = "[ ERROR ] - LuaGlobal.lua compile error - please report!\n"
                "Error from Lua: ";
            e += lua_tostring(pGlobalLua, -1);
        }
        mpHost->postMessage(e.c_str());
    } else {
        mpHost->postMessage("[  OK  ]  - Mudlet-lua API & Geyser Layout manager loaded.");
        return;
    }
}

يبدو هذا على الفور مخادعًا بعض الشيء لأن A إلى D كلها خاطئة لنظام Windows ، على سبيل المثال يجب أن يكون A "..\\\\src\\\\mudlet-lua\\\\lua\\\\LuaGlobal.lua" لكن الآخرين يحتاجون إلى بدائل وقت التشغيل من / إلى \\\\ في كل من السلاسل الحرفية والمتغيرات المضمنة. الخطأ الأصلي في الجزء العلوي من الموضوع هو أن LUA_DEFAULT_PATH فارغ وقت استخدامه على Windows!

تذكر أنه إذا كان تصحيح هذا الخطأ ، فإن الرسالة التي تظهر على الشاشة [ ERROR ] ستعيد إنتاج المسار الذي مر بكليهما ، أعتقد أن \\ إلى \ un-escapings لذلك يجب أن يبدو وكأنه صحيح ، مسار Windows على الشاشة - والذي سيكون \LuaGobal.lua في الحالة المعطاة - والذي ربما يكون خاطئًا أيضًا ويجب أن يكون .\LuaGobal.lua ربما - لذلك LUA_DEFAULT_PATH يجب أن يكون .\\\\ بدلاً من ذلك؟

يعالج Lua على Windows / كفاصل دليل على ما يرام.

لم تكن هذه تجربتي المحدودة نوعًا ما - يوجد IIRC إعداد تكوين في مكان ما في عناصر lua يحتوي على مصفوفة مكونة من 4 أحرف تحتوي على مجموعة أحرف مجمعة في الإعدادات ، من بين أشياء أخرى ، حرف البدل في أسماء الحزم وفاصل الدليل. أتذكر هذا لأنني عندما أصلحت معالجة LuaGlobal.lua (الداخلية) لـ Windows مقابل مسارات ملفات * nix في الماضي ، استخدمت فحصًا ، أعتقد أن فهرس مصفوفة C واحد في config مصفوفة char لـ '\\' أو '/' - على الرغم من أنني أعتقد أنه تم العثور على حل أفضل لاحقًا.

آه ، ها - نعم - راجع متغير package.config - هذا هو الشيء ، من الأسئلة الشائعة لـ Lua Unofficial :

1.40 مشاكل التوافق بين Windows و Unix؟

هنا ، يرمز "Unix" إلى أي نظام تشغيل يشبه POSIX مثل Linux و Mac OS X و Solaris وما إلى ذلك.

package.config عبارة عن سلسلة حيث يكون "الحرف" الأول هو فاصل الدليل ؛ لذا فإن package.config:sub(1,1) إما شرطة مائلة أو مائلة للخلف. كقاعدة عامة ، حاول استخدام هذا عند إنشاء المسارات.

الاختلاف الكبير بين إصدارات Windows و Unix هو أن package.path الافتراضي يعتمد على موقع Windows القابل للتنفيذ ، بينما في Unix يعتمد على /usr/local/share/lua/5.1 . لذلك من الأسهل إجراء تثبيت مستخدم محلي لـ Lua على Windows ، لكن Lua تحترم متغيرات البيئة LUA_PATH و LUA_CPATH .

يعتمد Lua بشكل مباشر على مكتبات وقت تشغيل C في النظام أكثر من معظم لغات البرمجة النصية ، لذا عليك تقدير الاختلافات في النظام الأساسي. استخدم المحدد "rb" مع io.open إذا كنت بحاجة إلى التوافق مع I / O ثنائي Windows. كن حذرا من os.tmpname لأنه لا يقوم بإرجاع المسار الكامل على ويندوز (بادئة مع قيمة TMP متغير البيئة معا بخط مائل أولا.) os.clock ينفذ جدا بشكل مختلف على Windows.

وبالمثل ، يمكن أن يتسبب os.time في تعطل Lua إذا مرت محددات تنسيق غير متوافقة. (لم تعد هذه مشكلة في Lua 5.2 ، الذي يقوم بإجراء فحوصات السلامة أولاً).

بالنسبة لنظام Windows GUI الفرعي ، يمكن أن يكون os.execute مزعجًا ، ولن يعمل io.popen ببساطة - تتوفر مكتبات امتدادات عبر الأنظمة الأساسية في هذه الحالة.

"كقاعدة عامة" - هذا لا يتعارض مع حقيقة أن / كفاصل دليل يعمل بشكل جيد على Windows في Lua.

وهذا هو فقط ذلك - بالنسبة للبعض، وأنا منهم، أن لا عمل - قد يكون جيدا أن ليس لدي تثبيت لوا باتباع وصفة نقلت العادية (أو أن لدي سيغوين تثبيت جميع أنحاء كذلك) أعدت.

أتساءل - هل أنت مربك ، بأي حال من الأحوال ، معالجة نظام lua الفرعي (أو بالأحرى جزء الحزمة منه) لفواصل الدلائل - والتي يمكن تهيئتها في كلتا الحالتين (أو ربما لشيء آخر تمامًا على سبيل المثال ' لـ RISCOS على ما يبدو!) ، Windows cmd أو powerline shell التي ستقبل كليهما أو Qt C ++ core الذي سيتعامل أيضًا مع كليهما؟

إنه يخلط بيني وبين ما يفترض أن يعمل من أجل تثبيت lua تم تجميعه على نظام Windows الأساسي - آه ، هل يمكن أن يكون msys هو POSIX-ish ولكن mingw هو Windowish؟

لا لست كذلك ، ولهذا السبب أيضًا استخدام / في LuaGlobal.lua يعمل مع العديد من الأشخاص على Windows في حالته الحالية ...

selection_112

فواصل المسار ليست هي المشكلة هنا.

لذلك من المفترض أن مترجم lua في mingw من Qt تم تكوينه بشكل صحيح لنظام Windows ، ويستخدم نفس liblua الذي تم ربط تطبيق Mudlet به {قد لا يكون ، على ما أعتقد ، للجميع}. على سبيل المثال ، يوفر luarocks مترجم lua 5.1 والذي يمكنه استخدامه إذا لم يتم العثور على غيره ولكن بنفس الرمز ~ قد يتم استخدام libararies بدلاً من ذلك.

💡 آه ، أتساءل ، Kebap ماذا ستحصل إذا حاولت الحصول على قيم package.config على هذا الإعداد الذي يعطيك الخطأ؟ بالنسبة لي في سطر الأوامر ، على سبيل المثال ، في نظامي قيد التشغيل حاليًا:

[stephen<strong i="11">@ripley</strong> ~]$ lua51
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> print(package.config)
/
;
?
!
-
> ^D
[stephen<strong i="12">@ripley</strong> ~]$

لاحظ القيمة الأولى / وهي فاصل الدليل الحالي الذي سيتم استخدامه عند تحميل الحزم - مثل ملف LuaGlobal.lua ! بالطبع بدون تشغيل / توفر نصوص lua الخارجية ، لا يمكنني تذكر ما إذا كان من الممكن تشغيل الأشياء من "سطر الأوامر" في Mudlet. سأحاول تشغيل جهاز الكمبيوتر المحمول `` Doze '' لاحقًا وأرى ما أحصل عليه ...

بالتأكيد يمكن أن تجرب:
grafik
يبدو أن هناك شرطة مائلة للخلف حيث كان لديك شرطة مائلة للأمام

لست متأكدًا مما إذا كان يجب أن أجرب هذا في Mudlet ، حيث يبدو أنك استخدمت طريقة ومكانًا مختلفين ..؟

يمكنني إنشاء مستخدم جديد أو اثنين ، بأحرف خاصة وبدونها ، فقط للتأكد مما إذا كان اسم المستخدم هو المشكلة هنا بالفعل. هل تعتقد أنه مفيد؟

نعم ، من فضلك حاول

يوم الأربعاء ، 25 أبريل 2018 ، 6:48 مساءً ، كتب Kebap ، [email protected] :

يمكنني إنشاء مستخدم جديد أو مستخدمين ، بأحرف خاصة وبدونها ،
فقط للتأكد مما إذا كان اسم المستخدم هو المشكلة هنا حقًا. هل تعتقد
انها مفيدة؟

-
أنت تتلقى هذا لأنك علقت.

قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/Mudlet/Mudlet/issues/1616#issuecomment-384355980 ، أو كتم الصوت
الخيط
https://github.com/notifications/unsubscribe-auth/AAGxjN9JHbiPCOgUf3u1u8jVg0KjDiSbks5tsKj3gaJpZM4TZAbQ
.

بقدر ما أستطيع أن أرى ، فإن الكود يحاول جميع المواقع المقترحة لملفات LuaGlobal.lua ويصل أخيرًا إلى المكان الذي يحاول فيه:

LUA_DEFAULT_PATH "/LuaGlobal.lua"

ولكن من رسالة الخطأ الناتجة ، يبدو أن LUA_DEFAULT_PATH عبارة عن سلسلة فارغة ، لذا فإن المسار المستخدم هو:

/LuaGlobal.lua

على افتراض (وأنا ما زلت غير مقتنع ولكن هذا هو نأمل فقط مشكلتي) أن '/' هو فاصل دليل عملي حيث يتم استخدامه فهذا يعني نظرة للملف في جذر نظام الملفات - على تلك POSIX التي هي حرفيا الجذر وعلى نظام التشغيل Windows هو الجذر الموجود على محرك الأقراص النشط حاليًا ، ربما C:\ (أو C:/ : wink :) - إذا كنا نريد حقًا أن يكون دليل العمل الحالي ، فحينئذٍ LUA_DEFAULT_PATH يجب أن يكون واحد . شخصية وليس بشكل كامل فارغة - وهذا هو الحال في رسالة الخطأ سيعود إما:

... cannot open ./LuaGlobal.lua ...

أو إذا كان يعيد المسار الكامل ، ربما شيء مثل:

... cannot open C:/Users/Eingeschränkt/AppData/Local/Mudlet/LuaGlobal.lua ...

يمكن؟ 😮

أرى أن رسالة الخطأ من مترجم lua مسجلة في std::string ويتم إرسالها إلى cTelnet::postMessage( ... ) عبر تحويل std::string::c_str() إلى a const char * ولكن نظرًا لأن postMessage يتوقع QString يجب أن يتفاعل هذا مع مُنشئ QString :: QString (const char str) الذي يستخدم المحول QString::fromUtf8() لذلك الأحرف غير ASCII * يجب أن تجعلها غير تالفة ... 😌

\

lua print(package.config)

من سطر أوامر ملف تعريف Mudlet حتى مع الخطأ الذي تحصل عليه.

هذا قليل من التخمين ولكن كإصلاح في وقت التشغيل أتساءل عما إذا كان من الممكن القيام بشيء مثل:

lua package.config = "/;?!_"

لتغيير الفاصل إلى / - على الرغم من أنك قد ترغب في تغيير إعداد "فاصل الأوامر" في التفضيلات بحيث لا يقسم ما ورد أعلاه عند ; - ثم انظر إذا كان بإمكانك "تشغيل" الملف LuaGlobal.lua يدويًا؟ أوه ، هذا لن يوفر رسائل خطأ من النوع [ ERROR ] إذا لم يعمل على الرغم من ذلك. \

تم تأكيد الخطأ في Mudlet 3.8.1 على نظام التشغيل Win 8.1 باسم مستخدم بحرف خاص: ä.
لا يوجد خطأ في اسم المستخدم بدون أحرف خاصة.

lua print(package.config) بدون نتيجة مرئية
lua print('test') أيضًا بدون نتيجة مرئية
الاسم المستعار lua متاح ، لكن يبدو أن print غير متوفر
lua echo('test') يعمل كما هو متوقع

ركض lua package.config = "/;?!_"
يقول سجل الخطأ: ERROR:[string "Alias: run lua code"]:4: [string "package.config = "/"]:1: unfinished string near '<eof>'

تم تغيير فاصل الأمر من ؛ لشيء آخر

ركض lua package.config = "/;?!_"
حسنا، على ما أعتقد؟ نتيجة غير مرئية

ركض lua run("./LuaGlobal.lua")
يقول سجل الخطأ: ERROR:[string "return run("./LuaGlobal.lua")"]:1: attempt to call global 'run' (a nil value)

اختبار مع include - نفس الخطأ.

lua require("./LuaGlobal.lua") - خطأ مثير للاهتمام:
ERROR:[string "return require("./LuaGlobal.lua")"]:1: module './LuaGlobal.lua' not found: no field package.preload['./LuaGlobal.lua'] no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua.lua' no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua\init.lua' no file '.\\/LuaGlobal\lua.lua' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\\/LuaGlobal\lua.lua' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\\/LuaGlobal\lua\init.lua' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua.lua' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua\init.lua' no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua' no file '.\\/LuaGlobal\lua.dll' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua.dll' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll' no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\' no file '.\.dll' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\.dll' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll'

فقط للتأكد من lua require("/LuaGlobal.lua")
يقول سجل الخطأ:
ERROR:[string "return require("/LuaGlobal.lua")"]:1: module '/LuaGlobal.lua' not found: no field package.preload['/LuaGlobal.lua'] no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\/LuaGlobal\lua.lua' no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\/LuaGlobal\lua\init.lua' no file '.\/LuaGlobal\lua.lua' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\/LuaGlobal\lua.lua' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\/LuaGlobal\lua\init.lua' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\/LuaGlobal\lua.lua' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\/LuaGlobal\lua\init.lua' no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\/LuaGlobal\lua' no file '.\/LuaGlobal\lua.dll' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\/LuaGlobal\lua.dll' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll' no file 'C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\/LuaGlobal' no file '.\/LuaGlobal.dll' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\/LuaGlobal.dll' no file 'C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll'

الغريب أن print لا يعمل - على الرغم من أنه كان lua مدمجًا - ولكن:

lua echo(package.config)

يجب أن تعمل كذلك.

بالنظر إلى الإخراج من النوع الأول من مثال العمل ، يحاول ناتج الخطأ تحميل ملف LuaGlobal.lua - دعنا نرى أسماء الملفات والمسارات التي يتم تجربتها:

  1. C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua.lua
  2. C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua\init.lua
  3. .\\/LuaGlobal\lua.lua
  4. C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\\/LuaGlobal\lua.lua
  5. C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\lua\\/LuaGlobal\lua\init.lua
  6. C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua.lua
  7. C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua\init.lua
  8. C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\\/LuaGlobal\lua
  9. .\\/LuaGlobal\lua.dll
  10. C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\\/LuaGlobal\lua.dll
  11. C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll
  12. C:\Users\Eingeschränkt\.config\mudlet\profiles\new profile name\
  13. .\.dll
  14. C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\.dll
  15. C:\Users\Eingeschr�nkt\AppData\Local\Mudlet\app-3.8.1\loadall.dll

لم أكن متأكدًا من مكان وجود الملف هذه الأيام ، لذا قمت بتنزيل وتثبيت الإصدار 3.8.1 الثنائي ووجدت أن المسار المستخدم هو:

C: \ Users \ Stephen \ AppDataLocal \ Mudlet \ app-3.8.1 \ mudlet-lualua

أيضًا مع إصدار Windows Installer ، لدي ما يلي لـ package.config:

lua print(package.config)
\
;
?
!
-

لذلك يجب أن تستخدم المسارات إلى \ لمعالج الحزمة لكي يعمل IMO. لا يزال من غير الواضح لماذا يحصل الأشخاص المختلفون على أشياء مختلفة.

تم التعديل: لاقتباس قائمة المسارات بعلامة "بدلاً من"

لماذا تكون بعض المسارات mojibake والبعض الآخر يعرض اسم المستخدم بشكل صحيح يجب أن يكون لأنها تأتي من مصادر مختلفة وبعضها غير قادر بشكل صحيح على I18n حتى الآن - سيكون من المفيد أن نتمكن من تعقبها وإصلاحها بواسطة Mudlet 4.0 - ولكن قد لا تكون تلك التي نسيطر عليها. لاحظ أنه لا يمكن أن يكون رمز العرض أو الخطوط لأن جميع رسائل الخطأ الفردية تمر عبر نفس العملية التي تم إنشاؤها.

فقط للتأكد من أنني كنت أستخدم المثيل المتوقع (كمطور لدي أكثر من نسخة واحدة على هذا الكمبيوتر الشخصي) أعدت تسمية الملف وحصلت على نفس النتيجة:
luagloballua_fail

كما أنشأت مستخدمًا جديدًا بأحرف غير ASCII (وربما حتى لاتينية 1 / ISO 885901) ويمكنني أن أؤكد أن الأشياء معطلة بنفس الطريقة لهذا المستخدم - لا يستطيع Mudlet رؤية الملف في:

C:\Users\şțȅƥĥēƞ\AppData\Local\Mudlet\app-3.8.1\mudlet-lua\lua\LuaGlobal.lua

لكنها يمكن أن

C:\Users\stephen\AppData\Local\Mudlet\app-3.8.1\mudlet-lua\lua\LuaGlobal.lua

:تنهد:

هذه الأسئلة والأجوبة على Stack Exchange لا تبدو واعدة.

ومع ذلك ، فإن مترجم أسماء الملفات luawinfile Windows المرخص من معهد ماساتشوستس للتكنولوجيا (ترجمة فقط على mingw وليس MSVC) (يحول أسماء ملفات UTF-8 إلى / من UTF-16 الذي يجب استخدامه مع واجهة برمجة تطبيقات معالجة ملفات Windows) يبدو أفضل قليلاً - فهو يوفر بدائل لوحدة LFS التي يمكن أن تأخذ أسماء الملفات والمسارات UTF-8.

بحث جيد. فقط لرميها هناك ، لدينا https://github.com/starwing/luautf8 بالفعل في Mudlet ، هل هناك أي شيء يمكن أن يساعدنا؟

SlySven ، يبدو أن قائمتك المكونة من 15 اسمًا خاطئة. على سبيل المثال ، يجب قراءة 13 .\.dll وليس ..dll

آه ، هذا هو نظام الترميز الذي يتدخل - في بعض السياقات هنا ، يهرب الخط المائل العكسي من الحرف التالي المطلوب ، على سبيل المثال إذا كنت تريد إظهار رمز أقل من في نص عادي مثل هذا "\ <" فلن ترى شرطة مائلة للخلف هناك ... وقد استخدمت علامات اقتباس عادية واحدة بدلاً من علامات اقتباس التعليمات البرمجية - تم تعديلها لإصلاح الاقتباس.

يتعلق الأمر luautf8 بمعالجة سلسلة UTF-8 - لا أعتقد أنه سيساعد هنا لأن luainfile يتعلق تحديدًا بالتفاعل مع معالجة ملفات Windows (التي تعمل فقط مع سلاسل UTF-16) C أو مكتبة C ++ على الأرجح - يبدو أنها تحتاج إما إلى الالتفاف حول أو استبدال lfs على Windows فقط (وليس Cygwin على الرغم من أنني أراهن) ...

حسنًا ، لكننا لا نستخدم lfs لتحميل LuaGlobal.lua ، فكيف سيحل luainfile المشكلة؟

انها ليست مجرد بديل ل lfs . يحتوي أيضًا على بديل لـ dofile و loadfile . سنحتاج على الأرجح إلى استبدال مكالمتنا بـ luaL_dofile بمكالمة lua إلى dofile .

تحرير للإضافة: روابط مكتبة luainfile (افتراضيًا) مقابل lua 5.3 ... لست متأكدًا مما إذا كانت هذه تبعية صعبة أم لا.

يبدو أنه يمكننا كتابة وظيفة luaL_dofile الخاصة بنا ، فهل تعمل مع ترميز Windows الخاص؟

كيف يمكننا دفع هذا إلى الأمام؟

لقد أثرت مشكلة في مستودع luawinfile وسألت عن توافق 5.1 ولكني ألقيت نظرة وهي تستخدم بالفعل بعض ميزات اللغة 5.3 التي لم يتم توفيرها بواسطة lua 5.1 - هناك وحدة توافق منفصلة رسمية

يبدو مرتبطًا بـ # 229

كيف يمكننا دفع هذا إلى الأمام؟

سنحتاج إلى backport https://github.com/cloudwu/luawinfile (ملف C واحد يتكون من حوالي 884 سطرًا {808 soc} من التعليمات البرمجية) من 5.3 إلى 5.1 لاستيعاب بعض الميزات التي لم تكن موجودة في السابق نسخة من lua التي يستخدمها Mudlet. سيتطلب هذا شخصًا يتمتع بفهم أفضل لترميز lua-C مما أشعر به حاليًا ، على ما أعتقد. ومع ذلك ، يبدو أنه شيء يمكن القيام به واختباره بشكل مستقل دون القلق كثيرًا بشأن بقية قاعدة التعليمات البرمجية - على الرغم من أنه لا يمكن اختباره إلا على نظام أساسي لتطوير Windows.

المشكلة الأخرى هي أن الأشخاص لا يمكنهم حفظ ملفاتهم الشخصية على نوافذ بأسماء مستخدمين غير إنجليزية - لا يوجد سجل مكتوب. لا تعتقد أن لدينا تذكرة لذلك.

تضمين التغريدة
هل تعلمت بعض الأشياء أثناء الإصلاحات الأخيرة لإحضار الرسائل الدولية إلى Mudlet ، لتقديم هذه المشكلة إلى الأمام؟

ليس حقًا ، أعتقد أن إعادة تحويل luawinfile إلى Lua 5.1 يقدم أفضل أمل لنا ولكن ليس لدي فهم جيد بما يكفي (حتى الآن؟) لـ C/C++ + lua API لوضع أي ثقة في قدرتي على القيام بذلك. هل يوجد احد اخر؟ أعتقد أننا بحاجة إلى إلقاء نظرة على الكود الخاص بمكتبة Lua io ومعرفة كيف يستبدل luawinfile بعض (كل شيء ، لا أعرف؟) من الوظائف مع بدائل محددة لـ Windows.

نظرًا لأن الناس ربما لاحظوا أن نظام تطوير Windows الأساسي الخاص بي ليس هو الأكثر توافقًا (كمبيوتر محمول يعمل بنظام Windows 7 مع معالج 64 بت ولكن يعمل بإصدار 32 بت) - يحتوي جهاز الكمبيوتر الرئيسي أيضًا على نظام Windows 7 64 بت ولكن هذا ثلاثي- ويتم تشغيل الجهاز التمهيد الذي OS لعدة أشهر وذلك لدي عدة ساعات من التحديق في "تحديث ويندوز ... لا تغلق شاشة" نتطلع إلى وأنا لا أن دوافع، ATM!

على الرغم من أن برنامج التثبيت عبر الإنترنت Qt الآن يبدو أنه قد تحول أخيرًا إلى تقديم تثبيت Mingw64 Windows 64 بت فقط - مقارنةً بـ Mingw السابق 32 بت فقط الذي قد أفكر في القيام بذلك إذا كان لدي بعض الساعات للتخلص منها. ..

تبدو جيدة ...

Selection_127

هذا بفضل https://gist.github.com/Egor-Skriptunoff/2458547aa3b9210a8b5f686ac08ecbf0 الذي تم إنشاؤه في بداية العام.

سيكون متاحًا في Mudlet 3.22

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات