Rumah > alat pembangunan > sublime > Bagaimanakah teks sublime 3 menyokong input Cina di bawah Ubuntu?

Bagaimanakah teks sublime 3 menyokong input Cina di bawah Ubuntu?

藏色散人
Lepaskan: 2021-08-25 15:50:22
ke hadapan
2566 orang telah melayarinya

Lajur tutorial sublime berikut akan memperkenalkan kepada anda cara menyokong input bahasa Cina dalam teks sublime 3 di bawah Ubuntu, saya harap ia dapat membantu rakan yang memerlukan.

  • Pemasangan perisian bergantung yang berkaitan---sudo apt-get install build-essential libgtk2.0-dev
  • Salin kod berikut ke teks sublime 3 dan simpan sebagai Fail of sublime_imfix.c
/*
 * sublime-imfix.c
 * Use LD_PRELOAD to interpose some function to fix sublime input method support for linux.
 * By Cjacker Huang <jianzhong.huang at i-soft.com.cn> *
 *
 * gcc -shared -o libsublime-imfix.so sublime_imfix.c  `pkg-config --libs --cflags gtk+-2.0` -fPIC
 * LD_PRELOAD=./libsublime-imfix.so sublime_text
 */
#include <gtk/gtk.h>
#include <gdk/gdkx.h>

typedef GdkSegment GdkRegionBox;

struct _GdkRegion
{
    long size;
    long numRects;
    GdkRegionBox *rects;
    GdkRegionBox extents;
};

GtkIMContext *local_context;

void
gdk_region_get_clipbox (const GdkRegion *region,
                        GdkRectangle    *rectangle)
{
    g_return_if_fail (region != NULL);
    g_return_if_fail (rectangle != NULL);

    rectangle->x = region->extents.x1;
    rectangle->y = region->extents.y1;
    rectangle->width = region->extents.x2 - region->extents.x1;
    rectangle->height = region->extents.y2 - region->extents.y1;
    GdkRectangle rect;
    rect.x = rectangle->x;
    rect.y = rectangle->y;
    rect.width = 0;
    rect.height = rectangle->height;

    //The caret width is 2;
    //Maybe sometimes we will make a mistake, but for most of the time, it should be the caret.
    if (rectangle->width == 2 && GTK_IS_IM_CONTEXT(local_context)) {
        gtk_im_context_set_cursor_location(local_context, rectangle);
    }
}
//this is needed, for example, if you input something in file dialog and return back the edit area
//context will lost, so here we set it again.

static GdkFilterReturn event_filter (GdkXEvent *xevent, GdkEvent *event, gpointer im_context)
{
    XEvent *xev = (XEvent *)xevent;

    if (xev->type == KeyRelease && GTK_IS_IM_CONTEXT(im_context)) {
        GdkWindow *win = g_object_get_data(G_OBJECT(im_context), "window");

        if (GDK_IS_WINDOW(win)) {
            gtk_im_context_set_client_window(im_context, win);
        }
    }

    return GDK_FILTER_CONTINUE;
}

void gtk_im_context_set_client_window (GtkIMContext *context,
                                       GdkWindow    *window)
{
    GtkIMContextClass *klass;
    g_return_if_fail (GTK_IS_IM_CONTEXT (context));
    klass = GTK_IM_CONTEXT_GET_CLASS (context);

    if (klass->set_client_window) {
        klass->set_client_window (context, window);
    }

    if (!GDK_IS_WINDOW (window)) {
        return;
    }

    g_object_set_data(G_OBJECT(context), "window", window);
    int width = gdk_window_get_width(window);
    int height = gdk_window_get_height(window);

    if (width != 0 && height != 0) {
        gtk_im_context_focus_in(context);
        local_context = context;
    }

    gdk_window_add_filter (window, event_filter, context);
}
Salin selepas log masuk
  • Cari lokasi fail dalam terminal dan susun fail ini ke dalam pustaka kongsi libsublime-imfix.so----Masukkan arahan
    gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk -2.0` -fPIC
  • Salin libsublime-imfix.so ke folder tempat sublime_text terletak --- sudo mv libsublime -imfix.so /opt/sublime_text/
  • Ubah suai kandungan fail /usr/bin/subl ---sudo gedit /usr/bin/subl
  • akan
#!/bin/sh
exec /opt/sublime_text/sublime_text "$@"
Salin selepas log masuk
  • ditukar kepada
#!/bin/sh
LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text "$@"
Salin selepas log masuk

Dengan cara ini, kita boleh memasuki bahasa Cina secara sublim dengan menaip subl untuk bermula dari terminal!

Akhir sekali, untuk memudahkan kami menggunakan input Cina apabila bermula secara langsung, kami perlu membuka dan mengubah suai kandungan fail sublime_text.desktop dalam arahan terminal---sudo gedit /usr/share/applications /sublime_text.desktop

[Desktop Entry]
Version=1.0
Type=Application
Name=Sublime Text
GenericName=Text Editor
Comment=Sophisticated text editor for code,markup and prose
Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text %F"
Terminal=false
MimeType=text/plain;
Icon=sublime-text
Categories=TextEditor;Development;Utility;
StartupNotify=true
Actions=Window;Document;

X-Desktop-File-Install-Version=0.22

[Desktop Action Window]
Name=New Window
Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text -n"
OnlyShowIn=Unity;
[Desktop Action Document]
Name=New File
Exec=bash -c "LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text --command new_file"
OnlyShowIn=Unity;
Salin selepas log masuk

Ganti kandungan dengan kandungan kod di atas, dan kami sudah selesai! Sudah tentu, demi kestabilan, lebih baik bermula dari terminal!

*Nota
Kerana kita akan melihat dua ikon, satu daripadanya boleh memasukkan bahasa Cina hanya apabila ia dimulakan, dan satu lagi masih tidak boleh memasukkan

Atas ialah kandungan terperinci Bagaimanakah teks sublime 3 menyokong input Cina di bawah Ubuntu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:jianshu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan