Heim  >  Artikel  >  Entwicklungswerkzeuge  >  Wie unterstützt Sublime Text 3 chinesische Eingaben unter Ubuntu?

Wie unterstützt Sublime Text 3 chinesische Eingaben unter Ubuntu?

藏色散人
藏色散人nach vorne
2021-08-25 15:50:222540Durchsuche

In der folgenden Tutorial-Kolumne von sublime erfahren Sie, wie Sie chinesische Eingaben in Sublime Text 3 unter Ubuntu unterstützen. Ich hoffe, dass es für Freunde hilfreich ist, die es benötigen!

  • Installation der zugehörigen abhängigen Software --- sudo apt-get install build-essential libgtk2.0-dev
  • Kopieren Sie den folgenden Code in Sublime Text 3 und speichern Sie ihn als Datei mit dem Namen 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);
}
  • Finden Geben Sie den Dateispeicherort im Terminal ein und kompilieren Sie diese Datei in die gemeinsam genutzte Bibliothek libsublime-imfix.so----Geben Sie den Befehl
    gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags ein gtk+- 2.0` -fPIC
  • Kopieren Sie libsublime-imfix.so in den Ordner, in dem sich sublime_text befindet --- sudo mv libsublime-imfix.so /opt/sublime_text/
  • Ändern Sie den Inhalt der Datei /usr/bin/subl ---sudo gedit /usr/bin/subl
  • Ändern Sie
#!/bin/sh
exec /opt/sublime_text/sublime_text "$@"
  • in
#!/bin/sh
LD_PRELOAD=/opt/sublime_text/libsublime-imfix.so exec /opt/sublime_text/sublime_text "$@"

Auf diese Weise können wir Chinesisch in Sublime eingeben, indem wir subl eingeben, um vom Terminal aus zu beginnen!

Um uns die Verwendung chinesischer Eingaben beim direkten Start zu erleichtern, müssen wir schließlich den Inhalt der Datei sublime_text.desktop im Terminalbefehl öffnen und ändern – 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;

Ersetzen Sie den Inhalt durch den oben genannten Codeinhalt, und wir sind fertig! Aus Stabilitätsgründen ist es natürlich besser, vom Terminal aus zu starten!

*Hinweis
Denn wir werden zwei Symbole sehen, von denen eines erst nach dem Start Chinesisch eingeben kann und das andere immer noch nicht eingeben kann

Das obige ist der detaillierte Inhalt vonWie unterstützt Sublime Text 3 chinesische Eingaben unter Ubuntu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jianshu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen