私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
【叩かれて】Emacs Lisp道場【強くなれ】
emacs スレッド一覧へ / emacs とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 : ○
レスフィルター : (試験中)
>700
よっぽど悔しかったんだね
よっぽど悔しかったんだね
Perlのjoinにあたる関数ってないですか。今はこうしてます。
(defun join-string (s seq)
(reduce '(lambda (x y) (concat x s y)) seq))
(defun join-string (s seq)
(reduce '(lambda (x y) (concat x s y)) seq))
例えば
emacs yarou
hello emacs kun to lisp yarou
のようなラインがバッファ内にあったと仮定して、 M-x foo を実行すると
Line containing:
というプロンプトがミニバッファにでて、
emac li <RET>
と打ちこむと、 "emac" と "li" のサブストリングを含むライン (この場合は 2行目)
を occur などでマッチする関数 foo がほしいのですが。。。作って。。。
emacs yarou
hello emacs kun to lisp yarou
のようなラインがバッファ内にあったと仮定して、 M-x foo を実行すると
Line containing:
というプロンプトがミニバッファにでて、
emac li <RET>
と打ちこむと、 "emac" と "li" のサブストリングを含むライン (この場合は 2行目)
を occur などでマッチする関数 foo がほしいのですが。。。作って。。。
(defun foo(str)
"HG"
(interactive "sLine containing:")
(if (not (string= str "emacs li"))
(message "not found!")
(if (not (re-search-forward "emac.*li" nil t))
(message "not found!!")
(message "found!")
)))
"HG"
(interactive "sLine containing:")
(if (not (string= str "emacs li"))
(message "not found!")
(if (not (re-search-forward "emac.*li" nil t))
(message "not found!!")
(message "found!")
)))
ライブラリのリビジョンに応じて設定を変えたい場合なんかに便利かなと
(setq get-revision-number-line-limit 20)
;; 1.1.1.1 には対応してない
(defun get-revision-number (library)
(let* ((file (locate-library (concat library ".el")))
(buf-exists-p (get-file-buffer file))
(buf buf-exists-p)
rev)
(unless buf-exists-p
(setq buf (find-file-noselect file)))
(save-match-data
(with-current-buffer buf
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(let (search-limit)
(forward-line get-revision-number-line-limit)
(setq search-limit (point))
(goto-char (point-min))
(when (re-search-forward (concat "$Id: "
(regexp-quote (concat library ".el"))
",v " "\\([0-9]+\\.[0-9]+\\)" " ")
search-limit t)
(setq rev (string-to-number (match-string 1)))))))))
(unless buf-exists-p
(kill-buffer buf))
rev))
(setq get-revision-number-line-limit 20)
;; 1.1.1.1 には対応してない
(defun get-revision-number (library)
(let* ((file (locate-library (concat library ".el")))
(buf-exists-p (get-file-buffer file))
(buf buf-exists-p)
rev)
(unless buf-exists-p
(setq buf (find-file-noselect file)))
(save-match-data
(with-current-buffer buf
(save-excursion
(save-restriction
(widen)
(goto-char (point-min))
(let (search-limit)
(forward-line get-revision-number-line-limit)
(setq search-limit (point))
(goto-char (point-min))
(when (re-search-forward (concat "$Id: "
(regexp-quote (concat library ".el"))
",v " "\\([0-9]+\\.[0-9]+\\)" " ")
search-limit t)
(setq rev (string-to-number (match-string 1)))))))))
(unless buf-exists-p
(kill-buffer buf))
rev))
emacs-version
"22.0.50.1"
Diredのバッファ名のように、
mode-lineのcvsのリビジョンの部分だけ色を変えたいのですが、
(setq-default mode-line-format
`(" "
;;mw32-ime-mode-line-state-indicator
mode-line-mule-info mode-line-modified " "
mode-line-buffer-identification
(vc-mode ,(propertize vc-mode 'face '(:foreground "blue" :background "red")))
" " global-mode-string (-3 . "%p") " " "-%-"))
これを.emacsで評価すると、mode-lineでは.emacsのリビジョンが赤くなりますが、
別のバッファにうつっても.emacsのリビジョンが赤くなってしまいます。
着色しないときのようにファイル毎にそれぞれのリビジョンを表示するには、
どうしたら良いでしょうか?
"22.0.50.1"
Diredのバッファ名のように、
mode-lineのcvsのリビジョンの部分だけ色を変えたいのですが、
(setq-default mode-line-format
`(" "
;;mw32-ime-mode-line-state-indicator
mode-line-mule-info mode-line-modified " "
mode-line-buffer-identification
(vc-mode ,(propertize vc-mode 'face '(:foreground "blue" :background "red")))
" " global-mode-string (-3 . "%p") " " "-%-"))
これを.emacsで評価すると、mode-lineでは.emacsのリビジョンが赤くなりますが、
別のバッファにうつっても.emacsのリビジョンが赤くなってしまいます。
着色しないときのようにファイル毎にそれぞれのリビジョンを表示するには、
どうしたら良いでしょうか?
(setq-default mode-line-format
'(" "
;;mw32-ime-mode-line-state-indicator
mode-line-mule-info mode-line-modified " "
mode-line-buffer-identification
(vc-mode (:eval (propertize vc-mode 'face '(:foreground "blue" :background "red"))))
" " global-mode-string (-3 . "%p") " " "-%-"))
'(" "
;;mw32-ime-mode-line-state-indicator
mode-line-mule-info mode-line-modified " "
mode-line-buffer-identification
(vc-mode (:eval (propertize vc-mode 'face '(:foreground "blue" :background "red"))))
" " global-mode-string (-3 . "%p") " " "-%-"))
Vim の dircolors.vim みたいな ~/.dir_colors 編集用メジャーモードを作ったので晒してみます。
begin-base64 644 dircolors-mode.el.gz
H4sICJBGp0MAA2RpcmNvbG9ycy1tb2RlLmVsAK1Y0W7bNhR9z1cQ6oPlDfLk
8DoG4qBBazuNUccqHD/sQUChWHSmWZYySU4aYOi/DFCH/cMG7HFFCwzYZwx7
2/YBIyXbSUhfUwbmIBAl3nPu5Tk0KbPT6RA/SKZxGCeptYh91mAhsciF922c
EHFPZrzB/CALomvy/qsGj35bhh8cmD6bTZdpFi8kEuubOJ6TKAgPCDE2XSWf
6GoYvOM4u79hpCbuxd11Ei9vSM33Mq9eUs+8KZOJ74LQn3qJb4lODquZZkbM
Y14kEwSRT4xnZ/xj20a9Xhcl1AuuWy/ZScUT7+jdUZBtPy3lSdatgKZU+1Uc
+iTT40DC8cGyJAwiVgXc2rfKtpQtiG5ZkjLrNvBZXCEjtXdZBLb4M/QssliS
0bYtG72V5XAXi22r02UrC9130m1lkW2UahHVVGBp6XSpxHKk06USizxVFF2q
sIA8X6686fyJLlXUBeXL9Zil6nwBeb5ItVRzGmSnpVr+D5aq8wXk+aLoUolF
ni+KLpVY5Pmi6CKzbFm8V8uusmyvnuO4JoJranCA4ECDayG4lgbXRnDt3TiK
6EI1ulBEF6rRZbW0qrhDDY4iOKrBIT5QjQ8U8YFqfFgtkSruSIND/KMa/wDx
DzT+AeIfaPwDxD/Q+AeIf6DxDxD/QOMfIP6Bxj9A/AONf4D4B2v/MGB6H2Xe
O8sLgzQrlzjj7XuDNIhxZ9SJefpMNE+KphuJ9nO+1m15TX7M0zDwfLM4yqww
ns6tObu/ixM/XWV13RPXNSf98YXrft91hs6YX/uDV+eTl4MJbzpvJgNndOm6
ddd9LgpUmFYjJfyzphs544sXQ44+Gwz7/NIbCNbhYPRaMI7fnL8Y8cbF4PJy
MHpVhJ05/HLpdEVAzymKeDkUN93zoqCv+939Shj2zyZdpyeyj8VoVu3+qFe2
qnJ94bqNU9e9+3IVv/v9f41q7I04se3t8Zut6iGyiUQ2lUhAIkGJbCGRLSWy
jUS25UiKjIgqI6LIiKgyInqIRB4qkRSJpEokohJVVKKISlRRiR4hkUdKJKIn
VfQERE9Q9ARET1D0BERPUPQERE9Q9ARET1D0BERPUPQERE9Q9AREz/WSvG0V
VVfHXWvpwrtBDi04mndusMtIgvJf1AJV5dhEHH2YQZSxxJtmwa3YSviDeRCG
fLEPRbFeaPHiAu8qZKmgNZf8d3f5XFSoFl1SLLw5k+Ck9iAAL9tbhlnJmLLs
O6L2FWKLT6dDJk7POSb5p/yf/LcnuxHJP3/649d/879//pj/mH/88NOHP3/4
Jf/MI//Kfz99RFEztXuVkLv437GLkit2HUQRF9KKZ5Y48KjXN1n2yVFpK96a
bSNZkSLyFowYvXVe40HRhfC/nBDSi0MRkyyj4mQsJbWMvcsejspECvMmicXh
ior8Dy4122KlEwAA
====
begin-base64 644 dircolors-mode.el.gz
H4sICJBGp0MAA2RpcmNvbG9ycy1tb2RlLmVsAK1Y0W7bNhR9z1cQ6oPlDfLk
8DoG4qBBazuNUccqHD/sQUChWHSmWZYySU4aYOi/DFCH/cMG7HFFCwzYZwx7
2/YBIyXbSUhfUwbmIBAl3nPu5Tk0KbPT6RA/SKZxGCeptYh91mAhsciF922c
EHFPZrzB/CALomvy/qsGj35bhh8cmD6bTZdpFi8kEuubOJ6TKAgPCDE2XSWf
6GoYvOM4u79hpCbuxd11Ei9vSM33Mq9eUs+8KZOJ74LQn3qJb4lODquZZkbM
Y14kEwSRT4xnZ/xj20a9Xhcl1AuuWy/ZScUT7+jdUZBtPy3lSdatgKZU+1Uc
+iTT40DC8cGyJAwiVgXc2rfKtpQtiG5ZkjLrNvBZXCEjtXdZBLb4M/QssliS
0bYtG72V5XAXi22r02UrC9130m1lkW2UahHVVGBp6XSpxHKk06USizxVFF2q
sIA8X6686fyJLlXUBeXL9Zil6nwBeb5ItVRzGmSnpVr+D5aq8wXk+aLoUolF
ni+KLpVY5Pmi6CKzbFm8V8uusmyvnuO4JoJranCA4ECDayG4lgbXRnDt3TiK
6EI1ulBEF6rRZbW0qrhDDY4iOKrBIT5QjQ8U8YFqfFgtkSruSIND/KMa/wDx
DzT+AeIfaPwDxD/Q+AeIf6DxDxD/QOMfIP6Bxj9A/AONf4D4B2v/MGB6H2Xe
O8sLgzQrlzjj7XuDNIhxZ9SJefpMNE+KphuJ9nO+1m15TX7M0zDwfLM4yqww
ns6tObu/ixM/XWV13RPXNSf98YXrft91hs6YX/uDV+eTl4MJbzpvJgNndOm6
ddd9LgpUmFYjJfyzphs544sXQ44+Gwz7/NIbCNbhYPRaMI7fnL8Y8cbF4PJy
MHpVhJ05/HLpdEVAzymKeDkUN93zoqCv+939Shj2zyZdpyeyj8VoVu3+qFe2
qnJ94bqNU9e9+3IVv/v9f41q7I04se3t8Zut6iGyiUQ2lUhAIkGJbCGRLSWy
jUS25UiKjIgqI6LIiKgyInqIRB4qkRSJpEokohJVVKKISlRRiR4hkUdKJKIn
VfQERE9Q9ARET1D0BERPUPQERE9Q9ARET1D0BERPUPQERE9Q9AREz/WSvG0V
VVfHXWvpwrtBDi04mndusMtIgvJf1AJV5dhEHH2YQZSxxJtmwa3YSviDeRCG
fLEPRbFeaPHiAu8qZKmgNZf8d3f5XFSoFl1SLLw5k+Ck9iAAL9tbhlnJmLLs
O6L2FWKLT6dDJk7POSb5p/yf/LcnuxHJP3/649d/879//pj/mH/88NOHP3/4
Jf/MI//Kfz99RFEztXuVkLv437GLkit2HUQRF9KKZ5Y48KjXN1n2yVFpK96a
bSNZkSLyFowYvXVe40HRhfC/nBDSi0MRkyyj4mQsJbWMvcsejspECvMmicXh
ior8Dy4122KlEwAA
====
それで、いくつか作ってて疑問な点があったので聞いてみたいのですが
* 123行目で SYNTAX-ALIST 引数に dircolors-mode-syntax-alist を使うと
(直前でコメントアウトしてあるコードのことです)
font-lock が発動した際に型が違うと言われてしまうのですが、これは何故なんでしょうか?
* defface で face を定義した後、同名の変数を defvar する操作は必須ですか?
自分の環境では省略しても問題ないように見えるんですが、ネットで見掛けるコードでは
何故かわざわざ defface, defvar を並べて書いてるのでちょっと不安です。
必要なのであれば、その理由も教えて頂けるとうれしいです。
というかもしかして face と普通の変数ってスコープが違ったりしますか?
* 123行目で SYNTAX-ALIST 引数に dircolors-mode-syntax-alist を使うと
(直前でコメントアウトしてあるコードのことです)
font-lock が発動した際に型が違うと言われてしまうのですが、これは何故なんでしょうか?
* defface で face を定義した後、同名の変数を defvar する操作は必須ですか?
自分の環境では省略しても問題ないように見えるんですが、ネットで見掛けるコードでは
何故かわざわざ defface, defvar を並べて書いてるのでちょっと不安です。
必要なのであれば、その理由も教えて頂けるとうれしいです。
というかもしかして face と普通の変数ってスコープが違ったりしますか?
deffaceはfaceの定義、defvarは変数の定義
たとえば dired.elの
(defface dired-header '((t (:inherit font-lock-type-face))))
(defvar dired-header-face 'dired-header)
dired-headerという名前で定義したfaceを用意しておいて、
dired-header-faceに代入しておく。
実際にfaceを決定するところではdired-header-faceを使用する。
elispコード内でdired-headerを直接指定していたら、
もしもあとでdired-header-faceを変えたくなったときに、
dired-headerを上書きするかコードを書き変えないといけないけど、
変数を経由するようにしておけば、別のfaceを定義してその変数に代入してあげればいい。
そういう意味で、paren.elなんかはfaceを直接overlayしているので、
faceの色や字体を変えたいときは、set-face-x系を使って
faceの設定を上書きしてあげないといけないね。
たとえば dired.elの
(defface dired-header '((t (:inherit font-lock-type-face))))
(defvar dired-header-face 'dired-header)
dired-headerという名前で定義したfaceを用意しておいて、
dired-header-faceに代入しておく。
実際にfaceを決定するところではdired-header-faceを使用する。
elispコード内でdired-headerを直接指定していたら、
もしもあとでdired-header-faceを変えたくなったときに、
dired-headerを上書きするかコードを書き変えないといけないけど、
変数を経由するようにしておけば、別のfaceを定義してその変数に代入してあげればいい。
そういう意味で、paren.elなんかはfaceを直接overlayしているので、
faceの色や字体を変えたいときは、set-face-x系を使って
faceの設定を上書きしてあげないといけないね。
> そういう意味で、paren.elなんかはfaceを直接overlayしているので、
> faceの色や字体を変えたいときは、set-face-x系を使って
> faceの設定を上書きしてあげないといけないね。
それで何か不都合あんの?
> faceの色や字体を変えたいときは、set-face-x系を使って
> faceの設定を上書きしてあげないといけないね。
それで何か不都合あんの?
ほとんどの人は上書きしてしまって不都合ないと思いますよ。
起動後にfaceを変えるってあまりないですよね。
でもまぁ、setqでちょこちょこ変えたい人には箱があったほうがいいですし、
それくらいのレベルだと思います。
起動後にfaceを変えるってあまりないですよね。
でもまぁ、setqでちょこちょこ変えたい人には箱があったほうがいいですし、
それくらいのレベルだと思います。
はじめまして。Emacs LISPの勉強をしている高校生です(はじめたばかりです。すみません)。
カレントバッファに対して文字列の検索や置換をする関数は見つけられたのですが、
文字列そのものを引数にとるような同様の関数はありますでしょうか。
具体的には、ある入力文字列から、決められた文字を取り除きたいのです。
カレントバッファに対して文字列の検索や置換をする関数は見つけられたのですが、
文字列そのものを引数にとるような同様の関数はありますでしょうか。
具体的には、ある入力文字列から、決められた文字を取り除きたいのです。
replace-regexp-in-string とかでええのか?
または string-match して substring してみたり適当に
または string-match して substring してみたり適当に
time-stamp.elを使ってるとundoの時に不満ない?
timestamp部分はundoできなくなるけど、こんな事してみた。
(defadvice time-stamp-once (around cannot-be-undone activate)
(let ((buffer-undo-list t))
ad-do-it))
後から気付いたんだけど、redo.elを入れてたのをすっかり忘れてた。
ちゃんと使っていればそのような不満はあまり感じなかったかもしれない。
timestamp部分はundoできなくなるけど、こんな事してみた。
(defadvice time-stamp-once (around cannot-be-undone activate)
(let ((buffer-undo-list t))
ad-do-it))
後から気付いたんだけど、redo.elを入れてたのをすっかり忘れてた。
ちゃんと使っていればそのような不満はあまり感じなかったかもしれない。
>>735
Meadow meme だかに似たようなのがあったね。
Meadow meme だかに似たようなのがあったね。
行の中で最初の「空白/タブではない文字」にカーソルを移動したいんですが、どうすればいいですか?
>>739
see back-to-indentation
see back-to-indentation
>>740
ありがとう。助かりました。
ありがとう。助かりました。
>>738
734じゃないけど、mode-info は最新の CVS の Emacs だとコンパイルできない
ようです。過去にこのスレでパッチが出ていたんだけど、もう古くなっていま
した。。。最新のパッチがあれば投下して頂けないでしょうか?
734じゃないけど、mode-info は最新の CVS の Emacs だとコンパイルできない
ようです。過去にこのスレでパッチが出ていたんだけど、もう古くなっていま
した。。。最新のパッチがあれば投下して頂けないでしょうか?
url.el の使い方が分からない…。
(let ((url (url-generic-parse-url "http://www.example.org/")))
(url-retrieve url (lambda ()
(url-store-in-cache (current-buffer)))))
(let ((url (url-generic-parse-url "http://www.example.org/")))
(url-retrieve url (lambda ()
(url-store-in-cache (current-buffer)))))
途中送信してしまった…。
これでキャッシュの保存をしてくれるかと思ったけどしてくれなかった。
どうすればいいんだ???
これでキャッシュの保存をしてくれるかと思ったけどしてくれなかった。
どうすればいいんだ???
>>745
おまえの日本語も技術の途切れて壊滅状態だな。
おまえの日本語も技術の途切れて壊滅状態だな。
前へ 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
トップメニューへ / →のくす牧場書庫について