#+title: 各种开发工具配置
#+author: Zedhugh Chen

* Indium

  =Indium= 是一个可以在 =Emacs= 里直接调试运行在 =Chrome= 中的 =JavaScript= 的软件。

  感觉双屏用这个软件应该会很爽。安装使用步骤如下：

** 安装服务端

   #+BEGIN_SRC shell
     npm install -g indium
   #+END_SRC

** 安装 =Emacs= 客服端

   #+BEGIN_SRC emacs-lisp
     ;; 直接从melpa源里安装
     (require-package 'indium)

     ;; 配置
     (require 'indium)
     (add-hook 'js-mode-hook 'indium-interaction-mode)
   #+END_SRC

** =indium= 配置文件： =.indium.json=

   #+BEGIN_SRC json
     {
       "configurations": [
         {
           "name": "Indium Demo",
           "type": "chrome",
           "host": "0.0.0.0",
           "post": 9222,
           "url": "http://0.0.0.0:3000"
         }
       ]
     }
   #+END_SRC

   配置项说明：

   =name=: 随便起一个就好

   =type=: =Chrome= 调试直接写 =chrome= 就行了，其他参考[[https://indium.readthedocs.io/en/latest/setup.html][Indium Setup]]

   =host=: 本地调试地址

   =port=: =Chrome= 的调试协议端口号，和项目无关，和 =Chrome= 的启动参数有关

   =url=: 项目的首页地址，按项目设置

** 启动 =Chrome=

   在命令行里启动 =Chrome= 的时候带上参数

   #+BEGIN_SRC shell
     chrome --remote-debugging-port=9222
   #+END_SRC

   在 =Gentoo= 里面，自己编译的 =Chromium= 中，有个配置文件 =/etc/chromium/default= ，

   其中有 =CHROMIUM_FLAGS= 配置项，将其设置为上面启动参数的内容即可。即：

   #+BEGIN_SRC conf
     CHROMIUM_FLAGS="--remote-debugging-port=9222"
   #+END_SRC

** 开始调试

   在要调试的 =JavaScript= 文件中执行 =Emacs= 命令 =indium-connect= 即可开始调试

   #+BEGIN_SRC emacs-lisp
     (indium-connect)
   #+END_SRC

   用快捷键或 =Indium= 插件提供的命令加入断点，即可开始愉快的调试了。

   更多用法参考[[https://indium.readthedocs.io/en/latest/index.html][Indium手册]]。

* Input method
  有时候输入法在 =firefox= 中不工作，这是因为设置不对造成的，通过查询资料，最终
  在 [[https://wiki.archlinux.org/index.php/Smart_Common_Input_Method][archwiki]] 中找到方法，将 =.xprofile= 文件中的
  #+BEGIN_SRC bash
    export XMODIFIERS=@im=SCIM
    export GTK_IM_MODULE="scim"
    export QT_IM_MODULE="scim"
  #+END_SRC
  改成
  #+BEGIN_SRC bash
    export XMODIFIERS=@im=SCIM
    export GTK_IM_MODULE="xim"
    export QT_IM_MODULE="scim"
  #+END_SRC
  即可解决该问题。

** rime升级问题
   =librime= 升级到 =1.5.3= 版本时， =fcitx-rime= 无法使用，同时在 =Emacs= 中通过
   =pyim= 使用 =rime= 输入法也没法工作，通过安装 =ibus-rime= 测试，发现也不工作，
   但将 =librime= 降回 =1.4.0= 版本时，汉字可正常输入，故判定该问题是新版本的
   =librime= 引起到。
   由此，将 =librime-1.5.3= 加入到 =package.mask= 中使其不升级，问题解决

   [2019/8/24]今天发现上面的问题并不成立，这段时间在网上搜索，并没有发现相似的问题，
   故怀疑是 =librime= 配置的问题，最终发现在 =installation.yaml= 中，
   有 =rime-version: 1.4.0= 这样的配置，想到是否 =librime= 升级之后是否需要重新生成
   用户词库相关的文件，将之前的词库删除后重启 =fcitx= 输入法发现， =librime-1.5.3=
   能正常工作了。该问题解决。

   *结论*: 升级 =librime= 后，需要删除相关词库数据，重新生成

* 双系统时间问题
  =Linux= 和 =Windows= 双系统时区不统一的问题，该问题是因为兩个系统的时区标准
  不同， =Windows= 系统显示的是 =BIOS= 时间， =Linux= 则是将 =BIOS= 时间作为
  =UTC= 时间，具体显示的是各个地区的时间。
  解决办法为，修改注册表，使 =Windows= 也采用与 =Linux= 相同的时间策略，修改
  代码为
  #+BEGIN_SRC bat
    Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v
    RealTimeIsUniversal /t REG_DWORD /d 1
  #+END_SRC

* Firefox播放网易云音乐问题
  不知道从哪个版本开始，Firefox播放网易云音乐的声音很奇怪，通过网络查询，
  是 =MSE= 的问题，在浏览器这中禁用 =MSE= 即可！禁用方法:
  1. about:config -> media.mediasource.enable 改成 false 即可
  2. 现该问题网易云音乐已修复该bug

* pcmanfm安装不上到问题
  安装 =pcmanfm= 时发现， =libfm= 和 =menu-cache= 之间出现了循环依赖问题，
  导致安装这两个 =package= 的时候会安装不上，并且依赖这两个 =package= 的软
  件由于这两个 =package= 装不上，也会无法安装，经上网查询，早在 =2017= 年
  =8= 月的时候就有人提出了相同到问题，当时的 =libfm= 版本是 =1.2.5= ，并且
  =libfm= 官方已经修复了该问题，现在在 =libfm-1.3.1= 中再次出现该问题，解决
  办法就是在要安装 =libfm= 时，先安装 =libfm-1.2.5= ，然后通过升级的方式将
  =libfm= 升级到 =1.3.1= 版本即可。

* lsp clangd
  配置 =clangd= 需要在项目根目录下创建一个 =compile_commands.json= 文件，
  其模板如下所示：
  #+begin_src json
    [{
        "directory": "project directory",
        "command": "clang -g -pthread -I<header file directory>",
        "file": "main.c"
    }]
  #+end_src
  其中 =command= 参数中的 =-I= 可以有多个，表示从多个文件夹下导入头文件。
