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

Bagaimanakah teks sublime 3 menyokong input Cina di bawah Ubuntu?

藏色散人
藏色散人ke hadapan
2021-08-25 15:50:222516semak imbas

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);
}
  • 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 "$@"
  • ditukar kepada
#!/bin/sh
LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text "$@"

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;

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!

Kenyataan:
Artikel ini dikembalikan pada:jianshu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam