EmacsでGit(ローカル)
EmacsでGitを使ってみる
インストールしたmagitを使ってみる
- magitの起動
- リポジトリ化
- ステージング
- コミット
- ブランチ
- マージ
- コンフリクト
magit(magit-status)の起動
C-x g
で立ち上がる.(そのようにinit.el
に書いておく)
以降,情報を更新するときは,g
リポジトリ化
GitHubなどのリモートリポジトリからクローンするのでなく,リポジトリでないところで magitを立ち上げると,新規にリポジトリを作るか聞かれるので,表示に従って作る.
もし,今使っているリポジトリ以外にもう一つ別のリポジトリを作りたければ,M-x magit-init
ステージング
リポジトリ中のファイルを編集し,(必要に応じてg
でmagit-statusを更新すると)
Unstaged Changesとして検出される.
カーソルを合わせてTab
で詳細が表示される(Tab
を繰り返すことで閉じる)
s
でステージングする
ファイル中の特定の範囲だけを選択してs
するとその範囲のみステージングされ,
残りはUnstatedのままになる.
コミット
c c
でコミットできる.
続いてメッセージの入力を求められる.
適宜入力したら,C-c C-c
で完了
ブランチ
作成
l b
でログを表示
ブランチを作成したいコミットを選んでb c RET
,
ブランチ名を入力してRET
すると作成される.
チェックアウト
ブランチを切り替えるにはb b
.
名前を聞かれるので,入力してRET
マージ
m m RET
でマージする.
コンフリクト
コンフリクトがある場合,対象ファイルの問題箇所が示される.
<<<<<<<
と>>>>>>
で囲まれた範囲を編集し,保存し,あらためてm m
でマージする.
コンフリクトを解消せずに前の状態に戻るときはm a
EmacsでGit (準備まで)
Emacs上でGitを使うための準備
GitそのものとGitHubの操作と両方ともEmacs上で行いたいので,forge(とmagit)を使う.
- magit:Gitコマンドを実行
- forge:GitHubの操作
- パッケージインストール用のリポジトリ設定
- forgeとmagitのインストール
- 設定
パッケージインストール用のリポジトリ設定
パッケージのリポジトリにmelpa
を追加する.
安定版にしているのはなんとなく. <- melpa-stableにあるforge 0.1.0はちゃんと動作しないので必ずmelpaにする
init.el
に以下を記載
(require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
M-x package-refresh-contents RET
を実行しておく.
forgeとmagitのインストール
M-x package-list-packages
でインストール可能なリストを表示する.
C-s forge
でforgeを検索,ヒットしたらforge
にカーソルを合わせてRET
,
しばらくすると,次の画面が表示される.Install
にカーソルを合わせてRET
,Install package 'forge-xxx'?
と聞かれるのでy
一緒にmagit
などもインストールされる.
M-x magit-version RET
で確認すると,magit,git,emacsのバージョンが表示される.
設定
magit用のキーバインドとして,以下をinit.el
に記載
(global-set-key (kbd "C-c g") 'magit-file-dispatch) (global-set-key (kbd "C-x M-g") 'magit-dispatch) (global-set-key (kbd "C-x g") 'magit-status)
forge使用前にmagitを有効にするため,以下もinit.el
に記載
(with-eval-after-load 'magit (require 'forge))
参考
■
Big Sur上のApacheで,Dashを動かす
Pythonの実行環境を用意
- pyenvでのインストール
- mod_wsgiのインストール
- dashのインストール
Apache2のインストール・設定
- Homebrewからインストール
- 設定ファイルの修正・作成
-
- スクリプトの作成
- 実行
pythonの実行環境
既存のpyenvで作った環境を使おうとしたら,--enable-shared
オプション付きでインストールしていないとmod_wsgi
をインストールできなかったので
作り直す(3.9.0の例)
$ env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.9.0
pyenv global 3.9.0
またはpyenv local 3.9.0
でこの環境をアクティブにしてからmod_wsgiとdashをインストール
$ pip install mod_wsgi
$ pip install dash
Apache2
Homebrewから入れる.
$ brew install apache2
Homebrewで入れたapache2の設定ファイルはデフォルトと異なり,/usr/local/etc/httpd/httpd.conf
になる.
記載内容を得るため,mod_wsgiの設定を確認する
$ mod_wsgi-express module-config LoadFile "/usr/local/var/pyenv/versions/3.9.0/lib/libpython3.9.dylib" LoadModule wsgi_module "/usr/local/var/pyenv/versions/3.9.0/lib/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-darwin.so" WSGIPythonHome "/usr/local/var/pyenv/versions/3.9.0"
これを参考にpython.conf
に記入.
LoadModule wsgi_module "/usr/local/var/pyenv/versions/3.9.0/lib/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-darwin.so" WSGIPythonHome "/usr/local/var/pyenv/versions/3.9.0" WSGIScriptAlias / /Users/hogehoge/Sites/python/test.wsgi <Directory /Users/hogehoge/Sites/python> options ExecCGI Indexes FollowSymLinks </Directory>
WSGIScriptAlias
が/
でないと"Loading..."と表示されるだけで,所望の結果が得られない.
WSGI,Dashによるスクリプト
Dashを使ったアプリ本体(test.py
)
# -*- coding: utf-8 -*- import dash import dash_core_components as dcc import dash_html_components as html from dash.dependencies import Input,Output,State import plotly.graph_objects as go app = dash.Dash(__name__) app.layout = html.Div( children=[ dcc.Graph(figure=go.Figure()), ], ) if __name__=='__main__': app.run_server(debug=True)
WSGIファイル(test.wsgi
)
import sys sys.path.insert(0, '/Users/hogehoge/Sites/python') from test import app application = app.server
flaskなどと違って,application
にはapp
ではなくserver
を対応づける.
■
rsyncでiconvとdeleteオプションを使ったら挙動が変
Macでrsyncを使ってバックアップを取る際,OS標準のrsyncでは日本語が化けてしまう.
これを改善するためには,iconvオプションがあるHomebrew版を使えばよい.
しかし,deleteオプションも併用した際,本来対象とならないファイルまで削除対象とされてしまった.
最初のオプションはこんな感じ
rsync -nva --delete --iconv=UTF-8 ~/hoge/ /Volumes/backup/
iconvオプションなしなら,表示は化けるがちゃんとバックアップされる.
このiconvオプションを--iconv=UTF-8,UTF-8-MAC
にしたら,解決した.
rsync -nva --delete --iconv=UTF-8,UTF-8-MAC ~/hoge/ /Volumes/backup/
詳しいことはよくわからないが,--iconv=UTF-8-MAC,UTF-8
でもダメだったので,順番も重要らしい.
余談だが,逆にWindowsとかで操作したファイルのバックアップをMacで取るとき,WindowsなのにNFD文字が含まれているときに
(メールの添付ファイルとかで時々ある),some files vanished
となってバックアップされないのはどうにもならない.
■
\special{pdf:...}で文字修飾
LaTeXの通常のコマンドだけでは、
- 文字の縁に線をつける(袋文字)
- 任意の斜体(左斜体を含む。←地図中で川や湾に使われる字形)
- 透明
などの実現が難しい。
TikZを使えば多分どれも可能だが、もう少しシンプルに実現したい。 いっそのこと\special命令でどうにかしようと調べた結果をメモ。
文字の縁に線をつける(袋文字)
まずプリアンブルで、
- \usepackage[dvipdfmx]{graphicx}
などとしてdvipdfmxオプションでgraphicxパッケージを読み込む。
そして、色を変えたいところの開始位置で、
\special{pdf:bcolor [c1 m1 y1 k1] [c2 m2 y2 k2]}で塗りと縁の線の色を指定
- [c1 m1 y1 k1] :塗りの色。CMYKをそれぞれ0-1で指定。数値は4つとは限らない。3つならRGB、1つならグレースケール
- [c2 m2 y2 k2]:縁の線の色。
\special{pdf:code q width w mode Tr}で線の太さと塗り・線の有無を指定
- width:縁の線の太さ。単位はpt
- mode:塗りと縁の線の有無を指定。0:塗りだけ、1:縁の線だけ、2:両方あり
終了位置で
- \special{pdf:code Q}\special{pdf:ecolor}
とする。
使用例
\documentclass{jarticle} \usepackage[dvipdfmx]{graphicx,color} \begin{document} \special{pdf:bcolor [1 0 0 0] [0 1 0 0]}% \special{pdf:code q .25 2 Tr}% test% \special{pdf:code }% \special{pdf:ecolor}% \end{document}
縁の線が0.25ptで色はシアン100%、塗りはマゼンタ100%。
毎回\special命令すべて入力するのは煩雑なので、次のようなマクロにしておく。
\documentclass{jarticle} \usepackage[dvipdfmx]{graphicx,color} \def\stroketext#1#2#3#4{%#1: 塗りの色、#2: 線の色、#3: 線の太さ、#4: 文字列 \special{pdf:bcolor [#1] [#2]}% \special{pdf:code q #3 w 2 Tr}% #4 \special{pdf:code Q}% \special{pdf:ecolor}% } \begin{document} \stroketext{1 0 0 0}{0 1 0 0}{0.25}{test} \end{document}
ただし、これらの書き方だと塗りの上に線が来るため、文字がちょっと読みにくいかもしれない。
塗りの下に線が来るようにしたければ、もう一手間かける。
\documentclass{jarticle} \usepackage[dvipdfmx]{graphicx,color} \newbox\strokebox %文字を保存するためのボックス \def\stroketext#1#2#3#4{%#1: 塗りの色、#2: 線の色、#3: 線の太さ、#4: 文字列 \setbox\strokebox=\hbox{#4} \hbox{% \special{pdf:bcolor [#1] [#2]}% \special{pdf:code q #3 w 2 Tr}% \hbox to0pt{\unhcopy\strokebox\hss}% \special{pdf:code q 0 Tr}%縁なしに変更 \unhbox\strokebox \special{pdf:code Q}% \special{pdf:ecolor}% }% } \begin{document} \stroketext{1 0 0 0}{0 1 0 0}{0.5}{test}%第3引数を0.25→0.5に変更 \end{document}
線つきの文字の上に、線なしの文字を重ね打ちしている。
水平ボックスに文字を保存して2回出力している。
線の内側半分は上に来た塗りで隠れてしまうから、 線の太さとして見せたい太さの倍の数値を入力しないといけない。