strings 20170307.1533(in MELPA)
Miscellaneous string functions.

概要

strings.el は昔からある
文字列関数ライブラリです。

以下の関数が用意されています。

他のライブラリで使われている関数で
汎用的なものも取り込んでいます。

  • ordinal-suffix (n)
  • pick-some-words (pos direction limit)
  • region-description (width &optional prefix suffix begin end)
  • current-d-m-y-string ()
  • current-line-string (&optional buffer)
  • display-lines-containing (buffer string &optional flush-p)
  • word-before-point ()
  • symbol-name-before-point ()
  • echo-in-buffer (buffer-name string &optional force-display-p)
  • set-minibuffer-empty-p (flag)
  • minibuffer-empty-p ()
  • erase-nonempty-inactive-minibuffer ()
  • erase-inactive-minibuffer ()
  • fill-string (string &optional justify nosqueeze to-eop)
  • string-w-face (arg)
  • concat-w-faces (&rest arguments)
  • insert-in-minibuffer (&rest arguments)
  • buffer-alist (&optional nospacep)
  • read-any-variable (prompt &optional default-value)
  • frame-alist ()

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてstringsを使う方は
以下のコマンドを実行します。

M-x package-install strings

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name strings

empty-name-p (name)

empty-name-p は空文字列か
nilのときに t を返します。

(empty-name-p "nonempty")               ; => nil
(empty-name-p "")                       ; => t
(empty-name-p nil)                      ; => t

non-empty-name-p (name)

non-empty-name-p は空文字列か
nilのときに nil を返します。

文字列に対しては文字列そのものを返します。

(non-empty-name-p "nonempty")               ; => "nonempty"
(non-empty-name-p "")                       ; => nil
(non-empty-name-p nil)                      ; => nil

ordinal-suffix (n)

ordinal-suffix は数に対して序数を返します。

(ordinal-suffix 0)                      ; => "th"
(ordinal-suffix 1)                      ; => "st"
(ordinal-suffix 2)                      ; => "nd"
(ordinal-suffix 3)                      ; => "rd"
(ordinal-suffix 4)                      ; => "th"
(ordinal-suffix 11)                     ; => "th"
(ordinal-suffix 12)                     ; => "th"
(ordinal-suffix 13)                     ; => "th"
(ordinal-suffix 1021)                   ; => "st"
(ordinal-suffix 1022)                   ; => "nd"
(ordinal-suffix 1023)                   ; => "rd"

pick-some-words (pos direction limit)

pick-some-words
バッファ位置 pos
最大文字数 limit に到達するまで
単語を読み込みます。

カーソル位置は移動しません。

カーソル位置の単語が
limit よりも長い場合は
limit 文字の部分文字列を返します。

(defun test-pick-some-words (before-string after-string direction limit)
  "pick-some-wordsのテスト関数。

一時バッファでカーソル位置をBEFORE-STRINGとAFTER-STRINGの間に置き、
その位置でpick-some-words関数を呼び出す"
  (with-temp-buffer
    (insert before-string)
    (save-excursion (insert after-string))
    (pick-some-words (point) direction limit)))
;;;; カーソル位置は[a b c]と[pick some words]の間にある
;; DIRECTIONがnilのときは前方を見る
(test-pick-some-words "a b c" "pick some words" nil 1)  ; => "p"
(test-pick-some-words "a b c" "pick some words" nil 4)  ; => "pick"
(test-pick-some-words "a b c" "pick some words" nil 5)  ; => "pick"
(test-pick-some-words "a b c" "pick some words" nil 9)  ; => "pick some"
(test-pick-some-words "a b c" "pick some words" nil 99) ; => "pick some words"
;; DIRECTIONがtのときは後方を見る
(test-pick-some-words "a b c" "pick some words" t 1)    ; => "c"
(test-pick-some-words "a b c" "pick some words" t 3)    ; => "b c"
(test-pick-some-words "a b c" "pick some words" t 9)    ; => "a b c"

region-description (width &optional prefix suffix begin end)

region-description
begin から end までのregionを
width (>= 20)文字になるよう短縮表記します。

beginend がnilのときはregionを取得します。

prefixsuffix は「"」がデフォルトです。

(defun test-region-description (width &optional prefix suffix)
  (with-temp-buffer
    (insert "This is a temporary buffer.")
    (region-description width prefix suffix (point-min) (point-max))))
(test-region-description 20 "\"" "\"")
;; => "\"T   ...   .\"     (27 chars)"
(test-region-description 22 "\"" "\"")
;; => "\"Th   ...   r.\"     (27 chars)"
(test-region-description 25 "\"" "\"")
;; => "\"This   ...   fer.\"     (27 chars)"
(test-region-description 30 "\"" "\"")
;; => "\"This is a temporary buffer.\""
(test-region-description 50 "\"" "\"")
;; => "\"This is a temporary buffer.\""

