投稿者: k-sunako
emacs-lisp のリスト操作
概要
List Modification にある知らなかった関数。
delete
関数
指定した値をリストから削除した新しいリストを返す。元になったリストは 破壊される。
(setq l01 '(1 2 3))
(delete 1 l01)
重複も削除する。
(setq l01 '(1 1 2 3 1 1))
(delete 1 l01)
元のリストは破壊される。
(setq l01 '(1 1 2 3 1 1))
(delete 1 l01)
l01
remove
関数
元のリストから指定した値を削除する。元になったリストは無事。
(setq l01 '(1 2 3))
(remove 1 l01)
元のリストは無事。
(setq l01 '(1 1 2 3 1 1))
(remove 1 l01)
l01
append
関数
2つのリストを連結したリストを返す。
(setq l01 '(1 2 3)) (setq l02 '(4 5 6)) (append l01 l02)
butlast
関数
指定した個数の要素をリストから除外したリストを返却する。
(setq l01 '(1 2 3 4 5))
(butlast l01 3)
emacs で音楽を聞く
概要
musicForProgramming のmp3ファイルをemacsで再生できないかをあれこれと 試行錯誤したのでその備忘録として。
パッケージ
Music Players にあるようにいくつかのパッケージがあるが emms
を選択。
カスタム
customize-group
コマンドで emms-volume で emms-volume-change-function
に emms-volume-pulse-change を設定。
エラー
mp3 を追加してボリュームを上げようとすると以下のメッセージがミニバッ ファーに表示される。
Wrong type argument: stringp, nil
原因
emms-volume-pulse.el の pactl
の出力をパースするところが問題。コー ドではSink, Name, Volume を目印として情報を取得しているようで、コマ ンド出力が英語以外だと問題となる。
(string-match (mapconcat 'identity '(".*Sink[ \t]+\\#\\([0-9]+\\)" ".*Name:[ \t]\\([^\n]+\\)" ".*Volume:.*?\\([0-9]+\\)%.*\n?") "\n") output)
コード内の pactl
コマンドを再現すると日本語表示になっている。
pactl list sinks
シンク #0 状態: RUNNING 名前: alsa_output.pci-0000_00_01.1.hdmi-stereo-extra1 説明: 内部オーディオ Digital Stereo (HDMI 2) ドライバー: module-alsa-card.c サンプル仕様: s16le 2ch 44100Hz チャンネルマップ: front-left,front-right 所有者モジュール: 6 ミュート: いいえ ボリューム: front-left: 39321 / 60% / -13.31 dB, front-right: 39321 / 60% / -13.31 dB
ロケールを設定すると英語で表示される。
LC_ALL=C pactl list sinks
Sink #0 State: RUNNING Name: alsa_output.pci-0000_00_01.1.hdmi-stereo-extra1 Description: 内部オーディオ Digital Stereo (HDMI 2) Driver: module-alsa-card.c Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Owner Module: 6 Mute: no Volume: front-left: 39321 / 60% / -13.31 dB, front-right: 39321 / 60% / -13.31 dB
対策
defadvice
を使用して問題の関数の環境変数を一時的に置換して問題を回 避。
(defadvice emms-volume--pulse-get-volume (around emms-volume--pulse-get-volume-around activate) (let ((process-environment (append process-environment '("LC_ALL=C")))) ad-do-it))
rxjs を勉強
Introduction – Learn RxJS を参考に rxjs を勉強中。仕事で angular を使 用したフロントエンド開発があるため、理解しながらコーディングをやりたい。
CodeBlock
自炊した書籍のpdfを整理するときに emacsの org-mode のコードブロックの が役にたったため、備忘録代りに記事にする。
agrep
は曖昧検索を実現するgrepの派生プログラム。
code block
の使いかたはorg-modeのコードブロック(Babel)の使い方 | Misohena Blogを参考にした。
#+NAME: get-book-links #+begin_src elisp :var title="" :resutls list (let* ( (len (/ (length title) 3)) ) (mapcar (lambda (n) (print (s-concat "[[" n "][" (f-filename n) "]]"))) (s-lines (shell-command-to-string (s-lex-format "find ~/Dropbox/Book | agrep -E ${len} \"${title}\""))))) #+end_src #+CALL: get-book-links[:results list](title="並列") #+RESULTS: - Akkaとアクターモデルではじめる並列並行分散処理プログラミング Vol 1.5.pdf - C/C++プログラマーのためのOpenMP並列プログラミング 菅原 清文 318p_4877831991.pdf - 並列計算と数理とアルゴリズム.pdf - Akkaとアクターモデルではじめる並列並行分散処理プログラミング.pdf - [[][]]
org-mode エクスポートの設定
org-mode の設定を変更。エクスポートをスニペットとしていたが、 #+SETUPFILE
を使用してLatexヘッダー等を別ファイルとする。
元のスニペットは下記.
#+LaTeX_CLASS: koma-jarticle #+LaTeX_CLASS_OPTIONS: [12pt] #+latex_header: \usepackage{xcolor} #+latex_header: \usepackage{minted} #+LATEX_HEADER: \usepackage{geometry} #+LATEX_HEADER: \geometry{left=1cm,right=1cm,top=1cm,bottom=1cm} #+LATEX_HEADER: \usepackage[natbib=true]{biblatex} \DeclareFieldFormat{apacase}{#1} \addbibresource{~/Dropbox/Bibliography/references.bib} #+STARTUP: overview #+STARTUP: hidestars #+OPTIONS: H:4 num:nil toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc #+LINK_UP: #+LINK_HOME: #+TITLE: ${1: title} #+AUTHOR: k-sunako #+DATE: `(let ((x (org-time-stamp '(16) t ))))` \vspace*{-1.5cm} * 概要 blabla * 参考文献 #+LaTeX: \printbibliography[heading=none]
上記のLatexヘッダーなどレポートとしての体裁を設定する箇所を report-header.org
として別ファイルにする。
#+LaTeX_CLASS: koma-jarticle #+LaTeX_CLASS_OPTIONS: [12pt] #+latex_header: \usepackage{xcolor} #+latex_header: \usepackage{minted} #+LATEX_HEADER: \usepackage{geometry} #+LATEX_HEADER: \geometry{left=1cm,right=1cm,top=1cm,bottom=1cm} #+LATEX_HEADER: \usepackage[natbib=true]{biblatex} \DeclareFieldFormat{apacase}{#1} \addbibresource{~/Dropbox/Bibliography/references.bib} #+STARTUP: overview #+STARTUP: hidestars #+OPTIONS: H:4 num:nil toc:nil \n:nil @:t ::t |:t ^:nil -:t f:t *:t TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc #+LINK_UP: #+LINK_HOME:
そのため、スニペットは下記となる。
# -*- mode: snippet -*- # name: report2 # key: rep2 # -- #+setup: report-header.org #+TITLE: ${1: title} #+AUTHOR: k-sunako #+DATE: `(let ((x (org-time-stamp '(16) t ))))` \vspace*{-1.5cm} * 概要 blabla * 参考文献 #+LaTeX: \printbibliography[heading=none]
ripgripのオプション
emacsの ripgrep-regex
コマンドが遅いことが多いので調べると検索結果の文字数に上限を設け れば良いらしい。
下記のコマンドで100バイトの文字数に上限を設定できる。
rp -M 100 blahblah .
emacsの ripgrep-regex
コマンドに反映するために下記の設定を追加した。
(setq ripgrep-arguments '("-M 100"))
test
イデアルの”I”
数学の講義中にイデアルの飾り文字がうまく書けない。latexで出力できるかをチェック。
\[ \mathscr{A} / \mathscr{I} := \{a + \mathscr{I}: a \in \mathscr{A} \} \]
\[ a + \mathscr{I} = b + \mathscr{I} \Longleftrightarrow b – a \in \mathscr{I} \]
組合せと順列の関係
プログラミングのオンラインジャッジで偶に組合せの問題が出てくる。
\[ P_n = {}_{n-1}C_1 \cdot {}_{n-2}C_1 \cdot \ldots \cdot {}_1C_1 = n! \]