Mudlet: Pengguna Windows dengan non-ASCII di jalur file tidak dapat memuat LuaGlobal

Dibuat pada 17 Apr 2018  ·  38Komentar  ·  Sumber: Mudlet/Mudlet

Ringkasan singkat masalah / Deskripsi fitur yang diminta:

  1. Mudlet dipasang kembali dan dimulai dengan profil baru.
  2. Pesan kesalahan muncul, lihat di bawah.
  3. Mudlet kehilangan fungsi inti, misalnya Geyser.

Karakter khusus dalam nama pengguna / direktori tidak boleh mempengaruhi / menghalangi fungsionalitas Mudlet.
Ini tampaknya telah datang dalam pembaruan yang agak baru untuk Mudlet.
Juga merusak lebih banyak fungsionalitas daripada hanya Geyser.

Langkah-langkah untuk mereproduksi masalah / Alasan menambahkan fitur:

  1. Dapat direproduksi beberapa kali di komputer saya # 1 tetapi tidak di komputer saya # 2
  2. Path lengkap adalah C: \ Users \ Eingeschränkt \ AppDataLocal \ Mudlet - mungkin karena karakter khusus dalam nama pengguna?
  3. @keneanung berkomentar: Ketika kami mengimplementasikan auto-updater, kami mengubah direktori instalasi dari C:\Program Files\ ke profil pengguna dan saya tidak dapat mengingat bahwa kami mengubah apa pun di tempat itu akhir-akhir ini. Kode _looks_ seolah-olah harus menangani nama jalur UTF-8 dengan benar

Keluaran kesalahan / Hasil yang diharapkan dari fitur

[ERROR] Kesalahan kompilasi LuaGlobal.lua
Kesalahan dari Lua: tidak dapat membuka /LuaGlobal.lua: Tidak ada file atau direktori seperti itu
grafik

Informasi tambahan, seperti versi Mudlet, sistem operasi, dan ide tentang cara menyelesaikan / mengimplementasikan:

Mudlet 3.8.1 di Win7

Windows bug i18n & l10n medium

Semua 38 komentar

Windows dikenal ganjil dengan nama path - dan fungsi file di Lua harus diberi nama path yang dipotong dengan benar. Dalam kode C ++ jika kita tidak menggunakan literal string mentah C ++ 11 (dan kita mungkin dipaksa untuk tidak menangani bug Qt dengan QObject::tr( ... ) ) satu / dalam nama jalur kode keras untuk sistem nix harus diloloskan ganda * ke \\\\ jika akan dikirim ke fungsi lua - strip kompilasi C ++ masing-masing \\ turun ke \ dan hal yang sama terjadi di juru bahasa lua.

Kebetulan jalur di pesan [ ERROR ] tampak seolah-olah jalur untuk menambahkan nama file LuaGlobal.lua dibiarkan sebagai ./ default sehingga diharapkan ada di direktori yang sama dengan Mudlet yang dapat dieksekusi - namun untuk * Doze yang setidaknya harus diubah menjadi .\\ atau lebih tepatnya .\\\\ dalam kode sumber C ++!

Ini juga berarti saya berpikir bahwa QDir::nativeSeparators( ... ) metode statis TIDAK melakukan hal yang benar jika kita menulis nama path / file sebagai string mentah dalam kode C ++ yang sedang berjalan. untuk dimasukkan ke penerjemah Lua sebagai string.

Tidak yakin saya mengerti komentar Anda atau apakah itu benar-benar ditujukan kepada saya .. :)

Apakah Anda melihat peluang saya untuk memperbaiki masalah ini, selain mengonfigurasi pengguna baru dari awal?

Ini lebih merupakan pengamatan umum bagi siapa pun yang melihatnya. Ini seharusnya mungkin untuk memperbaikinya dengan melihat jalur yang digunakan untuk memuat file LuaGlobel.lua, khususnya pada platform Windows. Saya memiliki kecurigaan bahwa kami telah membiarkan OS tersebut menggunakan beberapa nilai default - yang mungkin "direktori yang sama dengan yang dapat dieksekusi" tetapi tidak cocok karena jalur non-POSIX.

