Emacsは、freedesktop.orgのデスクトップ通知仕様をサポートするシステム、MS-Windows、Haiku、およびAndroidで通知を送信できます。
POSIXホストでこの機能を利用するには、EmacsがD-Busサポート付きでコンパイルされており、かつnotificationsライブラリがロードされている必要があります。D-Bus integration in EmacsのD-Busを参照してください。D-Busサポートが利用可能な場合、以下の関数がサポートされます:
この関数は、params 引数で指定されたパラメータからなる通知を D-Bus 経由でデスクトップに送信します。これらの引数は、キーワードと値のペアが交互に並ぶ形式である必要があります。サポートされているキーワードと値は以下の通りです。
:bus busD-Busバス。:session以外のバスを使用する場合にのみ、この引数が必要です。
:title title通知のタイトル。
:body text通知の本文。通知サーバーの実装によっては、本文に ‘"<b>bold text</b>"’ のようなHTMLマークアップ、ハイパーリンク、または画像が含まれる場合があります。特殊HTML文字は、‘"Contact <postmaster@localhost>!"’ のようにエンコードする必要があります。
:app-name name通知を送信するアプリケーションの名前。デフォルトは notifications-application-name です。
:replaces-id idこの通知が置き換える通知 id。id は、直前の notifications-notify 呼び出しの結果である必要があります。
:app-icon icon-file通知アイコンのファイル名。nil に設定すると、アイコンは表示されません。デフォルトは notifications-application-icon
です。値が文字列の場合、関数はそれをファイル名として解釈し、expand-file-name
を用いて絶対パスに変換します。値がシンボルの場合、関数はその名前を使用します(これはアイコン命名仕様 37 を使用する際に有用です)。
:actions (key title key title ...)適用するアクションの一覧。key と title はいずれも文字列です。デフォルトのアクション(通常は通知のクリックによって呼び出される)には、‘"default"’ という名前のキーが設定されている必要があります。タイトルは任意ですが、実装によっては表示しなくても構いません。
:timeout timeout通知が自動的に閉じるべきタイミング(通知表示時からの経過時間)(ミリ秒単位)。−1 の場合、通知の有効期限は通知サーバーの設定に依存し、通知の種類によって異なる場合があります。0 の場合、通知が期限切れになることはありません。デフォルト値は −1 です。
:urgency urgency緊急度。low、normal、またはcriticalのいずれかとなります。
:action-itemsこのキーワードが指定された場合、アクションの title 文字列はアイコン名として解釈されます。
:category categoryこの通知の種類は文字列です。標準的なカテゴリの一覧については、Desktop Notifications Specificationを参照してください。
:desktop-entry filenameこれは、‘"emacs"’のように、呼び出し元プログラムを表すデスクトップファイル名を指定します。
:image-data (width height rowstride has-alpha bits channels data)これは、幅、高さ、行ストライド、アルファチャンネルの有無、サンプルあたりのビット数、チャンネル数、および画像データをそれぞれ記述する生データ画像フォーマットです。
:image-path pathこれは、URI(現時点でサポートされているURIスキーマは‘file://’のみ)、または‘$XDG_DATA_DIRS/icons’以降のfreedesktop.org準拠のアイコンテーマにおける名称のいずれかで表されます。
:sound-file filename通知が表示された際に再生するサウンドファイルへのパス。
:sound-name namefreedesktop.orgのサウンド命名仕様における「$XDG_DATA_DIRS/sounds」という名前のテーマ設定可能なサウンドで、通知が表示された際に再生されます。アイコン名と同様ですが、サウンド専用のものです。例としては「"message-new-instant"」などが挙げられます。
:suppress-soundサーバーにその機能がある場合、一切のサウンド再生を抑制します。
:residentこの設定を行うと、アクションが呼び出された際にサーバーが自動的に通知を削除しなくなります。通知は、ユーザーまたは送信者によって明示的に削除されるまで、サーバー内に保持されます。このヒントは、サーバーが:persistence機能を備えている場合にのみ有用であると考えられます。
:transientこの設定を行うと、サーバーは通知を一時的なものとして扱い、永続化機能(もしあれば)をバイパスします。
:x position:y position通知が指し示す画面上のX, Y座標を指定します。両方の引数を必ず併用してください。
:on-action functionアクションが呼び出された際に実行する関数。アクションの通知 id と key が引数として関数に渡されます。
:on-close functionタイムアウトまたはユーザー操作によって通知が閉じられた際に呼び出される関数。この関数は、引数として通知 id と閉じ処理 reason を受け取ります:
expired 通知の有効期限が切れている場合
dismissed 通知がユーザーによって却下された場合
close-notification 通知が notifications-close-notification の呼び出しによって閉じられた場合
undefined 通知サーバーが理由を提示していない場合
通知サーバーが受け付けるパラメータは、notifications-get-capabilitiesで確認できます。
この関数は、通知ID(整数)を返します。このIDを使用して、別の notifications-notify 呼び出しの notifications-close-notification または :replaces-id 引数で通知アイテムを操作できます。例えば:
(defun my-on-action-function (id key)
(message "Message %d, key \"%s\" pressed" id key))
⇒ my-on-action-function
(defun my-on-close-function (id reason)
(message "Message %d, closed due to \"%s\"" id reason))
⇒ my-on-close-function
(notifications-notify
:title "Title"
:body "This is <b>important</b>."
:actions '("Confirm" "I agree" "Refuse" "I disagree")
:on-action 'my-on-action-function
:on-close 'my-on-close-function)
⇒ 22
A message window opens on the desktop. Press ``I agree''.
⇒ Message 22, key "Confirm" pressed
Message 22, closed due to "dismissed"
この関数は、識別子 id の通知を閉じます。bus には
D-Bus 接続を表す文字列を指定でき、デフォルトは :session です。
通知サーバーの機能(シンボルの一覧)を返します。bus は D-Bus
接続を示す文字列を指定でき、デフォルトは :session です。以下の機能が利用可能です:
:actionsサーバーは指定されたアクションをユーザーに提供します。
:body本文に対応しています。
:body-hyperlinksサーバーは通知内のハイパーリンクに対応しています。
:body-imagesサーバーは通知内の画像に対応しています。
:body-markup本文中のマークアップに対応しています。
:icon-multiサーバーは、指定された画像配列の全フレームをアニメーションとしてレンダリングします。
:icon-static任意の画像配列から、ちょうど1フレームを表示することをサポートします。この値は:icon-multiと排他的です。
:persistenceサーバーは通知の永続化に対応しています。
:soundサーバーは通知時のサウンドに対応しています。
ベンダー固有のその他の上限値は、:x-gnome-foo-capのように:x-vendorから始まります。
通知サーバー上の情報(文字列のリスト)を返します。bus は D-Bus
接続を示す文字列を指定でき、デフォルトは :session です。返されるリストは (name vendor version spec-version) です。
サーバーの製品名。
ベンダー名。例えば、‘"KDE"’、‘"GNOME"’。
サーバーのバージョン番号。
サーバーが準拠している仕様のバージョン。
spec_version が nil
である場合、サーバーは ‘"1.0"’
より前の仕様をサポートしています。
EmacsをMS-Windows上でGUIセッションとして動作させる際、ネイティブプリミティブを介してD-Bus通知機能のごく一部をサポートしています:
この関数は、paramsで指定されたMS-Windowsのトレイ通知を表示します。MS-Windowsのトレイ通知は、タスクバーの通知領域にあるアイコンからバルーン形式で表示されます。
valueは、後述のw32-notification-closeを用いて通知を削除する際に使用できる、通知の一意の整数IDです。関数が失敗した場合、戻り値はnilとなります。
引数 params
はキーワードと値のペアとして指定します。すべてのパラメータは省略可能ですが、パラメータが指定されない場合、関数は何も行わず nil を返します。
以下のパラメータがサポートされています。
:icon iconシステムトレイに icon を表示します。icon が文字列の場合、アイコンを読み込むファイル名を指定する必要があります。指定するファイルは .ico Windows アイコンファイルである必要があります。icon が文字列でない場合、またはこのパラメータが指定されていない場合は、標準の Emacs アイコンが使用されます。
:tip tip通知のツールチップには tip を指定してください。tip が文字列の場合、これは通知によって追加されたトレイアイコンにマウスポインタを合わせた際に表示されるツールチップのテキストとなります。tip が文字列でない場合、またはこのパラメータが指定されていない場合、デフォルトのツールチップテキストは ‘Emacs notification’ となります。ツールチップのテキストは最大127文字(W2Kより前のWindowsバージョンでは63文字)まで指定可能です。これより長い文字列は切り捨てられます。
:level level通知の重大度レベル。info、warning、またはerrorのいずれか。指定された場合、その値は通知タイトルの左側に表示されるアイコンを決定しますが、これは:titleパラメータ(後述)も指定されており、かつ文字列である場合に限ります。
:title title通知のタイトル。title が文字列の場合、本文の直上の大きなフォントで表示されます。タイトルのテキストは最大 63 文字まで指定でき、それより長い場合は切り捨てられます。
:body body通知の本文。body が文字列の場合、通知メッセージのテキストを指定します。テキストの改行方法を制御するには、改行文字を埋め込んでください。本文は最大255文字まで指定でき、それを超える場合は切り捨てられます。D-Busとは異なり、本文はマークアップのないプレーンテキストである必要があります。
なお、W2Kより前のバージョンのWindowsでは、:iconと:tipのみがサポートされている点にご注意ください。その他のパラメータも指定可能ですが、これらの旧システムでは無視されます。
各Emacsフレームにおいて、同時にアクティブな通知は最大1つまでです。同じフレームに新しい通知を表示するには、まずw32-notification-closeを呼び出してアクティブな通知を削除する必要があります。
タスクバーから通知とそのアイコンを削除するには、以下の関数を使用してください。
この関数は、一意の id で指定されたトレイ通知を削除します。通知作成時に選択されていたのと同じ Emacs フレームを、通知削除時にも選択しておく必要があります。通知を表示する Lisp プログラムは、どのフレームがどの通知 id に対応しているかを追跡し、通知削除時にそのフレームを選択する必要があります。(フレームが削除されると、そのフレームが作成した通知(もしあれば)は MS-Windows によって削除されます。)
EmacsをHaiku上でGUIプログラムとして動作させる際、前述のD-Busデスクトップ通知インターフェースの限定的な実装も提供されます。以下に詳述する機能に欠けている主な機能は、:actions、:on-action、:on-closeといったコールバック関数です。
この関数は、notifications-notify
で受け付けられるものと同様の複数のパラメータを指定して、デスクトップ通知サーバーに通知を送信します。パラメータは以下の通りです。
:title title:body body:replaces-id replaces-id:urgency urgencyこれらは、notifications-notify
への呼び出しで使用される場合と同じ意味を持ちます。
:app-icon app-iconこれは、表示される通知のアイコンとして使用する画像ファイルを指定するファイル名である必要があります。nil の場合、代わりに Emacs のアプリアイコンが表示されます。
戻り値は通知を識別する数値であり、これを後続の本関数呼び出しにおける:replaces-idパラメータとして利用できます。
EmacsをAndroidアプリケーションパッケージとしてビルドする場合、通知の表示はandroid-notifications-notify関数によって実現されます。この関数にはコールバック機能がなく、notifications-notifyと比較するといくつかの特有の仕様があります。
この関数はデスクトップ通知を表示します。params は、notifications-notify
の同名パラメータに相当するパラメータの一覧です。パラメータは以下の通りです。
:title title:body body:replaces-id replaces-id:on-action on-action:on-cancel on-close:actions actions:timeout timeout:resident residentこれらは、notifications-notify
への呼び出しで使用する場合と同じ意味を持ちますが、デフォルト以外のアクションは最大3つまでしか表示されない点が異なります。
:urgency urgencyurgency で許容される値のセットは notifications-notify と同様ですが、Android 7.1 以前を除き、定義された group で表示されるすべての通知に緊急度が適用されます。
:group groupgroup は、送信される通知が属するカテゴリを指定する文字列です。このカテゴリはシステムの通知設定メニュー内に表示されますが、Android 7.1 以前では無視されます。
group が nil であるか、または params 内に存在しない場合、文字列 ‘"Desktop Notifications"’ に置換されます。
Callers should provide one stable combination of urgency and group for each kind of notification they send, given that the system may elect to disregard urgency if it does not match that of any notification previously delivered to group.
:icon iconこのパラメータは、通知の表示に使用されるシンボルアイコンを制御します。値は、android.R.drawable
システムパッケージ内のアイコンを指定する文字列です。こうしたアイコンの一覧については、R.drawable
| Android Developers を参照してください。
params 内で指定されていないか、icon が存在しない場合は、デフォルトで ‘"ic_dialog_alert"’ となります。
通知を識別する数値を返します。この数値は、後続の本関数呼び出し時に :replaces-id
パラメータとして指定できます。
Android 13以降において、Emacsに通知の表示権限が付与されていない場合(The GNU Emacs ManualのAndroid Environmentを参照)、送信された通知はすべてサイレントに無視されます。