精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

a级在线观看视频| 国产在线播放91| 国产精品欧美大片| 欧美一区二区三区成人久久片| 免费日韩av片| 九九视频免费看| 久久久在线观看| 精品国产一区二区三区av片| 中文字幕网av| 欧美日韩亚洲综合在线 | 一区二区不卡在线观看| 欧美国产激情一区二区三区蜜月| 丰满大乳国产精品| 蜜桃臀一区二区三区| 自拍偷拍亚洲综合| 美女日韩欧美| 可以在线看的黄色网址| 原创国产精品91| 久久这里有精品15一区二区三区| 免费观看日批视频| 亚州精品天堂中文字幕| 久久五月激情| 神马久久久久久久久久| 国产精品美女www| 青青草伊人久久| 91亚洲国产成人久久精品麻豆| 国产日本一区二区三区| 久久女同性恋中文字幕| 国产精品yjizz视频网| 国产一区二区在线免费| 337p粉嫩大胆噜噜噜噜噜91av| 黄色影院在线播放| 福利在线一区二区| 1024成人网色www| 多野结衣av一区| 极品白嫩的小少妇| 精品sm在线观看| 清纯唯美亚洲综合一区| 国产在线免费av| 国产亚洲精品va在线观看| 欧美区亚洲区| 成人精品在线播放| 亚洲中文字幕无码一区二区三区 | 日韩av影视综合网| 激情久久中文字幕| 天天操天天干视频| 国产日韩欧美二区| 亚洲精品乱码久久久久久久久 | 上原亚衣av一区二区三区| 亚洲一区电影| 性欧美精品中出| 777午夜精品福利在线观看| 色777狠狠狠综合伊人| 精品少妇久久久| 91精品啪aⅴ在线观看国产| 久久综合色婷婷| 18videosex性欧美麻豆| 在线观看免费视频国产| 一区二区三区四区在线观看视频 | 99re热久久这里只有精品34| 亚洲一区二区不卡视频| 欧美自拍丝袜亚洲| 欧美老女人另类| 日本爱爱爱视频| 国产亚洲欧美另类一区二区三区| 欧美亚洲综合在线| 精品精品国产毛片在线看| 中文字幕xxx| 国产精品久久久久久久久久久久| 国产精品视频一二| 三级欧美日韩| 一级做a爰片久久毛片美女图片| 成人爽a毛片免费啪啪红桃视频| 欧美 日韩 国产 一区二区三区 | av亚洲天堂网| 亚洲欧美在线看| 久久精选视频| 五月婷婷丁香花| 日韩妆和欧美的一区二区| 精品视频偷偷看在线观看| 久久字幕精品一区| 亚洲图片88| 手机看片国产精品| 久久精品国产亚洲7777| 激情五月婷婷综合| 免费电影日韩网站| 999视频在线| 欧美三日本三级少妇三99| 欧美日韩精品欧美日韩精品| 成人综合专区| 神马午夜一区二区| 九九久久久久久| 国产精品一二三在线| 国产日韩精品一区二区三区在线| 国产中文在线播放| 亚洲精品在线视频免费观看| 久久福利视频网| 亚洲激情图片qvod| av有声小说一区二区三区| 69精品久久久| 国产玉足脚交久久欧美| 日韩一区二区精品视频| 久久99热这里只有精品| av今日在线| 国产污片在线观看| 国产伦精品一区二区三区视频孕妇 | 一区二区三区在线视频看| 制服.丝袜.亚洲.另类.中文| 伊人久久大香线蕉综合热线| 麻豆最新免费在线视频| 精品少妇人妻av一区二区三区| 人人澡人人澡人人看欧美| 欧美久久一二三四区| 日本亚洲三级在线| 欧美爱爱视频| 一级黄色av片| 丰满少妇大力进入| 国外成人性视频| 亚洲在线观看免费视频| 国产日产精品一区二区三区四区的观看方式| 999久久久久久| 男人的天堂最新网址| 成人高清视频观看www| 在线观看日韩av先锋影音电影院| 亚洲乱码在线| 欧美aa在线观看| 波多野结衣mp4| 做爰高潮hd色即是空| 欧美黑人xxxx| 亚洲国产精品久久久久秋霞蜜臀| 成人免费电影视频| 成人一区不卡| 乱精品一区字幕二区| 午夜激情视频在线播放| 美脚丝袜脚交一区二区| 成人久久一区二区三区| 亚洲社区在线观看| 一区二区成人在线观看| 天堂在线一区二区| 免费看久久久| 酒色婷婷桃色成人免费av网| 一级免费在线观看| 午夜免费一级片| 欧美精品欧美精品| 日韩中文字幕免费视频| 欧美日韩三级在线| 久久久三级国产网站| 精品一区二区三区在线观看| 欧美重口另类| 日韩免费高清视频网站| 九色91在线| 久久精品国产亚洲AV无码男同| 一区二区三区人妻| 蜜臀精品一区二区| 欧美一区二区三区四区在线观看地址 | 日本三级韩国三级久久| 日日骚av一区| 亚洲欧洲美洲在线综合| 精品色蜜蜜精品视频在线观看| 久久久一二三| 一区二区三区在线电影| 日韩中文字幕| 日本一级理论片在线大全| 免费看日韩av| 69亚洲精品久久久蜜桃小说| 国产传媒国产传媒| 九九热在线免费| 狠狠色噜噜狠狠狠狠色吗综合| 国产欧洲精品视频| 欧美最顶级丰满的aⅴ艳星| 久久久av亚洲男天堂| 在线看日韩欧美| 欧美性一区二区| 亚洲天堂成人网| 久久中文字幕一区二区三区| 999精品视频在这里| 粉嫩av国产一区二区三区| 亚洲男人在线| 午夜激情视频在线| 黄色三级网站在线观看| 亚洲精品18p| 日韩三级小视频| 精品国产国产综合精品| 亚洲熟女乱综合一区二区三区| 在线视频日韩一区| 一道本在线观看视频| 国产玖玖精品视频| 综合久久五月天| 精品视频久久久久久久| 国产精品每日更新| 天堂va蜜桃一区二区三区漫画版| 精品人人人人| 日本精品视频| 亚洲人体在线| 成人自拍视频| 欧美1—12sexvideos| 色网站免费观看| 国产精品2020| 男生裸体视频网站| 喷水视频在线观看| 国产精品亚洲a| 一区二区三区日韩视频| 亚洲一区二区四区| 久久久久福利视频| 日韩中文字幕免费在线| 乱熟女高潮一区二区在线| 日韩激情视频| 国内精品国产三级国产99| 日韩av片在线看| 日韩网址在线观看| 亚洲小视频网站| 色综合久久久无码中文字幕波多| 亚洲av综合一区二区| 少妇精品无码一区二区免费视频| 精品丰满少妇一区二区三区| 久久中文字幕无码| 精品乱码一区内射人妻无码| 99久久久国产精品无码网爆| 国产三区在线播放| 亚洲精品人妻无码| 亚洲天堂中文字幕在线| 国产xxxx孕妇| 亚洲精品一区二区三区四区 | 中文字幕人成一区| 99久久国产综合精品五月天喷水| 永久免费黄色片| 精品国产成人亚洲午夜福利| 国内av在线播放| 日本黄色三级视频| 青青草视频在线观看| 55av亚洲| 2019中文亚洲字幕| 欧美在线黄色| 国产亚洲午夜| 九九视频精品免费| 亚洲精品日本| 午夜欧美精品| 成人国产免费视频| 亚洲一区二区视频| 91精品国产综合久久精品性色| 日韩欧美国产不卡| 7777精品视频| 免费日韩av电影| 久久久久久av无码免费网站下载| 亚洲一二区在线观看| 这里只有久久精品| 国产精品一二三区在线观看| www.99re7.com| 在线国产91| 少妇高潮一区二区三区99| 国产精品日韩精品在线播放 | 久久免费精品视频| 日本电影亚洲天堂| 国产a级黄色大片| 三区四区在线观看| 欧美一级做a爰片免费视频| 巨骚激情综合| 日韩国产91| 午夜亚洲福利| 成人免费观看av| 亚洲精品欧美激情| 亚洲白虎美女被爆操| 美女视频黄免费的亚洲男人天堂| 色悠悠国产精品| 国产美女直播视频一区| 影音先锋在线亚洲| 日韩成人精品视频在线观看| 九九热久久免费视频| 亚洲av无码国产精品永久一区 | 成人性生活免费看| 久久国产露脸精品国产| 色就是色亚洲色图| 国产亚洲高清一区| 日本va欧美va瓶| 亚洲国产精品久久一线不卡| 欧美激情乱人伦一区| 中国黄色录像片| 国产全是老熟女太爽了| 午夜一区在线观看| 人人精品久久| 韩国毛片一区二区三区| 欧亚一区二区三区| 91爱视频在线| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 亚洲国产精品成人综合色在线婷婷| 欧美本精品男人aⅴ天堂| 国产精品久久久久久久久影视| 一区在线电影| 超碰97av在线| a天堂在线资源| 三级成人黄色影院| 91不卡在线观看| 国产欧美日韩不卡免费| 亚洲精品成人天堂一二三| 国产精品久久久久久久app| 午夜国产福利在线观看| 成人午夜精品福利免费| 精品91福利视频| 紧缚捆绑精品一区二区| 欧美无人高清视频在线观看| 久久久久久有精品国产| 免费在线观看视频a| 久青草视频在线观看| 成人爽a毛片免费啪啪动漫| 秋霞电影网一区二区| 欧美日韩一区二区三区高清| 97超碰人人模人人爽人人看| 超碰97在线资源站| 美女毛片在线看| 欧美毛片免费观看| 一区二区三区四区在线| 日韩一区二区精品视频| 日韩影院一区| 妺妺窝人体色www在线下载| 日本啊v在线| 亚洲一区二区三区无吗| 色菇凉天天综合网| 日本免费在线精品| 国产一区二区三区四区五区六区 | 天天操天天干天天爽| 精品国产一区探花在线观看| 亚洲国产电影在线观看| 久久久久亚洲精品国产| 精品亚洲视频在线| 国产jzjzjz丝袜老师水多| 日韩精品第一区| 亚洲综合成人在线| 国产精品亚洲综合天堂夜夜| 午夜精品福利一区二区| 手机在线免费看毛片| 韩国成人漫画| 久久久99精品久久| 97视频热人人精品| 日本少妇色视频| www在线观看黄色| 成人一道本在线| 国内精品一区二区三区| 欧美一区二区三区影院| 麻豆影院在线| 国产伦精品一区二区三区视频青涩| 精品视频在线导航| 国产精品www在线观看| 99久久精品国产色欲| 久久精品人人| 亚洲精品自拍偷拍| 亚洲天堂2018av| 在线观看三级视频| 高清国产午夜精品久久久久久| 97婷婷涩涩精品一区| 精品无码国产污污污免费网站 | 人妖粗暴刺激videos呻吟| 男女在线观看视频| 国产一区不卡精品| 全亚洲最色的网站在线观看| 男人舔女人下部高潮全视频| 欧洲精品99毛片免费高清观看| 欧洲国内综合视频| 少妇人妻大乳在线视频| 手机亚洲第一页| 老牛国产精品一区的观看方式| 精品国产区一区二区三区在线观看| 中文字幕第80页| 丁香花在线高清完整版视频| 波多野洁衣一区| 国产精品99久久久久久久久| 日韩精品成人一区| 不卡一区综合视频| 欧美精品一区二| 免费看黄色一级大片| a级毛片免费观看在线 | 亚洲色图第一页| 超级砰砰砰97免费观看最新一期| 欧美xxxx做受欧美护士| 日韩欧美精品网站| 日韩在线综合网| 亚洲羞羞网站| 亚洲视频你懂的| 91大学生片黄在线观看| 青梅竹马是消防员在线| 99免费精品视频| 久精品国产欧美| 国产成人无码一区二区在线播放| 欧美日本一区二区视频在线观看 | 一区视频免费观看| 精品在线播放| 亚洲男人av在线| 97精品人妻一区二区三区蜜桃| 粉嫩av国产一区二区三区| 日韩欧美精品网址| 亚洲图色中文字幕| 欧美黄色三级| 色综合色综合色综合色综合色综合| 久久久久久久久久久久久国产精品 | 精品少妇一区二区三区日产乱码 | 日韩一级视频免费观看在线| 欧洲美女亚洲激情| 国偷自产视频一区二区久| 精品香蕉一区二区三区| 91精品国自产在线| 久久久久av|