Melihat apa yang menurut saya penyebab dari masalah ini :

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;
    }
}

Ini segera tampak agak cerdik karena A ke D semuanya salah untuk Windows, misalnya A harus "..\\\\src\\\\mudlet-lua\\\\lua\\\\LuaGlobal.lua" tetapi yang lain membutuhkan penggantian run-time dari / menjadi \\\\ in baik string literal DAN variabel yang disertakan. Kesalahan asli di bagian atas topik adalah karena LUA_DEFAULT_PATH kosong saat digunakan di Windows!

Ingat jika men-debug ini pesan di layar [ ERROR ] akan mereproduksi jalur yang telah melalui keduanya, saya pikir \\ menjadi \ un-escapings jadi akan terlihat seperti yang benar, nyata Jalur Windows di layar - yang akan menjadi \LuaGobal.lua dalam kasus yang diberikan - yang mungkin juga salah dan seharusnya .\LuaGobal.lua mungkin - jadi LUA_DEFAULT_PATH seharusnya .\\\\ sebagai gantinya?

Lua pada Windows menangani / sebagai pemisah direktori dengan baik.

Itu bukan pengalaman saya yang agak terbatas - IIRC ada pengaturan konfigurasi di suatu tempat di lua stuff yang berisi array 4 karakter yang menampung pengaturan yang dikompilasi untuk, antara lain, karakter wildcard dalam nama paket dan pemisah direktori. Saya ingat ini karena ketika saya memperbaiki penanganan (internal ke) LuaGlobal.lua dari jalur file Windows vs. * nix di masa lalu saya memang menggunakan pemeriksaan, saya pikir pada satu indeks array C ke dalam config char array untuk '\\' atau '/' - meskipun saya pikir solusi yang lebih baik ditemukan kemudian.

Ah, ha - ya - lihat variabel package.config - itu masalahnya, dari Lua Unofficial FAQ :

1.40 Masalah kompatibilitas antara Windows dan Unix?

Di sini, 'Unix' adalah singkatan dari sistem operasi mirip POSIX seperti Linux, Mac OS X, Solaris, dll.

package.config adalah string di mana 'karakter' pertama adalah pemisah direktori; jadi package.config:sub(1,1) bisa berupa garis miring atau garis miring terbalik. Sebagai aturan umum, coba gunakan ini saat membangun jalur.

Perbedaan besar antara build Windows dan Unix adalah bahwa package.path default didasarkan pada lokasi Windows yang dapat dieksekusi, sedangkan pada Unix didasarkan pada /usr/local/share/lua/5.1 . Oleh karena itu lebih mudah untuk melakukan instalasi pengguna lokal Lua pada Windows, tetapi Lua menghormati variabel lingkungan LUA_PATH dan LUA_CPATH .

Lua lebih bergantung secara langsung pada pustaka runtime C sistem daripada kebanyakan bahasa skrip sehingga Anda harus menghargai perbedaan platform. Gunakan penentu "rb" dengan io.open jika Anda memerlukan kompatibilitas dengan I / O biner Windows. Berhati-hatilah dengan os.tmpname karena tidak mengembalikan path lengkap pada Windows (awalan dengan nilai variabel lingkungan TMP bersama dengan garis miring terbalik terlebih dahulu.) os.clock diimplementasikan sangat berbeda di Windows.

Demikian pula, os.time sebenarnya dapat merusak Lua jika melewati penentu format yang tidak kompatibel. (Ini tidak lagi menjadi masalah dengan Lua 5.2, yang melakukan pemeriksaan kewarasan terlebih dahulu.)

Untuk subsistem GUI Windows, os.execute dapat mengganggu, dan io.popen tidak akan berfungsi - pustaka ekstensi lintas platform tersedia dalam kasus ini.

