KDE上下文選單的動態修改

2021-08-24 21:03:59 字數 4839 閱讀 9946

kde

上下文選單的動態修改

write by 九天雁翎(jtianling) -- blog.csdn.net/vagrxie

討論新聞組及檔案

事實上靜態改變kde

上下文選單網上還有些資料(以e

文為主),但是動態改變的我連e

文的資料都沒有看到,純靠自己看**摸索了。行文會比較亂,但是需要的人應該能找到自己所要的東西。文中複雜的行解釋時會與kde

源**相對應,以做備查。本文操作環境是kubuntu9.04

kde中的上下文選單是以.desktop

形式的配置檔案方式來管理的。此配置檔案強大到甚至支援多語言-_-!牛吧

首先檢視系統中此配置檔案所在的位置。通過kde4-config –path services

命令來檢視,下面是我機器中執行的例子:

jtianling@jtianling-laptop:~$ kde4-config --path services

/home/jtianling/.kde/share/kde4/services/:/usr/share/kde4/services/

即有kde4 services

配置的地方分別在/home/jtianling/.kde/share/kde4/services/

這個個人的目錄和/usr/share/kde4/services/

這個改變全域性配置的目錄。這點符合linux

的習慣,在沒有root

許可權或者僅僅想改變自己的操作習慣時,在自己的home

目錄下就能改變自己的配置,有root

許可權並且想改變所有使用者的配置時,去/usr

下面改。此處如是,這裡全部以修改全域性的為例。想嘗試的推薦首先備份。

首先進入services

目錄下的servicemenus

這個與上下文選單相關的配置目錄中去。

我們從乙個簡單的例子開始,下面是kubuntu 9.04

中自帶的乙個簡單選單項,類似於windows

下常用的command prompt here

和cygwin

的bash prompt here

,作用是在當前資料夾位置開啟乙個konsole

。對應的檔案是konsolehere.desktop:

[desktop entry]

type=service

x-kde-servicetypes=konqpopupmenu/plugin,inode/directory

actions=openterminalhere;

x-kde-authorizeaction=shell_access

[desktop action openterminalhere]

name=open terminal here

………name[zh_cn]

=在此開啟終端

name[zh_tw]

=在這裡開啟終端機

icon=utilities-terminal

exec=konsole --workdir %f

x-ubuntu-gettext-domain=desktop_kdebase

乙個乙個解釋一下:

配置的方式就與普通的ini

檔案類似,

用於分段,***=yyy

用於配置。這裡解釋一下配置選項。

type=

service

grep –r –e 『type=s』 * wc –l

一共有822個service,但是

grep –r –e 『type=^s』

乙個也沒有,所以,直接將此行預設存在就完了。

x-kde-servicetypes=

konqpopupmenu/plugin,inode/directory

還是參考一有說明,konqpopupmenu/plugin

表示是konqueror

的外掛程式,inode/directory

表示在指定目錄或目錄中的時候也有效。

還可以用all/all

,all/allfiles

表示所有檔案,以逗號分隔。

actions=

openterminalhere;

標明動作,由接下來的[desktop action openterminalhere]

分段具體說明

x-kde-authorizeaction=

shell_access

很明顯,所要的許可權,此處為shell_access

[desktop action openterminalhere]

新的分節,後面的openterminalhere與前面定義的動作一致,整個分節是對此動作的乙個詳細說明。

name=

open terminal here

說明顯示的選單的名字,通過name[zh_cn]

這樣的形式支援多語言版本

icon=

utilities-terminal

指定圖示

exec=

konsole --workdir %f

指定選單命令

上述的東西都不是關鍵,也不算什麼難點,下面真的好戲登場了。

這在kde

中算是新鮮課題,一則少有人知,甚至沒有找到e

文資料,二則我看到在kde

的changelog

中竟然提到kdesvn

的作者發現了其中有一些問題。(見

)說明平時用的人估計也少。要不是有kdesvn

作者走在前面,我連看源**的頭緒都沒有,向rajko albrecht

致敬。

下面是kdesvn

的配置片段:

[desktop entry]

type=service

servicetypes=konqpopupmenu/plugin,inode/directory,all/all,all/allfiles

x-kde-submenu=subversion (kdesvn)

x-kde-getactionmenu=org.kde.kded /modules/kdesvnd org.kde.kdesvnd getactionmenu

actions=log;info;add;addnew;delete;revert;rename;import;checkout;switch;merge;blame;createpatch;export;diff;update;commit;checkoutto;exportto;tree;

其他的都好說了,主要的問題在x-kde-getactionmenu=org.kde.kded /modules/kdesvnd org.kde.kdesvnd getactionmenu

一句,kdesvn

也就是靠此句實現了動態的上下文選單。

從應用上看,對於非svn

工程的目錄,在平時顯示的是checkout from a repository

和export from a subversion repository

,而actions

裡面也有,而actions

裡面還有當目標的確是乙個svn

工程的目錄時的一大堆選項。說明事實上選項是通過某個函式進行篩選然後顯示的。看上面的配置,很顯然是x-kde-getactionmenu

配置的getactionmenu

函式(從命名上猜的),通過關鍵字,我定位到了關鍵的kde

源**:

kdelibs/kio/kio/kdesktopfileactions.cpp:219開始

qlistkdesktopfileactions::userdefinedservices(constkservice& service,boolblocalfiles,constkurl::list & file_list )

else

原始碼可以看出,其一,我們分析配置檔案沒有錯誤,此行的確是關鍵,其二,獲取具體字串的方式利用了d-bus

這個程序間通訊手段遠端呼叫了getactionmenu

這個函式,然後獲取到了乙個字串list

,此list

就是我們最後看到的選單項。至此,一切問題已經得到解決,動態選單的關鍵就是以x-kde-getactionmenu

配置然後通過d-bus

呼叫函式。d-bus

作為linux

下非常流行的程序間通訊手段就遠沒有kde

動態選單這麼神秘了,資料豐富的多,需要的就自己去查閱吧。

1.kde tech base

,konqueror service menu

write by

九天雁翎

(jtianling) -- blog.csdn.net/vagrxie

ContextMenu上下文選單

上下文選單一般是真針對listview 多條資料的操作 需求 在listview中顯示聯絡歷史的 號碼,長按顯示的上下文選單為複製號碼到撥號盤 傳送資訊 複製號碼,與之相對應的事件。布局 1 linearlayout xmlns android 2android layout width match...

建立以及響應選單 上下文選單

建立選單 override oncreateoptionmenu menu menu,menuinflater inflater 用引數inflater的inflate方法,把menu檔案的資源傳入menu中,該選單指的是位於工具欄的選單。響應選單 override onoprionsitemsel...

Android上下文選單,長按出現的選單

1.定義上下文選單資源 在menu目錄下建立list item context.xml xmlns android android id id action delete android icon android drawable ic menu delete android showasactio...