current-d-m-y-string ()

current-d-m-y-string
現在の日付を「dd-mon-year」の表記で返します。

(current-d-m-y-string)                  ; => "9-Feb-2017"

current-line-string (&optional buffer)

current-line-string
カーソル位置の現在行の内容を
改行抜きの文字列で返します。

buffer が与えられた場合は
そのバッファが対象となります。

(with-temp-buffer
  ;; [abc]と[def]の間にカーソルがある場合
  (insert "abc")
  (save-excursion (insert "def\n"))
  (current-line-string))                ; => "abcdef"

display-lines-containing (buffer string &optional flush-p)

M-x display-lines-containing
M-x occur に似たコマンドです。

カレントバッファにおいて
文字列を含む行を*Lines Containing*バッファに
書き出して表示します。

C-u をつけた場合は
文字列を含まない行を表示します。

Lispプログラムから呼ぶ場合は、

  • buffer に出力バッファ
  • flush-p がnilのときは string を含む行、tのときは含まない行

を出力します。

word-before-point ()

word-before-point は、
カーソル位置、または
直前の単語を文字列で得ます。

(defun test-word-at-point (before after)
  "カーソル位置の前の文字列BEFORE、後の文字列AFTERを設定して word-at-pointを呼び出す"
  (with-temp-buffer
    (insert before)
    (save-excursion (insert after))
    (word-at-point)))
(test-word-at-point "find" " file")     ; => "find"
(test-word-at-point "find " "file")     ; => "file"
(test-word-at-point "find fi" "le")     ; => "file"

symbol-name-before-point ()

symbol-name-before-point は、
カーソル位置、または
直前のシンボルを文字列で得ます。

(defun test-symbol-name-at-point (before after)
  "カーソル位置の前の文字列BEFORE、後の文字列AFTERを設定して symbol-name-at-pointを呼び出す"
  (with-temp-buffer
    (emacs-lisp-mode)
    (insert before)
    (save-excursion (insert after))
    (symbol-name-at-point)))
(test-symbol-name-at-point "defun" " find-file")     ; => nil
(test-symbol-name-at-point "defun " "find-file")     ; => "find-file"
(test-symbol-name-at-point "defun find-" "file")     ; => "find-file"

echo-in-buffer (buffer-name string &optional force-display-p)

echo-in-buffer
バッファ buffer-name の末尾に、
文字列 string を書き込みます。

force-display-p がtのときは、
最後尾を表示します。

バッファが存在しない場合は作成します。

set-minibuffer-empty-p (flag)

set-minibuffer-empty-p
ミニバッファの内容が空であることを宣言します。

minibuffer-empty-p ()

minibuffer-empty-p
ミニバッファが空であるかどうかを判定します。

erase-nonempty-inactive-minibuffer ()

erase-nonempty-inactive-minibuffer
非アクティブで空ではないミニバッファを空にします。

入力のたびに設定したけば、
次の設定を加えます。

(add-hook 'pre-command-hook 'erase-nonempty-inactive-minibuffer)

erase-inactive-minibuffer ()

erase-inactive-minibuffer
非アクティブなミニバッファを空にします。

入力のたびに設定したけば、
次の設定を加えます。

ただし、こちらの方はやや重いです。

(add-hook 'pre-command-hook 'erase-inactive-minibuffer)

fill-string (string &rest ignore)

fill-stringfill-region
字詰めした文字列を返します。

(let ((fill-column 10))
  (fill-string "あいうえおかきくけこさしすせそ"))
;;; => "あいうえお
;;;    かきくけこ
;;;    さしすせそ"

string-w-face (arg)

string-w-face(FACE STRING)
与えられた引数に対して face を付加します。

普通に propertize を使いましょう。

;;; 両者は等価
(string-w-face '(org-level-1 "hoge"))   
(propertize "hoge" 'face 'org-level-1)

concat-w-faces (&rest arguments)

concat-w-faces
arguments 各々に対して
string-w-face を呼び出します。

普通に concatpropertize を使いましょう。

insert-in-minibuffer (&rest arguments)

insert-in-minibuffer
ミニバッファに各 arguments を書き込みます。

内部で string-w-faces が呼び出されていますので、
(FACE STRING) も受け付けます。

buffer-alist (&optional nospacep)

buffer-alist
(バッファ名 . バッファオブジェクト)
の連想リストを返します。

nospacep がtならば
隠しバッファを除きます。

read-any-variable (prompt &optional default-value)

read-any-variable
read-variable の亜種で、
全ての変数を対象に
変数名をミニバッファから読み込みます。

標準関数 read-variable
ユーザオプションのみが対象です。

frame-alist ()

frame-alist
(フレーム名 . フレームオブジェクト)
の連想リストを返します。

標準関数の make-frame-names-alist と同様ですが、
frame-alist が返すフレーム名は
逆アルファベット順にソートされます。


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。