'sebagai aturan umum' - itu tidak melawan fakta bahwa / sebagai pemisah direktori berfungsi dengan baik pada Windows di Lua.

Hanya itu - untuk beberapa orang, termasuk saya, yang tidak berhasil - mungkin saja saya tidak memiliki instalasi lua yang disiapkan dengan mengikuti resep yang dikutip normal (atau saya juga menginstal Cygwin).

Saya bertanya-tanya - apakah Anda bingung, kebetulan, penanganan pemisah direktori dari subsistem lua (atau lebih tepatnya bagian paketnya) - yang dapat dikonfigurasi dengan cara apa pun (atau mungkin untuk sesuatu yang lain sepenuhnya, katakanlah ' untuk RISCOS rupanya!), Windows cmd atau powerline shell yang akan menerima keduanya atau inti Qt C ++ yang juga akan menangani keduanya?

Itu membingungkan saya tentang apa yang seharusnya berfungsi untuk instalasi lua yang dikompilasi pada platform Windows - ah, mungkinkah msys adalah POSIX-ish tetapi mingw adalah Windowish?

Tidak, saya tidak, dan itu juga mengapa menggunakan / di LuaGlobal.lua berfungsi untuk banyak orang di Windows dalam keadaannya saat ini ...

selection_112

Pemisah jalur tidak menjadi masalah di sini.

Jadi mungkin penerjemah lua di mingw dari Qt dikonfigurasi dengan benar untuk Windows, dan menggunakan liblua yang sama dengan aplikasi Mudlet yang ditautkan ke {mungkin tidak, saya kira, untuk semua orang}. Sebagai contoh, luarocks menyediakan interpreter lua 5.1 yang dapat digunakan jika tidak ada yang lain ditemukan tetapi dengan token yang sama ~ it ~ libarary-nya mungkin digunakan sebagai gantinya.

💡 Ah, saya ingin tahu, @Kebap apa yang Anda dapatkan jika Anda mencoba mendapatkan nilai package.config pada pengaturan yang memberi Anda kesalahan? Bagi saya di baris perintah, misalnya, di sistem saya yang sedang berjalan:

[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> ~]$

Perhatikan nilai pertama / yang merupakan pemisah direktori saat ini yang akan digunakan saat memuat paket - seperti file LuaGlobal.lua ! Tentu saja tanpa skrip lua eksternal yang dijalankan / tersedia saya tidak dapat mengingat apakah mungkin untuk menjalankan sesuatu dari "baris perintah" di Mudlet. Saya akan mencoba dan menjalankan 'mesin laptop Istirahatkan nanti dan melihat apa yang saya dapatkan dari yang satu itu ...

Tentu bisa mencoba:
grafik
Sepertinya ada garis miring ke belakang di mana Anda memiliki garis miring ke depan

Tidak yakin apakah saya harus mencoba ini di Mudlet, karena Anda tampaknya menggunakan cara dan tempat yang berbeda ..?

Saya dapat membuat satu atau dua pengguna baru, dengan dan tanpa karakter khusus, hanya untuk memastikan apakah nama pengguna benar-benar menjadi masalah di sini. Apakah menurut Anda itu membantu?

Ya, silahkan coba

Pada Rabu, 25 Apr 2018, 18:48 Kebap, [email protected] menulis:

Saya dapat membuat satu atau dua pengguna baru, dengan dan tanpa karakter khusus,
hanya untuk memastikan apakah nama pengguna benar-benar menjadi masalah di sini. Menurut mu
itu membantu?

-
Anda menerima ini karena Anda berkomentar.

Balas email ini secara langsung, lihat di GitHub
https://github.com/Mudlet/Mudlet/issues/1616#issuecomment-384355980 , atau nonaktifkan
utasnya
https://github.com/notifications/unsubscribe-auth/AAGxjN9JHbiPCOgUf3u1u8jVg0KjDiSbks5tsKj3gaJpZM4TZAbQ
.

Sejauh yang saya bisa lihat, kode ini mencoba semua lokasi yang disarankan untuk file LuaGlobal.lua dan akhirnya mencapai lokasi di mana ia mencoba:

LUA_DEFAULT_PATH "/LuaGlobal.lua"

Namun dari pesan error yang dihasilkan sepertinya LUA_DEFAULT_PATH adalah string kosong sehingga path yang digunakan adalah:

/LuaGlobal.lua

dengan asumsi (dan saya masih tidak yakin tapi semoga itu hanya masalah saya ) bahwa '/' IS adalah pemisah direktori yang bisa diterapkan di mana itu digunakan itu berarti mencari file di root sistem file - pada POSIX yang ada secara harfiah root dan di Windows itu adalah root pada drive yang saat ini aktif, mungkin C:\ (atau C:/ : wink :) - jika kita benar-benar ingin itu menjadi direktori kerja saat ini, maka LUA_DEFAULT_PATH harus berupa satu karakter . dan tidak sepenuhnya kosong - karena itu pesan kesalahan akan kembali:

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

atau jika mengembalikan jalur lengkap, mungkin sesuatu seperti:

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

mungkin? 😮

Saya melihat bahwa pesan kesalahan dari juru bahasa lua ditangkap dalam std::string dan dikirim ke cTelnet::postMessage( ... ) melalui konversi std::string::c_str() ke const char * tetapi karena postMessage mengharapkan QString ini harus melibatkan konstruktor QString :: QString (const char yang menggunakan konverter QString::fromUtf8() jadi karakter non-ASCII * harus berhasil melewati tidak rusak ... 😌

\

lua print(package.config)

dari baris perintah profil Mudlet bahkan dengan kesalahan yang Anda dapatkan.

Ini sedikit spekulatif tetapi sebagai perbaikan runtime saya bertanya-tanya apakah mungkin untuk melakukan sesuatu seperti:

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

untuk mengubah pemisah menjadi / - meskipun Anda mungkin ingin mengubah pengaturan "pemisah perintah" dalam preferensi sehingga tidak memisahkan pemisah di atas pada ; - dan kemudian lihat apakah Anda bisa "menjalankan" file LuaGlobal.lua secara manual? Oh, itu tidak akan memberikan pesan kesalahan jenis [ ERROR ] jika tidak berhasil. \

Kesalahan yang dikonfirmasi dengan Mudlet 3.8.1 pada Win 8.1 dengan nama pengguna dengan karakter khusus: ä.
Tidak ada kesalahan dengan nama pengguna tanpa karakter khusus.

lua print(package.config) tanpa hasil yang terlihat
lua print('test') juga tanpa hasil yang terlihat
lua alias tersedia, tetapi print tampaknya tidak tersedia
lua echo('test') berfungsi seperti yang diharapkan

Menjalankan lua package.config = "/;?!_"
Log kesalahan mengatakan: ERROR:[string "Alias: run lua code"]:4: [string "package.config = "/"]:1: unfinished string near '<eof>'

Pemisah perintah diubah dari; untuk sesuatu yang lain

Menjalankan lua package.config = "/;?!_"
Oke saya rasa? Hasil tidak terlihat

Menjalankan lua run("./LuaGlobal.lua")
Log kesalahan mengatakan: ERROR:[string "return run("./LuaGlobal.lua")"]:1: attempt to call global 'run' (a nil value)

Uji dengan include - kesalahan yang sama.

lua require("./LuaGlobal.lua") - kesalahan menarik:
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'

Hanya untuk memastikan lua require("/LuaGlobal.lua")
Log kesalahan mengatakan:
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'

Aneh tentang print tidak berfungsi - Saya pikir itu adalah lua built-in - tetapi:

lua echo(package.config)

harus bekerja dengan baik.

Melihat output dari contoh kerja pertama, output kesalahan mencoba memuat file LuaGlobal.lua - mari kita lihat nama file dan jalur apa yang sedang dicoba:

  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

Saya tidak yakin di mana file tersebut harus ditempatkan akhir-akhir ini, jadi saya mengunduh dan menginstal biner 3.8.1 dan menemukan bahwa jalur yang digunakan adalah:

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

juga dengan versi Penginstal Windows itu, saya memiliki yang berikut ini untuk package.config:

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

jadi jalur ke sana harus menggunakan \ agar penangan paket dapat bekerja IMO. Masih belum jelas mengapa orang yang berbeda mendapatkan hal yang berbeda.

Diedit: mengutip daftar jalur dengan 'daripada'

Mengapa beberapa jalur adalah mojibake dan yang lain menampilkan Nama Pengguna dengan benar pasti karena mereka berasal dari sumber yang berbeda dan beberapa di antaranya belum mampu I18n dengan baik - akan sangat membantu jika kita dapat melacaknya dan memperbaikinya dengan Mudlet 4.0 - tetapi mereka mungkin bukan yang bisa kita kendalikan. Perhatikan bahwa itu tidak bisa menjadi kode tampilan atau font karena pesan kesalahan individu semua melewati proses yang sama saat dibuat.

Hanya untuk memastikan bahwa saya menggunakan contoh yang diharapkan (sebagai pengembang, saya memiliki lebih dari satu salinan pada PC itu), saya mengganti nama file dan mendapatkan hasil yang sama:
luagloballua_fail

Juga saya membuat pengguna baru DENGAN karakter non-ASCII (dan mungkin bahkan bukan Latin1 / ISO 885901) dan saya dapat mengonfirmasi bahwa semuanya kacau dengan cara yang sama untuk pengguna itu - Mudlet tidak dapat melihat file di:

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

tapi bisa untuk

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

:menangis:

Ini Q & A pada Stack Exchange tidak terdengar menjanjikan.

Namun Windows luawinfile berlisensi MIT (hanya dikompilasi di mingw BUKAN MSVC) penerjemah nama file (mengonversi nama file UTF-8 ke / dari UTF-16 yang harus digunakan dengan API penanganan file Windows) terlihat sedikit lebih baik - ini menyediakan pengganti untuk modul LFS yang dapat menggunakan nama file dan jalur UTF-8.

Temuan bagus. Hanya untuk membuangnya di sana, kami memiliki https://github.com/starwing/luautf8 sudah di Mudlet, apakah ada sesuatu yang dapat membantu kami?

SlySven, daftar 15 nama direktori Anda sepertinya salah. Misalnya, 13 harus membaca .\.dll dan bukan ..dll

Ah, itu adalah sistem mark-up yang mengganggu - dalam beberapa konteks di sini garis miring terbalik keluar dari karakter berikut yang diperlukan misalnya jika Anda ingin menampilkan simbol kurang dari dalam teks biasa seperti ini "\ <" Anda tidak akan melihat garis miring terbalik di sana ... dan saya telah menggunakan tanda kutip tunggal biasa daripada tanda kutip kode - diedit untuk memperbaiki kutipan.

luautf8 adalah semua tentang penanganan string UTF-8 - Saya tidak berpikir ini akan membantu di sini karena luainfile secara khusus tentang berinteraksi dengan penanganan file Windows (yang hanya bekerja dengan string UTF-16) C atau lebih mungkin pustaka C ++ - sepertinya perlu membungkus atau mengganti lfs hanya pada

Hmm tapi kami tidak menggunakan lfs untuk memuat LuaGlobal.lua , jadi bagaimana luainfile menyelesaikan masalah?

Ini bukan hanya pengganti lfs . Ini juga memiliki pengganti dofile dan loadfile . Kita mungkin perlu mengganti panggilan kita menjadi luaL_dofile dengan panggilan lua menjadi dofile .

Edit untuk menambahkan: Link library luainfile (secara default) terhadap lua 5.3 ... Tidak yakin apakah itu ketergantungan yang sulit atau tidak.

Sepertinya kita bisa menulis fungsi luaL_dofile kita sendiri lalu itu bekerja dengan pengkodean khusus Windows?

Bagaimana kita bisa mendorong ini ke depan?

Saya telah mengangkat masalah pada repositori luawinfile menanyakan tentang kompatibilitas 5.1 tetapi saya telah melihatnya dan itu benar-benar menggunakan beberapa fitur bahasa 5.3 yang tidak disediakan oleh lua 5.1 - ada modul kompatibilitas 5.3 terpisah, resmi, yang mencoba untuk menyediakan beberapa fitur hilang ke 5.2 dan 5.1 tetapi bukan tanpa komplikasi lain jadi bukan solusi penurunan.

Sepertinya terkait dengan # 229

Bagaimana kita bisa mendorong ini ke depan?

Kami perlu mem-backport https://github.com/cloudwu/luawinfile berlisensi MIT (satu file C dengan sekitar 884 baris {808 soc} kode) dari 5,3 hingga 5,1 untuk mengakomodasi beberapa fitur yang tidak ada di masa lalu versi lua yang digunakan Mudlet. Ini akan membutuhkan seseorang dengan pemahaman yang lebih baik tentang pengkodean lua-C daripada yang saya rasakan saat ini, saya kira. Namun tampaknya itu adalah sesuatu yang dapat dilakukan dan diuji secara independen tanpa terlalu mengkhawatirkan basis kode lainnya - meskipun itu hanya dapat benar-benar diuji pada platform pengembangan Windows.

Masalah lainnya adalah bahwa orang tidak dapat menyimpan profil mereka di windows dengan nama pengguna non-Inggris - tidak ada riwayat yang ditulis. Jangan berpikir kita punya tiket untuk itu.

@Bayu_joo
Apakah Anda mungkin mempelajari beberapa hal selama perbaikan Anda baru-baru ini untuk membawa surat-surat internasional ke Mudlet, untuk mengedepankan masalah ini?

Tidak juga, saya pikir bahwa mem-porting kembali luawinfile ke Lua 5.1 menawarkan harapan terbaik kita tetapi saya belum memiliki pemahaman yang cukup baik (belum?) Dari C/C++ + lua API untuk menaruh kepercayaan pada kemampuan saya untuk melakukan ini. Apakah ada orang lain? Saya kira kita perlu melihat-lihat kode untuk perpustakaan resmi Lua io dan melihat bagaimana luawinfile menggantikan beberapa (semua, saya tidak tahu?) Dari fungsi dengan penggantian khusus Windows.

Karena orang mungkin telah memperhatikan platform pengembangan Windows utama saya bukanlah yang paling sesuai (laptop Windows 7 dengan prosesor 64-bit tetapi menjalankan versi 32-bit) - PC utama saya juga memiliki Windows 7 64-bit tetapi tiga kali lipat- mesin boot tidak menjalankan OS itu selama berbulan-bulan jadi saya memiliki beberapa jam menatap layar "Memperbarui Windows ... jangan matikan" untuk melihat ke depan dan saya tidak begitu termotivasi, ATM!

Meskipun, sekarang penginstal on-line Qt akhirnya tampaknya telah beralih ke hanya menawarkan penginstalan Windows Mingw64 64-bit - dibandingkan dengan Mingw 32-bit sebelumnya yang mungkin saya pertimbangkan untuk melakukannya jika saya memiliki beberapa jam untuk dibuang. ..

Terlihat bagus ...

Selection_127

Ini berkat https://gist.github.com/Egor-Skriptunoff/2458547aa3b9210a8b5f686ac08ecbf0 yang dibuat di awal tahun.

Akan tersedia di Mudlet 3.22

Apakah halaman ini membantu?
0 / 5 - 0 peringkat