精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用Python擴展和延伸Nautilus

系統(tǒng) Linux
如何使用 Python 為 GNOME 桌面、screenlets 架構(gòu)以及 Nautilus 創(chuàng)建腳本,來交付高生產(chǎn)能力的環(huán)境?桌面腳本實現(xiàn)拖放功能,以及快速訪問常用信息與服務的功能。本文將介紹如何使用 Python 來增加功能,從而實現(xiàn)對桌面 Nautilus 的擴展。

 如何使用 Python 為 GNOME 桌面、screenlets 架構(gòu)以及 Nautilus 創(chuàng)建腳本,來交付高生產(chǎn)能力的環(huán)境?桌面腳本實現(xiàn)拖放功能,以及快速訪問常用信息與服務的功能。本文將介紹如何使用 Python 來增加功能,從而實現(xiàn)對桌面 Nautilus 的擴展。

對于 GNOME 桌面用戶來說,Nautilus 編程可能是更比較常用的應用程序之一。它能夠通過簡單的圖形界面,來處理所有的文件復制、移動、重命名、以及搜索的問題。從表面上看,似乎不存在 Nautilus 不能處理的文件相關(guān)事務 — 除非考慮執(zhí)行具有 shell 腳本的任務。

Nautilus 開發(fā)工具提供了多個不必打開主代碼庫而增加新功能的方法。最簡單的方法是使用能執(zhí)行那些通常在終端提示符上執(zhí)行的命令的 bash 或者 bash 腳本。該方法使得嘗試使用這一命令來確保他們完成想要首先完成的任務。還可以采用其他語言,包括 C 腳本語言、GnomeBasic、Perl、以及 Python。本文介紹如何利用 Python 語言來為 Nautilus 增加新功能。假定讀者已對 Python 語言及 Python 標準庫有所了解。

Nautilus 腳本

擴展 Nautilus 的第一個方法是通過在 /home 中發(fā)現(xiàn)的名為 .gnome2/nautilus-scripts 的特定目錄。當在 Scripts 菜單下的文件或者文件夾上點擊鼠標右鍵時,該目錄下所有可執(zhí)行文件將會出現(xiàn)。還可以選擇多個文件或者文件夾,并采用相同的右擊方法,將文件清單傳遞給腳本。

當調(diào)用腳本時,Nautilus 支持多個包含當前目錄以及所選文件等內(nèi)容的環(huán)境變量。表 1 展示了這些環(huán)境變量。

表 1. Nautilus 環(huán)境變量

環(huán)境變量 描述
NAUTILUS_SCRIPT_SELECTED_FILE_PATHS 所選文件的新行分割路徑(僅針對本地)
NAUTILUS_SCRIPT_SELECTED_URIS 所選文件的新行分割 URIs
NAUTILUS_SCRIPT_CURRENT_URI 當前位置
NAUTILUS_SCRIPT_WINDOW_GEOMETRY 當前窗口的位置和大小

 在 Python 中,通過對 os.environ.get 函數(shù)的一個調(diào)用來獲取這些變量的值,具體如下:

selected = os.environ.get('NAUTILUS_SCRIPT_SELECTED_FILE_PATHS,'')

此調(diào)用返回一個字符串,其包含到達由換行符分隔的全部所選文件。Python 利用下列代碼,簡化了將這一字符串返回到可迭代列表中的操作:

targets = selected.splitlines()

此時,也許應該停下來探討一下用戶交互。當控制從 Nautilus 傳送到腳本后,在該點上確實不存在對腳本的限制。根據(jù)腳本作用的不同,甚至不需要任何用戶反饋,除了一些類型的完成或錯誤消息,這樣通過一些簡單的消息框就可處理好。由于在編寫 Nautilus 時采用了 gtk windowing 工具包,所以盡管這不是必須的,但是采用相同的做法很合乎邏輯。您可以很方便地使用 TkInter 或者 wxPython。

鑒于本文的目的,您將采用 gtk。生成一個用于通信完成狀態(tài)的簡單消息框,僅需幾行代碼,出于方便閱讀的目的,如果想創(chuàng)建簡單的函數(shù)來生成消息,這個代碼將最為合適。總共需要 4 行代碼:

def alert(msg):
dialog = gtk.MessageDialog()
dialog.set_markup(msg)
dialog.run()

#p#

示例:創(chuàng)建簡單腳本來返回所選文件的數(shù)量

第一個示例程序?qū)⒍鄠€程序段合并成一個簡單腳本,來返回當前所選文件的數(shù)量。這一腳本可用于文件或者目錄??衫昧硪粋€ Python 庫函數(shù),os.walk,遞歸地構(gòu)建每個目錄中文件的清單??偣灿?38 行代碼,如清單 1 所示,這就是這一小工具所需的全部內(nèi)容,其中還包括了空行。

