私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
【叩かれて】Emacs Lisp道場【強くなれ】
emacs スレッド一覧へ / emacs とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 : ○
レスフィルター : (試験中)
(define-key mode-specific-map "g"
(lambda ()
(interactive)
(forward-char)
(backward-char)))
(lambda ()
(interactive)
(forward-char)
(backward-char)))
どうも、解決しました。
(ここ結構人居るんですね)
other-windowを組み合わせようとしてたんですが、
これが引数とるのに気が付かなくて二重にはまってました。
M-xから呼ぶときは引数いらないのに...いまだに意味不明です。
(ここ結構人居るんですね)
other-windowを組み合わせようとしてたんですが、
これが引数とるのに気が付かなくて二重にはまってました。
M-xから呼ぶときは引数いらないのに...いまだに意味不明です。
(other-window ARG &optional ALL-FRAMES)
だから引数は必要。
M-x でいらない(ように見える)のは (interactive "p") で
(prefix-numeric-value current-prefix-arg) が渡されるから。
だから引数は必要。
M-x でいらない(ように見える)のは (interactive "p") で
(prefix-numeric-value current-prefix-arg) が渡されるから。
Lispはちょっと触った事あったんでいけるかと思ってたんですが、
Emacsの仕様もあって結構難しいですね。
ちょっと勉強してみます。
Emacsの仕様もあって結構難しいですね。
ちょっと勉強してみます。
(multibyte-string-p "a")
=> nil
(with-temp-buffer
(insert "a")
(multibyte-string-p (buffer-substring-no-properties (point-min) (point-max))))
=> t
HEAD でも 21.3 でもこうなるみたいなんだけどこーゆーもんなんすか?
=> nil
(with-temp-buffer
(insert "a")
(multibyte-string-p (buffer-substring-no-properties (point-min) (point-max))))
=> t
HEAD でも 21.3 でもこうなるみたいなんだけどこーゆーもんなんすか?
>>357
はい。
(with-temp-buffer
(set-buffer-multibyte nil)
(insert "a")
(multibyte-string-p (buffer-substring-no-properties (point-min) (point-max))))
=> nil
はい。
(with-temp-buffer
(set-buffer-multibyte nil)
(insert "a")
(multibyte-string-p (buffer-substring-no-properties (point-min) (point-max))))
=> nil
>>358
むむ、なるほど、どうもです。
じつは任意の buffer から substring してきた文字列に multibyte (とりあえ
ずは日本語) が含まれてるかどうかを判定したいんですが、そんな場合はどう
するのが常套手段なんでしょう。思い付いたのは↓なんですが
(with-temp-buffer
(insert "あ")
(goto-char (point-min))
(if (re-search-forward "\cj" (point-max) t)
"日本語あり"
"日本語なし"))
=> "日本語なし"
(´・ω・`)
むむ、なるほど、どうもです。
じつは任意の buffer から substring してきた文字列に multibyte (とりあえ
ずは日本語) が含まれてるかどうかを判定したいんですが、そんな場合はどう
するのが常套手段なんでしょう。思い付いたのは↓なんですが
(with-temp-buffer
(insert "あ")
(goto-char (point-min))
(if (re-search-forward "\cj" (point-max) t)
"日本語あり"
"日本語なし"))
=> "日本語なし"
(´・ω・`)
(find-charset-string "abc")
=> (ascii)
(find-charset-string "abcほげ")
=> (ascii japanese-jisx0208)
(let ((str "あ"))
(if (memq 'japanese-jisx0208 (find-charset-string str))
"日本語あり"
"日本語なし"))
=> "日本語あり"
=> (ascii)
(find-charset-string "abcほげ")
=> (ascii japanese-jisx0208)
(let ((str "あ"))
(if (memq 'japanese-jisx0208 (find-charset-string str))
"日本語あり"
"日本語なし"))
=> "日本語あり"
(re-search-forward "\\cj" (point-max) t)
Emacs21 なら
(re-search-forward "[[:nonascii:]]" (point-max) t)
が使えたはず。
Emacs21 なら
(re-search-forward "[[:nonascii:]]" (point-max) t)
が使えたはず。
Emacsのunibyte/multibyteってのはタダのバイト列として読むか
なんらかのエンコーディングで表現された文字として読むかってとこで生じる。
単に表現されたときに1バイトになるかってのは関係ない。
なんらかのエンコーディングで表現された文字として読むかってとこで生じる。
単に表現されたときに1バイトになるかってのは関係ない。
>>362
うそー、関係あるよ。
src/alloc.c:
Lisp_Object
make_string_from_bytes (contents, nchars, nbytes)
const char *contents;
int nchars, nbytes;
{
register Lisp_Object val;
val = make_uninit_multibyte_string (nchars, nbytes);
bcopy (contents, SDATA (val), nbytes);
if (SBYTES (val) == SCHARS (val))
STRING_SET_UNIBYTE (val);
return val;
}
文字列中の文字が全て1バイトになるかを思いっきり考慮してんじゃん。
うそー、関係あるよ。
src/alloc.c:
Lisp_Object
make_string_from_bytes (contents, nchars, nbytes)
const char *contents;
int nchars, nbytes;
{
register Lisp_Object val;
val = make_uninit_multibyte_string (nchars, nbytes);
bcopy (contents, SDATA (val), nbytes);
if (SBYTES (val) == SCHARS (val))
STRING_SET_UNIBYTE (val);
return val;
}
文字列中の文字が全て1バイトになるかを思いっきり考慮してんじゃん。
はいはい。それはmake_string_from_bytesだからでしょ。
それは考慮してるんじゃなくてunibyteにするかmutlibyteにするかっていう
判定材料に使ってるだけだよ。
その関数の使われるところがどういうところかも見れば自明だと思うんだけど。
それは考慮してるんじゃなくてunibyteにするかmutlibyteにするかっていう
判定材料に使ってるだけだよ。
その関数の使われるところがどういうところかも見れば自明だと思うんだけど。
>>364
はいはい。じゃあ
(multibyte-string-p (string 97)) => nil
(multibyte-string-p (string 53794)) => t
を説明してみ。
はいはい。じゃあ
(multibyte-string-p (string 97)) => nil
(multibyte-string-p (string 53794)) => t
を説明してみ。
アホだな。Fstringってmake_string_from_bytesを使ってる例でしかないじゃん。
それはインタフェースからしてmultibyteかどうかの情報が与えられないから、
multibyteかどうかを判定するのに文字の範囲から推定するしかできないからでしょ。
逆に例えば既にmultibyteである情報源から文字列を作るとき、
要するにmultibyte bufferからsubstringする場合なんかはいちいち
中身が1バイト文字だけかどうかなんて考慮しないよ。
まあソースコード読みなよ。
Emacsでのunibyte/multibyteの扱いってものについて学習してらっしゃい。
それはインタフェースからしてmultibyteかどうかの情報が与えられないから、
multibyteかどうかを判定するのに文字の範囲から推定するしかできないからでしょ。
逆に例えば既にmultibyteである情報源から文字列を作るとき、
要するにmultibyte bufferからsubstringする場合なんかはいちいち
中身が1バイト文字だけかどうかなんて考慮しないよ。
まあソースコード読みなよ。
Emacsでのunibyte/multibyteの扱いってものについて学習してらっしゃい。
>>362 の
> 単に表現されたときに1バイトになるかってのは関係ない。
に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
ると言ってるのに、SINGLE_BYTE_CHAR_P だけからなる文字列も multibyte に
なり得ると反論してもしょうがないだろうに。
> 単に表現されたときに1バイトになるかってのは関係ない。
に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
ると言ってるのに、SINGLE_BYTE_CHAR_P だけからなる文字列も multibyte に
なり得ると反論してもしょうがないだろうに。
> に対し、SINGLE_BYTE_CHAR_P でない文字を含む文字列は常に multibyte にな
> る
そこが問題なのか? 違うだろ。だって当たり前すぎるほど当たり前じゃん。
>>363はタダのバイト列として読むんじゃなくてEmacsの内部表現で表現された
文字列として読んでるんだから。
そこを問題にしているとしたら363の方こそナンセンス。
> る
そこが問題なのか? 違うだろ。だって当たり前すぎるほど当たり前じゃん。
>>363はタダのバイト列として読むんじゃなくてEmacsの内部表現で表現された
文字列として読んでるんだから。
そこを問題にしているとしたら363の方こそナンセンス。
Emacs の multibyte, unibyte まわりって確かにわかりずらいですよねー。
試しに unibyte な文字列中に "\\cj" で検索かけてみたんですけど、結果は nil なん
ですねぇ。当然と言えば当然ですが。
(string-match "\\cj" "あいうえお")
=> 0
(string-match "\\cj" (string-as-unibyte "あいうえお"))
=> nil
(find-charset-string "あいうえお")
=> (japanese-jisx0208)
(find-charset-string (string-as-unibyte "あいうえお"))
=> (eight-bit-graphic eight-bit-control)
coding-system の binary, raw-string とかとの関係も難しい・・・。
試しに unibyte な文字列中に "\\cj" で検索かけてみたんですけど、結果は nil なん
ですねぇ。当然と言えば当然ですが。
(string-match "\\cj" "あいうえお")
=> 0
(string-match "\\cj" (string-as-unibyte "あいうえお"))
=> nil
(find-charset-string "あいうえお")
=> (japanese-jisx0208)
(find-charset-string (string-as-unibyte "あいうえお"))
=> (eight-bit-graphic eight-bit-control)
coding-system の binary, raw-string とかとの関係も難しい・・・。
閑話休題。
iswitchb で migemo を使えるようにしてみたですよ。
(setq iswitchb-regexp t)
(setq iswitchb-use-migemo-p t)
(defadvice iswitchb-get-matched-buffers (before iswitchb-use-migemo activate)
"iswitchb で migemo を使ってみる。"
(when iswitchb-use-migemo-p
(ad-set-arg 0 (migemo-get-pattern (ad-get-arg 0)))))
iswitchb で migemo を使えるようにしてみたですよ。
(setq iswitchb-regexp t)
(setq iswitchb-use-migemo-p t)
(defadvice iswitchb-get-matched-buffers (before iswitchb-use-migemo activate)
"iswitchb で migemo を使ってみる。"
(when iswitchb-use-migemo-p
(ad-set-arg 0 (migemo-get-pattern (ad-get-arg 0)))))
昔の「自慢の.emacsを貼り付けよう」スレのように活気付く事を祈って。
dired とか ibuffer で色を付けて、長いファイル名があってもそれなりに見やすくしてみる。
まずは dired:
(defun dired-font-lock-information-matcher (limit)
"dired でまん中へんに色を付けてみる matcher。"
(when (dired-move-to-filename nil limit)
(let (end)
(backward-char)
(setq end (point-marker))
(progn (beginning-of-line)
(forward-sexp (if (looking-at dired-re-mark) 2 1))
(forward-char))
(store-match-data (list (point-marker) end)))
(forward-line)))
(font-lock-add-keywords
'dired-mode
'((dired-font-lock-information-matcher . font-lock-constant-face)))
dired とか ibuffer で色を付けて、長いファイル名があってもそれなりに見やすくしてみる。
まずは dired:
(defun dired-font-lock-information-matcher (limit)
"dired でまん中へんに色を付けてみる matcher。"
(when (dired-move-to-filename nil limit)
(let (end)
(backward-char)
(setq end (point-marker))
(progn (beginning-of-line)
(forward-sexp (if (looking-at dired-re-mark) 2 1))
(forward-char))
(store-match-data (list (point-marker) end)))
(forward-line)))
(font-lock-add-keywords
'dired-mode
'((dired-font-lock-information-matcher . font-lock-constant-face)))
んで ibuffer:
(setq ibuffer-fontify-information-field-list '(size mode))
(defadvice ibuffer-insert-buffers-and-marks (after ibuffer-fontify-information-field activate)
"ibuffer でまん中へんに色を付けてみる。"
(save-excursion
(ibuffer-goto-beg)
(while (not (eobp))
(let ((pos (point))
(limit (line-end-position)))
(while (and (setq pos (next-single-property-change pos 'ibuffer-field nil limit))
(< pos limit))
(goto-char pos)
(let ((buffer-read-only nil)
(field (get-text-property (point) 'ibuffer-field))
(beg pos))
(when (memq field ibuffer-fontify-information-field-list)
(setq pos (next-single-property-change pos 'ibuffer-field nil limit))
(goto-char pos)
(put-text-property beg pos
'face 'font-lock-constant-face)))))
(forward-line))))
dired-mode で、dircolors の色を使うようにすると派手でいいかもしれないとか思った。
(setq ibuffer-fontify-information-field-list '(size mode))
(defadvice ibuffer-insert-buffers-and-marks (after ibuffer-fontify-information-field activate)
"ibuffer でまん中へんに色を付けてみる。"
(save-excursion
(ibuffer-goto-beg)
(while (not (eobp))
(let ((pos (point))
(limit (line-end-position)))
(while (and (setq pos (next-single-property-change pos 'ibuffer-field nil limit))
(< pos limit))
(goto-char pos)
(let ((buffer-read-only nil)
(field (get-text-property (point) 'ibuffer-field))
(beg pos))
(when (memq field ibuffer-fontify-information-field-list)
(setq pos (next-single-property-change pos 'ibuffer-field nil limit))
(goto-char pos)
(put-text-property beg pos
'face 'font-lock-constant-face)))))
(forward-line))))
dired-mode で、dircolors の色を使うようにすると派手でいいかもしれないとか思った。
dircolors 使うやつができたっぽい。
(require 'dircolors)
(font-lock-add-keywords
'dired-mode
(mapcar (lambda (x)
(list
(format "\\(%s\\)$"
(mapconcat (lambda (ext)
(if (stringp ext)
(format "\\.%s" ext)
(format ".*%s.*" (cadr ext))))
(car x)
"\\|"))
`(".+" (dired-move-to-filename) nil (0 ',(cadr x)))))
dircolors-extension))
(require 'dircolors)
(font-lock-add-keywords
'dired-mode
(mapcar (lambda (x)
(list
(format "\\(%s\\)$"
(mapconcat (lambda (ext)
(if (stringp ext)
(format "\\.%s" ext)
(format ".*%s.*" (cadr ext))))
(car x)
"\\|"))
`(".+" (dired-move-to-filename) nil (0 ',(cadr x)))))
dircolors-extension))
(defadvice next-error (after next-error-plus-alpha activate)
(insert "OMOITSUKANAI"))
定義してgrep+next-error実行しても, OMOITSUKANAIがバッファに挿入され
ないのはどうしてなのだろうか
(insert "OMOITSUKANAI"))
定義してgrep+next-error実行しても, OMOITSUKANAIがバッファに挿入され
ないのはどうしてなのだろうか
>>379 with-current-buffer 以後でも insert を可能にする方法は何
かありますか?
かありますか?
>>380
with-current-buffer
with-current-buffer
>>381
(defadvice next-error (after next-error-plus-alpha activate)
(with-current-buffer next-error-last-buffer
(insert "OMOITSUKANAI")))
なりませんけど・・・?
(defadvice next-error (after next-error-plus-alpha activate)
(with-current-buffer next-error-last-buffer
(insert "OMOITSUKANAI")))
なりませんけど・・・?
>>383
その中に入れても結局なりませんでした。。。
その中に入れても結局なりませんでした。。。
>>385
書き込みしたいのは、次のエラー箇所が見つかったファイル (この場合はマッチするファイル)に
なので、 *grep* バッファ上でではありません。。
`next-error-last-buffer' がそのファイルじゃないのですか?
書き込みしたいのは、次のエラー箇所が見つかったファイル (この場合はマッチするファイル)に
なので、 *grep* バッファ上でではありません。。
`next-error-last-buffer' がそのファイルじゃないのですか?
試してみると
next-error-last-buffer's value is #<buffer *grep*>
ってなるから違うみたい
next-error-last-buffer's value is #<buffer *grep*>
ってなるから違うみたい
emacs 21.4 を使っています。
カーソル配下のtextのface取得方法が解からないので、教えてください。
やりたいことは、特定の単語の色の変更では無く、
その単語の所属するキーワードグループまるごと色を変更したい為、
カーソル配下の単語から、faceを特定したいということです。
お願いします。
カーソル配下のtextのface取得方法が解からないので、教えてください。
やりたいことは、特定の単語の色の変更では無く、
その単語の所属するキーワードグループまるごと色を変更したい為、
カーソル配下の単語から、faceを特定したいということです。
お願いします。
Emacs には「グラフ」データ構造の library がないように思えます。
ここでプログラムしてみちゃってください。
ここでプログラムしてみちゃってください。
>>392
ここでよくない? こういうプログラミング練習の為にこのスレッドがあるんじゃないの?
ここでよくない? こういうプログラミング練習の為にこのスレッドがあるんじゃないの?
「ハッカーと画家」に
car, cdr, cons, quote, cond, atom, eq
だけで Lisp の関数は書けるとかって書いてあった。
四則演算はどうやってやるんだ?
car, cdr, cons, quote, cond, atom, eq
だけで Lisp の関数は書けるとかって書いてあった。
四則演算はどうやってやるんだ?
(t) => 1、(t t) => 2、(t t t) => 3
のように表わすことにして
(defun plus (x y)
(cond (y (plus (cons (car y) x) (cdr y)))
(t x)))
(plus '(t t t) '(t t))
=> (t t t t t)
足し算ができれば後はどうとでも。
のように表わすことにして
(defun plus (x y)
(cond (y (plus (cons (car y) x) (cdr y)))
(t x)))
(plus '(t t t) '(t t))
=> (t t t t t)
足し算ができれば後はどうとでも。
398 は効率悪すぎだから (t) => 1、(nil t) => 2、(t t) => 3 と
little endian な 2 進表記にして
(defun plus (x y &optional c)
(cond ((cond ((eq x nil) (eq y nil)))
(cond (c (cons c nil))))
((car x)
(cond ((car y)
(cons c (plus (cdr x) (cdr y) t)))
((cons (not c) (plus (cdr x) (cdr y) c)))))
((car y)
(cons (not c) (plus (cdr x) (cdr y) c)))
((cons c (plus (cdr x) (cdr y) nil)))))
(defun mul (x y)
(cond ((eq y nil) nil)
((plus (cond ((car y) x))
(mul (cons nil x)
(cdr y))))))
(plus '(t t nil t) '(t nil t)) ; 11 + 5
=> (nil nil nil nil t) ; 16
(mul '(t t nil t) '(t nil t)) ; 11 * 5
=> (t t t nil t t) ; 55
little endian な 2 進表記にして
(defun plus (x y &optional c)
(cond ((cond ((eq x nil) (eq y nil)))
(cond (c (cons c nil))))
((car x)
(cond ((car y)
(cons c (plus (cdr x) (cdr y) t)))
((cons (not c) (plus (cdr x) (cdr y) c)))))
((car y)
(cons (not c) (plus (cdr x) (cdr y) c)))
((cons c (plus (cdr x) (cdr y) nil)))))
(defun mul (x y)
(cond ((eq y nil) nil)
((plus (cond ((car y) x))
(mul (cons nil x)
(cdr y))))))
(plus '(t t nil t) '(t nil t)) ; 11 + 5
=> (nil nil nil nil t) ; 16
(mul '(t t nil t) '(t nil t)) ; 11 * 5
=> (t t t nil t t) ; 55
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs スレッド一覧へ
みんなの評価 : ○類似してるかもしれないスレッド
- 【熱く】お前のEmacsにはまった理由【語れ】 (577) - [36%] - 2021/8/28 17:30 ○
- 「Emacsは消滅すべき」、ゴスリング氏 (127) - [17%] - 2023/1/12 15:45
トップメニューへ / →のくす牧場書庫について