Ubuntu上lazarus修正不能输入中文的问题

admin 8月前 37030

把以下内容保存为 fix_lazarus_chinese.sh:

#!/bin/bash
#
# 参考资料:
#   https://www.cnblogs.com/qiufeng2014/p/15722762.html
#
# 一、以下四文件中
# lazarus/components/synedit/lazsyngtk2imm.pas
# lazarus/lcl/interfaces/gtk2/gtk2globals.pp
# lazarus/lcl/interfaces/gtk2/gtk2widgetset.inc
# lazarus/lcl/interfaces/gtk2/gtk2proc.inc
#
# 增加以下内容
# {$ifdef linux}
# {$define WITH_GTK2_IM}
# {$endif}
#
# 二、以下文件
# lazarus/components/synedit/synedit.inc
#
# 增加以下内容
# {$ifdef LCLGTK2}
# {$define Gtk2IME}
# {$endif}
#

# 定义lazarus安装目录
LAZ_HOME=$HOME/dev/lazaru 
K_WORD="{\\\$define WITH_GTK2_IM}"
F_WORD="{\\\$mode objfpc}{\\\$H+}"
R_WORD="${F_WORD}\\n\\n{\\\$ifdef linux}\\n{\\\$define WITH_GTK2_IM}\\n{\\\$endif}"

F_FILE=$LAZ_HOME/lazarus/components/synedit/lazsyngtk2imm.pas
if [ `grep -c "$K_WORD" $F_FILE` -eq '0' ];then
  # 备份原文件
  cp $F_FILE $F_FILE.bak
  
  echo "Patching [ $F_FILE  ]"
  sed -i "s/$F_WORD/$R_WORD/" $F_FILE
  
  head -50 $F_FILE
  echo ""
  echo "========================================================"
  echo ""
fi

F_FILE=$LAZ_HOME/lazarus/lcl/interfaces/gtk2/gtk2globals.pp
if [ `grep -c "$K_WORD" $F_FILE` -eq '0' ];then
  # 备份原文件
  cp $F_FILE $F_FILE.bak

  echo "Patching [ $F_FILE  ] "
  sed -i "s/$F_WORD/$R_WORD/" $F_FILE  

  head -50 $F_FILE
  echo ""
  echo "========================================================"
  echo ""  
fi

F_WORD="{\\\$IFNDEF USE_GTK_MAIN_OLD_ITERATION}"
R_WORD="{\\\$ifdef linux}\\n{\\\$define WITH_GTK2_IM}\\n{\\\$endif}\\n\\n${F_WORD}"
F_FILE=$LAZ_HOME/lazarus/lcl/interfaces/gtk2/gtk2widgetset.inc
if [ `grep -c "$K_WORD" $F_FILE` -eq '0' ];then
  # 备份原文件
  cp $F_FILE $F_FILE.bak

  echo "Patching [ $F_FILE  ] "
  sed -i "s/$F_WORD/$R_WORD/" $F_FILE

  head -50 $F_FILE
  echo ""
  echo "========================================================"
  echo ""  
fi
F_WORD="{off \\\$DEFINE VerboseUpdateSysColorMap}"
R_WORD="$F_WORD\\n\\n{\\\$ifdef linux}\\n{\\\$define WITH_GTK2_IM}\\n{\\\$endif}"
F_FILE=$LAZ_HOME/lazarus/lcl/interfaces/gtk2/gtk2proc.inc
if [ `grep -c "$K_WORD" $F_FILE` -eq '0' ];then
  # 备份原文件
  cp $F_FILE $F_FILE.bak
  
  echo "Patching [ $F_FILE  ]"
  sed -i "s/$F_WORD/$R_WORD/" $F_FILE

  head -50 $F_FILE
  echo ""
  echo "========================================================"
  echo ""
fi
K_WORD="{\\\$define Gtk2IME}"
F_WORD="{\\\$DEFINE SYNEDIT_INCLUDE}"
R_WORD="{\\\$ifdef LCLGTK2}\\n{\\\$define Gtk2IME}\\n{\\\$endif}\\n\\n${F_WORD}"
F_FILE=$LAZ_HOME/lazarus/components/synedit/synedit.inc
if [ `grep -c "$K_WORD" $F_FILE` -eq '0' ];then
  # 备份原文件
  cp $F_FILE $F_FILE.bak
  
  echo "Patching [ $F_FILE  ]"
  sed -i "s/$F_WORD/$R_WORD/" $F_FILE

  head -50 $F_FILE
  echo ""
  echo "========================================================"
  echo ""
fi

echo "Patched! Rebuild lazarus and take effect"
echo ""


然后执行:

sh ./fix_lazarus_chinese.sh

执行完成后,再编译lazarus



最新回复 (0)
返回