清單 1. 用于 Filecount 腳本的 代碼 Python

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
import os
def alert(msg):
"""Show a dialog with a simple message."""
dialog = gtk.MessageDialog()
dialog.set_markup(msg)
dialog.run()
def main():
selected = os.environ.get('NAUTILUS_SCRIPT_SELECTED_URIS', '')
curdir = os.environ.get('NAUTILUS_SCRIPT_CURRENT_URI', os.curdir)
if selected:
targets = selected.splitlines()
else:
targets = [curdir]
files = []
directories = []
for target in targets:
if target.startswith('file:///'):
target = target[7:]
for dirname, dirnames, filenames in os.walk(target):
for dirname in dirnames:
directories.append(dirname)
for filename in filenames:
files.append(filename)
alert('%s directories and %s files' %
(len(directories),len(files)))
if __name__ == "__main__":
main()

圖 1 展示了當在文件上右擊鼠標或者選擇一組文件時所看到的內(nèi)容。Scripts 菜單選項展示 .gnome2/nautilus-scripts 中所有的可執(zhí)行文件,并給出了打開文件夾的選項。選擇一個文件來執(zhí)行該腳本。

在 Nautilus 中選擇文件

圖 1.在 Nautilus 中選擇文件

 圖 2 展示了 Filecount.py 腳本的運行結(jié)果。

Filecount.py 輸出

圖 2. Filecount.py 輸出

在調(diào)試 Nautilus 腳本時,有幾件事需要注意。第一件事是關(guān)閉 Nautilus 的所有實例,來使它完全重新加載,并找到新腳本或者擴展??刹捎萌缦旅睿?/p>

nautilus -q

下一個常用命令可實現(xiàn)不必打開首選或者配置數(shù)據(jù),而直接運行 Nautilus。這在解決腳本或者擴展在無意間造成破壞之類的問題時,會節(jié)省很多步驟。命令如下:

nautilus -no-desktop

確保 filecount 工具可被 Nautilus 訪問所剩的最后一步是將其復制到 ~/.gnome2/nautilus-scripts 目錄,并改變文件代碼來允許執(zhí)行,相關(guān)命令是:

chmod +x Filecount.py

#p#

示例:創(chuàng)建文件 cleanup 工具

第二個例子是,創(chuàng)建文件 cleanup 工具,來查找任何可能由 Vim 或者 EMACS 之類的編輯器臨時生成的文件。僅通過簡單地修改 check 函數(shù),就可利用相同的概念來清除任何特定文件的目錄。這一代碼屬于靜默操作,這意味著它執(zhí)行后不向用戶提供任何反饋。

