「Symbol's value as variable is void: browse-url-mosaic-program」
と表示されます。
使用環境はMac OS 10.14.6 Mojave Emacs 28.0.50
(Homwbrew でインストールしたHEAD ver.)
Emacs 27.1.50では問題なく起動しLaTeXも通常通り機能。
SKKの問題なく日本語変換を実行できています。
ver.28.0.50でもLaTeXは普通に機能します。
Errorの回避方法をお教えいただければ幸甚です。
Warning (initialization): An error occurred while loading ‘/Users/kuni7/.emacs.d/init.elc’:
Symbol's value as variable is void: browse-url-mosaic-program
To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file. Start Emacs with
the ‘--debug-init’ option to view a complete error backtrace. Disable showing Disable logging
直接にTeXでの相談ではないので申し訳ございません。
お知恵拝借できれば幸いです。若松拝
以前Emacs27 & 28 でErrorが出た件について。
相変わらずEmacs27.1 & 27.2 を起動するとミニバッファに
"Package cl is deprecated"が表示される。
Emacs @28では
"void: browse-url-mosaic-program"がミニバッファに表示される。
解決方法はearly-init.elの先頭に以下を記述する。
;;Package cl is deprecatedが出されないための対策
(setq byte-compile-warnings '(cl-functions))
;;Emacs @28用void: browse-url-mosaic-program対策
(setq browse-url-mosaic-program nil)
Emacs27で搭載された「early-init.el」を使い
該当部分の「設定」をしたら、Emacs 27 Emacs@28双方での
エラーを出されることなく通常の起動画面が表示される様に成りました。
以上ご報告まで。若松久仁光拝
お忙しいところすみません。
『xwidget』パッケージの機能を伴ったEmacs27.2を手にすることは
可能でしょうか?
https://oku.edu.mie-u.ac.jp/~okumura/macosx/m1.html
に書かれていた「Emacs 27 Homebrew 環境でソースからビルドする時、
「xwidget-url」パッケージも同時に使用できる『Emacs 27.2』にできないでしょうか?
其の為には、どの様な『手順』で『何を?書き込み』追記して、ビルドを実行していけば良いのでしょうか?
ご教授頂ければ幸甚です。若松久仁光拝
追伸
現在brew からのemacs-head @27、emacs-head@28、emacs-plus@27は
全て「--with-xwidgets」を付けてインストールしています。
Emacs27.2 で --with-xwidgets
これは奥村さんの手順で ./configure に --with-xwidgets を追加したけどうまくいかなかったということかしら?
このオプションを利用するにはgtk3 が入っていないとあるいはコンパイルやリンクで参照できないようになっていると、いくら configure で指定しても利用できません。
先ほど、奥村んさんの手順でやったけど gtk3 が入っているのに「gtk3]」はないよと言われてしまいました。
今調べてるけど、以下のように emacs-head@28 ではできているのでコンパイル・リンク環境の問題だとは思っていますが、以下の方法で解決しているなら調査をやめますのでお知らせ区dさい。
emacs-head@28 では --with-xwidget を有効か可能
brew (re)install emacs-head@28 で --with-xwidgets を追加し https://tsuu32.hatenablog.com/entry/2020/08/14/050000 にある例示の
M-x xwidget-webkit-browse-url
して、URLとして
https://gnu.org/software/emacs
で emacs のページが表示されます。
私の init.el の書き方が悪いのだと思いますが、emacs27系 と emacs28系 で共存できないので 27 系のテストは今回割愛。 共存させるなら emacs-major-version で制御すればいいんだけど ...
コンパイルの方法の手順のご教授有り難うございます。
奥村先生の手法での「別枠にEmacs」で「--with-xwidgets」を
付けてインストールできないかと思い質問をした次第です。
奥村さんの手順で ./configure に --with-xwidgets を追加するのが
今回の質問への「対策」という事でしたら、未だ挑戦しておりません。
以前brew install emacs-head@28 を使用してコンパイル実行したEmacs28は
「xwidget-url」でURLを指定してブラウズできています。
(emacs-head@28:ver.28.0.50_1です)
和田様の「emacs27系 と emacs28系 で共存できないので 27 系のテストは今回割愛。
共存させるなら emacs-major-version で制御すればいいんだけど ...」でのコメントですが、
27系と28系の分岐の制御の仕方もご教授願えれば幸甚です。
init-elにバージョン指定して27系と28系を「分岐」させようとしましたが、
上手く行きませんでした。若松久仁光拝
追伸
明日「 ./configure に --with-xwidgets を追加」してトライしてみます。
emacs 27 での --with-xwidgets の活性化
configure というのは configure.ac から生成されるのですが、27系 と 28系 の のこの関連の部分をみると以下のようになっているので、一生懸命 mac で有効になるよう活動された方がいらっしゃるようだけど現状 macOS の27 系のマスターブランチ系では同機能の活性化オプションは指定できない 。。。というのが、現時点での和田の見解です。先にお伝えした URL では 27 なのか 28 なのかがはっきりしません。また 27 系で --without-ns にしても回避できませんでした。
なので 27 系で 「 ./configure に --with-xwidgets を追加」 としても
configure: error: xwidgets requested but gtk3 not used.
となると思います。
27 ... --with-xwidgets が指定されていて window タイプ(mac で特に指定してなければ --with-ns になりwindow タイプだと和田は理解しています)であれば、問答無用で gtk3 がないよと言ってエラー
27 ... 判定条件は 27 と同じだけどエラーにはせず GTK 関連の設定を行う
lisp ファイルでの条件分け
ヒントは emacs-major-version です。
探したら当初のご質問と同じ回避策をしていましたね。emacs-minor-version は判定しなくてはいいけど、(and とその連合いの ) を外す必要はありまう。
(if (and (>= emacs-major-version 28) (>= emacs-minor-version 0))
(setq browse-url-mosaic-program nil))
うまくいかなかった 件ついて
これは、このフォーラムに質問する時と同様、できるだけ最低限のコードを示して質問してください。もちろん emacs に関する問い合わせ先でも同じ。
今回の場合は、修正する前と修正後の差分を提示していただくだけで良いかと思います。
ご存知だと思いますが以下のようなステップで差分を作成してアップしてください。
cp init.el init.el.orig
init.el にある機能をバージョンによって分岐するよう editor で修正
diff -u init.el.orig init.el
お忙しい中アドバイス有り難うございます。
本日「--with-xwidgets」を追記してコンパイルを実行しようと
思っていましたが、知識があやふや事に気付き、未だ
試せていません。
さてMac OSX10.14.6 Mojave 環境でのHomeBrewからの
./configure --prefix=/opt/homebrew --without-x
への「--with-xwidgets」を指定追記する場所ですが
今ひとつオプション追記について理解していないのですが?
今回の場合の「--with-xwidgets」を指定追記は
1. 単純に後方へ
./configure --prefix=/opt/homebrew --with-xwidgets
2. それとも「--prefix」の前につける?
./configure --with-xwidgets --prefix=/opt/homebrew
3. それとも「--without-x」は付けたままで
./configure --with-xwidgets --prefix=/opt/homebrew --without-x
4. 1~3の書き方は間違い??
初歩的な質問で申し訳ございません。
アドバイスのほど宜しくお願い致します。若松久仁光拝
追伸
別件の「init-elにバージョン指定して27系と28系を「分岐」させようとしましたが、
上手く行きませんでした。」につきましては、
現在ではEmacs27.2 Emacs@27.1 Emacs@28.0.50 及びEmacs-plus@27で
共通の「.emacs.d」ファイルから起動させて問題が出ていません。
がemacs-plus@28では共通の「.emacs.d」ファイルではエラーが
表示されます。
以前の試みは「.emacs.d」をEmacs version別に作成して分岐させるものです。
現在の「.emacs.d」> init.elではコメントアウトしています。
;(cond ((string-match "27.1.50" emacs-version) ;;; For emacs-snapshot
; (load "~/.emacs.d/init.el"))
; ((string-match "28.0.50" emacs-version) ;;; For Emacs28.0.50
; (load "~/.emacs28.d/init28.el"))
; ((string-match "26.0" emacs-version) ;;; For Emacs26
; (load "~/.emacs26.d/init.el"))
;)
;(when (> emacs-major-version 28)
;(defvar user-emacs-directory “~/.emacs28.d/”))
お詫び
またやってしまった。:- (if (and (>= emacs-major-version 28) (>= emacs-minor-version 0)) (setq browse-url-mosaic-program nil)) (add-to-list 'load-path "~/.spacemacs.d/anything-config/")
それと if の例を出しましたが cond でも when でも分岐可能です。
--with-xwidgets はどこに
- 時間を要しますが、configure だけでは システムを壊すようなことはないので ./configure --help を利用してどのように指定できるか試されて経験を積むことをお勧めします。
- configure は実行された環境・指定オプションによってコンパイルやリンクに必要なものが利用できるか否かを調べて生成ヘッダー情報や関連 Makefile を自動生成するためのものですから OS のバージョンより、今回であれば gtk+3 の include ヘッダーや リンクライブラリが揃っていいるかが重要です。
- この手のオプションはどこに指定しても良い
- ただし --without-xwidgets と併用時は 多分 後が優先(実験していませんが)
- tar+ball を展開するか /git clone を展開し ./autogem.sh 実行して作成される configure を利用して ./configure --help を利用してどのように指定できるか試してみてください
- --without-x のテストはしなくて良いと思います
- xquates などを利用して X11 アプリとして利用しないと思いますので
- どうしても CUI タイプにしたいというと --without-ns かな(これもテストしてないけど)
emacs-plus@28では共通の「.emacs.d」ファイルではエラー
昨夜書いた時、書き忘れていた。それと texlive な内容にはほど遠くなってしまった :-(
差分を示してと書いたのですが「症状」なども必要です。
例えば私の場合 28 系にしているので emacs 27.2 だと以下のものが 「*Warning*」バッファーに表示されます。
1 Warning (initialization): An error occurred while loading ‘/Users/i-wada/.emacs.d/init.el’:
2
3 Symbol's function definition is void: make-closure
4
5 To ensure normal operation, you should investigate and remove the
6 cause of the error in your initialization file. Start Emacs with
7 the ‘--debug-init’ option to view a complete error backtrace.
なので私の場合は make-closure について調べたり emacs を --debug-init つけてデバッグして行くわけです。--debug-init すると 「*Backtrace*」バッファーにどこでエラーになっているかの情報が表示されます。ですのでこの情報も場合によっては必要になります。
お忙しい中アドバイス有り難うございます。
本当にTeXLive等のTeXでの話題の相談内容から
大分それてしまっているので申し訳ございません。
早速トライ&エラーを実行してみます。
『emacs-plus@28では共通の「.emacs.d」ファイルではエラー』
の件ですが、余り深入りしたくなかったのでこのバージョンは
brew uninstall emacs-plus@28を実行して削除しています。
他のEmacs 27 & 28系では、殆ど問題もなく同一の「.emacs.d」で
LaTeXコンパイル、org-roamも含めて機能しています。
今の所Emacs 27 & 28系での『分岐設定』は逼迫してはおらず、
いずれ解決してみたい方法とでもご理解いただければ幸いです。
先ずはご報告方々。若松久仁光拝
追伸
唯一の問題は「tabbar.el」です。
現在のinit.elをbyte-compile-filesすると
===============
Compiling file /Users/kuni7/.emacs.d/init.el at Tue May 25 21:15:13 2021
Entering directory ‘/Users/kuni7/.emacs.d/’
init.el:418:39:Warning: function ‘find’ from cl package called at runtime
init.el:420:11:Warning: function ‘remove-if’ from cl package called at runtime
====の様なコメントが出されるので、回避したく思っておりますが。
init.elへの書き込みは以下の様なものです。
;; scratch buffer以外をまとめてタブに表示する
(setq tabbar-buffer-groups-function
(lambda (b) (list "All Buffers")))
(setq tabbar-buffer-list-function
(lambda ()
(remove-if
(lambda(buffer)
(unless (string-match (buffer-name buffer)
"\\(*scratch*\\|*Apropos*\\|*shell*\\|*eshell*\\|*Customize*\\)")
(find (aref (buffer-name buffer) 0) " *"))
)
(buffer-list))))
以上ご報告と今抱えている「.emacs.d > init.el」での他の問題点です。
CLを使うとよく出る警告
init.el:418:39:Warning: function ‘find’ from cl package called at runtime init.el:420:11:Warning: function ‘remove-if’ from cl package called at runtime
確か CL (common lisp) は Emacs Lisp の名前空間の標準なものではないのでユーザが定義するものと衝突を起こしやすい。それを避けるため Emacsにインストールされたパッケージは、実行時に実行時に "CL "をロードしてはならないというポリシーに違反しているので警告メッセージが出ているのだと思います。
(参考 https://web.archive.org/web/20141203143357/http://dto.github.io/notebook/require-cl.html#sec-8)
多くの場合は (require 'cl) しているので cl-lib にしろと言われることが多いですね。
(参考 https://stackoverflow.com/questions/5019724/in-emacs-what-does-this-error-mean-warning-cl-package-required-at-runtime/17144438)
対策案
とはいえ、別の回答もあるようです。今回は (setq tabbar-buffer-list-function ...) に問題があるので、この記述をした URL を思い出したり、以下を参考に書き換えるとかしてみてはいかがですか?
https://www.yokoweb.net/2017/03/17/emacs-tabbar/
なお 和田の emacs-head@28 では tabbar の拡張分を eval しても警告は出ませんでした
これから推測できるのは、418 420 行目で発生しているので、その上の設定との干渉によって起きている可能性も考えられます。
お忙しい中アドバイスや情報の提供、有り難うございます。
「--with-xwidgets」を指定してEmacs27.2への追記は、
「gtk+3 の include ヘッダーや リンクライブラリは揃っている」事を
確認し、且つ ./autogem.sh 実行して作成される configure を利用して
試みてみましたが矢張り、和田様のご指摘の様に
[ configure: error: xwidgets requested but gtk3 not used.]が最後に現れ、
次のステップの
make --->> sudo make install (小生の環境ではsudo付きで)まで
たどり着くことすら出来ませんでした。現在の小生の実力では
「太刀打ちできそうに有りません。」ので、(勉強を積み重ねてから)
改めて、このコンパイルへ挑戦したく思います。
従いまして今回の挑戦から撤退する事といたします。
LaTeX等で作成したファイルetc.の全体を把握したいので
「tabbar」に関しては引き続き問題点の「棚卸し」をして行きたく思っております。
『今回は (setq tabbar-buffer-list-function ...) に問題があるので』との
ご指摘もございましたので、その箇所の「参考サイト」etc
洗い出しをしております。目下手元のinit.elへの書き込み箇所と
『参考に書き換えるとかしてみてはいかがですか?』とサイト名も
いただいていた記述との、比較をDeltaWalker.appを使って実行
しています。何処を「省けば良いか?」思案中です。
末尾に成ってしまいましたが、何時も貴重な、アドバイスを
丁寧に説明くださります事、感謝申し上げます。若松久仁光拝
前回の投稿で「がemacs-plus@28では共通の「.emacs.d」ファイルでは
エラーが表示されます。」と報告していましたが、本日改めて
brew install emacs-plus@28 --with-xwidgets --with-modern-sexy-v1-icon
で実行しインストールした「emacs-plus@28」では
問題なく現行で共通使用の「.emacs.d」でエラーは表示は出されず、
xwidget-url機能も通常の様に使えました。ので、ここに訂正いたし、
記事としてアップさせていただきました。若松久仁光拝