該腳本的主函數(shù)看上去基本與前面具的示例相同,除了幾個微不足道的異常。此代碼會利用遞歸概念多次調(diào)用主函數(shù),直至處理完最后一個目錄為止。您可以采用 os.walk 函數(shù),而不必采用遞歸來完成相同的任務。文件檢查發(fā)生在 check 函數(shù)中,僅簡單地檢查以波浪號(~)或者井號(#)結(jié)束的文件,以井號后開始或擴展名 .pyc 結(jié)束的文件。該示例展示了 Python 標準庫 os 模塊所提供的數(shù)量眾多的函數(shù)。它還提供了獨立于操作系統(tǒng)方式來操作路徑名和目錄,以及執(zhí)行文件操作的示例。清單 2 展示了該腳本的代碼。

清單 2. 用于 cleanup 腳本的 Python 代碼

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
import os
def check(path):
"""Returns true to indicate a file should be removed."""
if path.endswith('~'):
return True
if path.startswith('#') and basename.endswith('#'):
return True
if path.endswith('.pyc'):
return True
return False
def walk(dirname=None):
selected = os.environ.get('NAUTILUS_SCRIPT_SELECTED_FILE_PATHS', '')
curdir = os.environ.get('NAUTILUS_SCRIPT_CURRENT_URI', os.curdir)
if dirname is not None:
targets = [dirname]
elif selected:
targets = selected.splitlines()
else:
targets = [curdir]
for target in targets:
if target.startswith('file:///'):
target = target[7:]
if not os.path.isdir(target): continue
for dirname, dirnames, files in os.walk(target):
for dir in dirnames:
dir = os.path.join(dirname, dir)
walk(dir)
for file in files:
file = os.path.join(dirname, file)
if check(file):
os.remove(file)
if __name__ == '__main__':
walk()

#p#

Nautilus 擴展

增強 Nautilus 的第二個方法是通過創(chuàng)建擴展。此方法比第一個復雜,但有很多優(yōu)勢。Nautilus 擴展可被內(nèi)嵌到文件展示窗口中,那么就可以編寫利用以前沒有的信息來填充列的擴展。首先要做的就是利用如下命令安裝 python-nautilus 擴展:

sudo apt-get install python-nautilus

此命令下載并安裝所需的文件,包括文檔和示例??稍谀夸?/usr/share/doc/python-nautilus/examples 中到找到示例代碼。安裝完成后,就可以訪問一組 Nautilus 類和提供程序來再次對其進行編碼。表 2 展示了該清單。

表 2. Nautilus 類與供應商

類或者供應商 描述
nautilus.Column 引用 Nautilus column 對象
nautilus.FileInfo 引用 Nautilus fileinfo 對象
nautilus.Menu 引用 Nautilus menu 對象
nautilus.MenuItem 引用 Nautilus menuitem 對象
nautilus.PropertyPage 引用 Nautilus propertypage 對象
nautilus.ColumnProvider 允許在 Nautilus 列中展示輸出
nautilus.InfoProvider 提供關(guān)于文件的信息
nautilus.LocationWidgetProvider 展示位置
nautilus.MenuProvider 為右擊菜單增加新功能
nautilus.PropertyPageProvider 為屬性頁面增加信息

gnome.org 站點上提供的示例展示了 MenuProvider(background-image.py 和 open-terminal.py)、ColumnProvider 以及 InfoProvider(block-size-column.py)、和 PropertyPageProvider(md5sum-property-page.py)的使用。ColumnProvider 采用 13 行 Python 可執(zhí)行代碼來向 Nautilus 引入新的列。一旦該代碼被放置到合適的目錄中(~/.nautilus/python-extensions)并且 Nautilus 已重啟,在單擊 View > Visible Columns 時將會看到新的選項。當將查看類型設置為 List 時,才會出現(xiàn) Visible Columns 選項。通過選擇展示以下 Python 庫調(diào)用結(jié)果的復選框,來啟用 Block size 列:

str(os.stat(filename).st_blksize))

任何 Python 擴展的基本模式都是對現(xiàn)有 Nautilus 提供程序基本類進行子類劃分,然后執(zhí)行一系列指令,并最終返回合適的 Nautilus 對象。在 block-size-column.py 例子中,返回的對象是 nautilus.Column。必須向 Nautilus 傳遞 4 個參數(shù),包括 name、attribute、label、以及 description。本例子的 Python 代碼是:

return nautilus.Column("NautilusPython::block_size_column",
"block_size",
"Block size",
"Get the block size")

編寫新擴展的代碼涉及繼承來自特定基本類的信息。 在 block-size-column.py 的例子中,nautilus.ColumnProvider 與 nautilus.InfoProvider 在類定義中有舉例,因此新類要從這兩處繼承。接下來需要覆蓋來自基類或者類的任何方法來填充列。在 block-size-column.py 例子中,可通過覆蓋 get_columns 和 update_file_info 方法來完成。

向 Nautilus 擴展傳遞信息的方法與腳本示例不同。Nautilus 實際上是啟動新的流程來執(zhí)行腳本,并設置多個環(huán)境變量來傳遞信息。在與 Nautilus 相同的流程中執(zhí)行的擴展,能夠訪問對象、方法、和屬性。通過 nautilus.FileInfo 傳遞的文件信息,包括 file_type、location、name、uri、以及 mime_type。想要向 FileInfo 對象增加信息,必須調(diào)用 add_string_attribute 方法。下面的例子是采用這一方法,來向 FileInfo 對象增加新的屬性。#p#

示例:列出了文件中的行數(shù)

第一個例子使用 PropertyPageProvider 方法在文件(或多個文件)上單擊右鍵顯示行數(shù)和參數(shù),然后單擊 Properties。這一擴展背后的基本思想是計算文件中的行數(shù)和參數(shù)個數(shù),并在文件屬性頁的新選項卡中報告結(jié)果。擴展可以直接訪問了 Nautilus 數(shù)據(jù)結(jié)構(gòu),包括 file 對象。惟一要做的是利用 urllib.unquote 庫函數(shù)來打開名字,操作如下:

filename = urllib.unquote(file.get_uri()[7:]

Python 中的一些行完成了對行及參數(shù)計數(shù)的主要工作。對于本例來說,創(chuàng)建 count 函數(shù)來將整個文件讀取到一個大字符串中,然后計算參數(shù)數(shù)量及新添參數(shù)數(shù)量。因為屬性頁面可被顯示為很多選中的文件及目錄,所以必須預先計算多個文件。此時,惟一要做的就是將結(jié)果添加到屬性頁上的新頁中。本例創(chuàng)建了示例 gtk.Hbox,然后利用獲取的信息來填充大量標簽,如清單 3 所示。

清單 3. Linecountextension.py 文件

import nautilus
import urllib
import gtk
import os
types = ['.py','.js','.html','.css','.txt','.rst','.cgi']
exceptions = ('MochiKit.js',)
class LineCountPropertyPage(nautilus.PropertyPageProvider):
def __init__(self):
pass
def count(self, filename):
s = open(filename).read()
return s.count('\n'), len(s)
def get_property_pages(self, files):
if not len(files):
return
lines = 0
chars = 0
for file in files:
if not file.is_directory():
result = self.count(urllib.unquote(file.get_uri()[7:]))
lines += result[0]
chars += result[1]
self.property_label = gtk.Label('Linecount')
self.property_label.show()
self.hbox = gtk.HBox(0, False)
self.hbox.show()
label = gtk.Label('Lines:')
label.show()
self.hbox.pack_start(label)
self.value_label = gtk.Label()
self.hbox.pack_start(self.value_label)
self.value_label.set_text(str(lines))
self.value_label.show()
self.chars_label = gtk.Label('Characters:')
self.chars_label.show()
self.hbox.pack_start(self.chars_label)
self.chars_value = gtk.Label()
self.hbox.pack_start(self.chars_value)
self.chars_value.set_text(str(chars))
self.chars_value.show()
return nautilus.PropertyPage("NautilusPython::linecount",
self.property_label, self.hbox),

圖 3 展示了在文件上單擊右鍵并單擊 Linecount 選項卡的結(jié)果。此時,需要注意,這一特性可用于文件或者任何一組選定的文件和目錄。所報告的數(shù)字將代表所有文件中的所有行。

單擊 Linecount 選項卡來查看文件的行數(shù)

圖 3. 單擊 Linecount 選項卡來查看文件的行數(shù)

最后,修改擴展函數(shù)來填充一列而不是整個屬性頁。因而代碼的修改相當少,盡管需要同時從 nautilus.ColumnProvider 和 nautilus.InfoProvider 繼承。還必須執(zhí)行 get_columns 和 update_file_info。方法 get_columns 僅返回由方法 count 獲取的信息。

方法 count 為列提供程序擴展采用不同的技術(shù)。Python 的 readlines 例程用于將一個文件的所有行讀取到一列字符串中。計算行的總數(shù)就是在 len(s) 語句中返回的清單元素的數(shù)量。在兩個例子中都要進行文件類型檢查:這是要確保僅對包含需要計數(shù)行的文本文件進行計數(shù)??衫萌缦滦衼韯?chuàng)建一列可接受的文件擴展:

types = ['.py','.js','.html','.css','.txt','.rst','.cgi']

第二個清單包含了不會被計數(shù)的異常,對于本例來說,包含具有如下行的文件:

exceptions = ['MochiKit.js']

這兩個清單用于包括或者排除具有如下兩行代碼的文件:

if ext not in types or basename in exceptions:
return 0

整個擴展需要 26 行可執(zhí)行代碼。您可能想要修改擴展,并輸入清單來包含或者排除感興趣的文件,清單 4 展示了完整的擴展。

清單 4. 用于 Linecountcolumn 擴展的 Python 代碼

import nautilus
import urllib
import os
types = ['.py','.js','.html','.css','.txt','.rst','.cgi']
exceptions = ['MochiKit.js']
class LineCountExtension(nautilus.ColumnProvider, nautilus.InfoProvider):
def __init__(self):
pass
def count(self, filename):
ext = os.path.splitext(filename)[1]
basename = os.path.basename(filename)
if ext not in types or basename in exceptions:
return 0
s = open(filename).readlines()
return len(s)
def get_columns(self):
return nautilus.Column("NautilusPython::linecount",
"linecount",
"Line Count",
"The number of lines of code"),
def update_file_info(self, file):
if file.is_directory():
lines = 'n/a'
else:
lines = self.count(urllib.unquote(file.get_uri()[7:]))
file.add_string_attribute('linecount', str(lines))

圖 4 顯示了啟用 Line Count 列的 Nautilus 窗口。每個單獨的文件顯示全部行數(shù)。您需要利用該方法進行一次計算就可以知道您總共需要多少個文件。

 Nautilus 窗口中的 Line Count 列

圖 4. Nautilus 窗口中的 Line Count 列

結(jié)束語

利用 Python 來擴展 Nautilus 的確是個簡單的過程。Python 與 Python 標準庫非常的精巧,可用于編寫高效而易讀的代碼。理解 gnome.org 站點中的文檔與示例是很有挑戰(zhàn)性的,但也不是不可能。Google 中的一些搜索結(jié)果也能提供一些例子。此處的例子可用于幫助您掌握如何擴展 Nautilus 來滿足特定需求。如果您對 Python 編程很熟悉,那將不會有什么問題。

原文:http://www.ibm.com/developerworks/cn/linux/l-script-linux-desktop-2/index.html?ca=drs

【編輯推薦】

  1. 系統(tǒng)管理:解決Nautilus與Scim沖突問題
  2. 四招教你打造輕型Linux桌面環(huán)境
  3. linux問題解答之:linux Nautilus
責任編輯:黃丹 來源: IBMDW
相關(guān)推薦

2011-04-13 10:04:09

2010-08-18 16:10:18

虛擬路由器

2011-09-05 19:03:47

UbuntuNautilus

2015-05-04 14:25:55

UPYUN Open

2024-01-26 17:26:19

LinuxNautilus文件搜索

2018-05-18 10:06:30

開發(fā)者技能命令

2009-10-27 11:10:56

linux問題解答

2012-06-13 00:00:00

云計算NoSQLPHP

2011-09-14 17:08:08

VMware

2019-12-18 09:45:24

BashshellLinux

2023-05-15 09:14:38

2014-01-13 11:09:42

UC瀏覽器PC智能電視

2013-02-01 10:09:46

TV客

2009-09-18 19:00:01

2018-11-27 11:18:23

PythonConu測試容器

2018-12-18 10:52:32

邊緣計算云計算物聯(lián)網(wǎng)

2021-04-08 09:35:10

瀏覽器 Chrome Google

2011-03-15 09:18:17

NuGet

2020-10-22 14:10:34

VS CodePython開發(fā)

2022-06-30 16:10:26

Python計時器裝飾器
點贊
收藏

51CTO技術(shù)棧公眾號

国产精品久久午夜夜伦鲁鲁| 欧美专区一区二区三区| 精品欧美一区二区久久| 六月婷婷在线视频| 国产在线观看黄| 国产美女精品一区二区三区| 69久久夜色精品国产69| 久久免费手机视频| 福利在线一区| 欧美美女一区二区三区| 一区二区传媒有限公司| 麻豆传媒在线免费看| 91网站视频在线观看| 亚洲a∨日韩av高清在线观看| 日韩欧美不卡视频| 日韩欧美在线中字| 日韩精品亚洲视频| 下面一进一出好爽视频| av激情成人网| 舔着乳尖日韩一区| 日本道在线视频| 成av人电影在线观看| eeuss国产一区二区三区| 国产精品自产拍在线观看| 黄色片视频网站| 一区二区三区午夜探花| 国产亚洲精品久久| 国产肉体xxxx裸体784大胆| 国产精品毛片无码| 欧美日韩在线免费视频| 亚洲乱码中文字幕久久孕妇黑人| 怡红院红怡院欧美aⅴ怡春院| 国产日韩av一区二区| 久久久99国产精品免费| 人妻妺妺窝人体色www聚色窝| 麻豆精品久久久| 国产成人精品综合久久久| 日韩少妇裸体做爰视频| 在线播放不卡| 欧美丰满老妇厨房牲生活| 国产精品久久国产精麻豆96堂| 日韩美女国产精品| 亚洲国产三级网| 好吊操视频这里只有精品| 成人动漫视频在线观看| 欧美电影影音先锋| 日韩av在线中文| 国产成人a视频高清在线观看| 日韩欧美一区二区三区久久| 欧美在线观看www| 蜜桃视频在线网站| 五月激情丁香一区二区三区| 3d动漫一区二区三区| 都市激情国产精品| 天天综合天天做天天综合| av免费观看大全| 自拍偷拍亚洲视频| 色综合久久久久综合体| 欧美成人黑人猛交| 国产精品粉嫩| 欧美无砖专区一中文字| www.com操| 四虎在线精品| 日韩欧美不卡一区| 亚洲观看黄色网| 国产精选一区| 日韩天堂在线视频| 美女福利视频在线观看| 欧美日韩一区二区国产| 久久久久久中文| 天天操天天摸天天干| 免费在线成人| 国产视频福利一区| www.av日韩| 91麻豆免费观看| 日韩欧美一区二区三区四区五区 | 老熟妇仑乱一区二区av| 日韩国产在线观看一区| 91精品久久久久久久久久久久久| 国产乱子伦精品无码码专区| 成人激情免费电影网址| 日本婷婷久久久久久久久一区二区 | 麻豆一区二区三区| 亚洲r级在线观看| 日韩在线一区二区三区四区| 久久精品人人爽人人爽| 波多野结衣激情| 高清视频在线观看三级| 欧美综合天天夜夜久久| 在线免费黄色小视频| 国产精品成人自拍| 国产一区二区三区日韩欧美| 欧美在线视频第一页| 亚洲在线国产日韩欧美| 国产日韩欧美一二三区| 国模人体一区二区| 国产日产欧美一区| 大片在线观看网站免费收看| 自拍偷拍欧美视频| 91精品免费在线| 播金莲一级淫片aaaaaaa| 91精品久久久久久久久久不卡| 国产91成人video| 91中文字幕在线视频| av亚洲精华国产精华精华| 午夜欧美一区二区三区免费观看| 综合图区亚洲| 欧美天天综合网| 天堂www中文在线资源| 久久人人88| 欧美在线视频网| 亚洲经典一区二区| 国产精品青草久久| 99re在线视频免费观看| 亚洲性视频在线| 北条麻妃在线一区二区| 99精品人妻国产毛片| 国产99久久精品| 中文字幕人成一区| 粉嫩91精品久久久久久久99蜜桃| 亚洲国产欧美精品| 久久无码精品丰满人妻| 久久99久久99小草精品免视看| 欧美国产一二三区| 国产美女高潮在线观看| 日韩一级黄色大片| 老司机成人免费视频| 男人的天堂亚洲一区| 蜜桃狠狠色伊人亚洲综合网站| 麻豆福利在线观看| 欧美一区二区三区电影| 亚洲av无一区二区三区| 日韩高清欧美激情| 欧美亚洲免费高清在线观看 | 成人精品网站在线观看| 欧美高清电影在线| 天天色综合成人网| 污污污www精品国产网站| 欧美在线日韩| 91色精品视频在线| 麻豆视频在线播放| 777色狠狠一区二区三区| 久久亚洲无码视频| 日韩经典一区二区| 新呦u视频一区二区| 欧美黑人一区| 亚洲性视频网站| 瑟瑟视频在线免费观看| 国产亚洲欧美中文| 不卡av免费在线| 日韩国产一区二区| 国产在线日韩在线| 日韩精品成人av| 3d成人动漫网站| 欧美日韩在线国产| 成人激情免费网站| 国产日产欧美视频| 国产一区二区三区四区五区| 国产第一区电影| 午夜在线视频| 7777精品伊人久久久大香线蕉的 | 日韩电影在线一区二区三区| 日本a级片久久久| 日韩色淫视频| 美乳少妇欧美精品| 免费激情视频网站| 一本久久精品一区二区| 国产又粗又硬视频| 激情偷乱视频一区二区三区| 51xx午夜影福利| 久久a级毛片毛片免费观看| 日本久久精品视频| 午夜激情视频在线| 欧美美女黄视频| 久久久久久久久久99| 91亚洲精品乱码久久久久久蜜桃| 欧美日韩一区二区在线免费观看| 色无极亚洲影院| 成人午夜影院在线观看| 亚洲精品mv| 久久精品国产99国产精品澳门| 成人午夜免费福利| 日本电影亚洲天堂一区| 巨大荫蒂视频欧美另类大| 美国一区二区三区在线播放| 国产欧美综合一区| 高清一区二区三区| 日韩美女免费观看| 毛片网站在线免费观看| 亚洲国产97在线精品一区| 亚洲国产成人精品女人久久| 亚洲婷婷在线视频| 黄色性生活一级片| 久久国产精品72免费观看| www.日本三级| 日韩欧美一区免费| 精品国产一区二区三区久久久久久| av免费在线一区| 欧美另类高清videos| 青青草视频免费在线观看| 欧美精选午夜久久久乱码6080| 国产精品变态另类虐交| 中文字幕电影一区| 国产精品久久久久久亚洲色| 极品尤物av久久免费看| 欧美日本视频在线观看| 亚洲精品久久| 日韩高清三级| 久久影视三级福利片| 成人免费xxxxx在线观看| 偷拍自拍在线看| 欧美精品一区在线播放| av中文在线| 日韩精品黄色网| 国产自产一区二区| 欧美一区二区网站| 性色av一区二区三区四区| 亚洲国产精品欧美一二99| 免费黄色激情视频| 久久精品一区二区三区四区| 久久久久久婷婷| 精品一区二区三区欧美| 亚州精品一二三区| 久久久久国产一区二区| 欧美成人三级在线视频| 欧美久久综合| 天天做天天爱天天高潮| 成人av资源电影网站| 欧美另类高清视频在线| 嫩草国产精品入口| http;//www.99re视频| 99精品女人在线观看免费视频| 国产精品电影观看| 中文一区一区三区高中清不卡免费| 久久久这里只有精品视频| jizzjizz亚洲| 欧美男插女视频| 在线观看午夜av| 另类色图亚洲色图| 免费大片在线观看www| 中文字幕欧美日韩精品| 高清毛片在线看| 亚洲网站在线播放| 国产原创av在线| 亚洲午夜久久久久久久| 日本人妖在线| 亚洲欧美成人网| 国产人成在线观看| 国产午夜精品全部视频在线播放| 精品视频一二三| 一本久久综合亚洲鲁鲁| 成年人在线观看视频| 深夜福利国产精品| 欧美三级电影一区二区三区| 精品国产依人香蕉在线精品| 国产乱色在线观看| 色综合久久久888| www.综合网.com| 97avcom| 欧美成人黑人| 国产精品国语对白| 国产情侣一区在线| 99在线观看视频| 亚洲国产合集| 亚洲成人av动漫| 欧美激情亚洲| 欧美三级一级片| 美女视频网站久久| 国产精品二区视频| 93久久精品日日躁夜夜躁欧美 | 天码人妻一区二区三区在线看| 色综合天天综合狠狠| 丰满人妻一区二区三区四区| 欧美日韩精品一区二区三区四区 | 操人视频在线观看欧美| 国产一线二线在线观看| 欧洲成人性视频| 99久久99九九99九九九| 国产99视频精品免费视频36| 亚洲+变态+欧美+另类+精品| 亚洲春色在线视频| 欧美日韩国产探花| 中文字幕无码不卡免费视频| 国产美女一区二区三区| www.超碰97| 亚洲人成网站色在线观看| 国产成人愉拍精品久久| 欧美色中文字幕| 人妻无码一区二区三区久久99| 亚洲欧美日韩精品| 国产精品va在线观看视色| 国产91成人video| 国内精品视频| 欧洲精品久久| 黄色另类av| 色片在线免费观看| av一区二区三区在线| 影音先锋男人看片资源| 精品女厕一区二区三区| 国产美女三级无套内谢| 亚洲成年人在线| 中文字幕在线播放| 欧美最顶级丰满的aⅴ艳星| 精品午夜视频| 亚洲黄色一区二区三区| 亚洲在线黄色| 亚洲色图欧美另类| 中文字幕一区二区三区乱码在线| 91在线看视频| 精品国一区二区三区| 免费网站看v片在线a| 国产mv免费观看入口亚洲| 国产精品午夜av| 男同互操gay射视频在线看| 久久综合九色| 一区二区免费在线观看视频| 亚洲欧美视频在线观看视频| 国产精品传媒在线观看| 日韩精品视频观看| 国语对白在线刺激| 亚洲综合中文字幕在线观看| 欧美午夜精彩| 青青在线视频观看| av一区二区三区四区| 国产 日韩 欧美 成人| 91精品国产综合久久蜜臀| 91精彩在线视频| 国产精品电影网站| 欧美一级本道电影免费专区| 国产精品少妇在线视频| 久久久777精品电影网影网| 国产精品一区二区6| 精品国产乱码久久久久久免费| 成视频免费观看在线看| 成人啪啪免费看| 国产二区精品| 蜜桃福利午夜精品一区| 亚洲色图视频网| 国产伦精品一区二区三区免.费| 国产香蕉97碰碰久久人人| 欧美影视资讯| 色一情一区二区三区四区| 日韩高清不卡一区| 久久久久久国产免费a片| 欧美视频一区在线观看| 在线激情网站| 91免费人成网站在线观看18| 五月婷婷亚洲| 三级网站免费看| 夜夜嗨av一区二区三区网页 | 在线观看 亚洲| 亚洲男人的天堂在线| 黑人巨大精品欧美一区二区桃花岛| 激情视频在线观看一区二区三区| 亚洲免费大片| 波多野结衣一本| 欧美三级韩国三级日本一级| 在线视频二区| 97se国产在线视频| 亚洲国产精品第一区二区三区| 亚洲熟女乱综合一区二区三区| 色视频成人在线观看免| 91xxx在线观看| 成人黄色免费网站在线观看| 国产精品vip| 蜜臀av一区二区三区有限公司| 欧美在线观看一区二区| 黄色成人在线| 国产一区免费视频| 国产麻豆综合| 久久av红桃一区二区禁漫| 欧美大片一区二区| 亚洲精华液一区二区三区| 午夜精品一区二区在线观看的| 激情另类小说区图片区视频区| 麻豆亚洲av成人无码久久精品| 亚洲男人第一av网站| 欧美国产视频| 成人黄色av片| 国产精品久久久久久福利一牛影视| 国产熟女一区二区三区四区| 555www成人网| 日韩在线不卡| 国产一级免费片| 欧美综合天天夜夜久久| 污片视频在线免费观看| 欧美精品欧美精品| 国内精品国产成人| 欧美国产成人精品一区二区三区| 搡老女人一区二区三区视频tv| 成人爽a毛片| 国产一伦一伦一伦| 午夜精品久久久久久久| 午夜视频在线观看免费视频| 国产日韩久久| 极品少妇xxxx精品少妇| 6080午夜伦理| 欧美国产日韩一区二区| 欧美日韩激情在线一区二区三区| 国产xxx在线观看|